2010-03-30 6 views
5

La performance colpisce con l'utilizzo di MooseX :: Declare principalmente rilevato mentre fa la sua magia iniziale (cioè "tradurre" la definizione in sintassi Perl standard)? Ad esempio, una volta completata la compilazione e la configurazione iniziale del runtime, c'è una differenza di prestazioni nel chiamare un metodo MooseX :: Declare rispetto a un metodo definito tramite la dichiarazione tradizionale?La performance colpisce con l'uso di MooseX :: Declare principalmente durante l'avvio?

+2

Il colpo di velocità che si nota è il passaggio make_immutable. Sarebbe lento indipendentemente dal fatto che tu usi o meno MXD; succede semplicemente per default in MXD. – jrockway

risposta

8

La risposta è sì e no. Poiché MooseX :: Declare utilizza MooseX::Method::Signatures per eseguire il disimballaggio dei parametri e la convalida, è presente un sovraccarico di runtime rispetto ai parametri di non convalida.

Ma se la vostra idea di "dichiarazione tradizionale" comprende convalidare il numero e il tipo dei vostri parametri (e dovrebbe, se si desidera codice robusto) allora non c'è motivo di pensare che il MXD validazione/MXMS non sarebbe qualsiasi più lento della convalida che faresti tu stesso.

+1

Grazie per la risposta. Solitamente eseguo alcune convalide dei parametri, ma non all'ennesima potenza, suppongo di prendere l'approccio Perlish di molti altri sviluppatori Perl. Immagino che cosa mi piace di MooseX :: Declare è che la sintassi promuove la leggibilità come qualsiasi altra cosa. –

2

MooseX :: Declare è una conversione momento della compilazione della sintassi dichiarativa "true" codice Perl. Tutto il suo sovraccarico è in fase di compilazione.

L'overhead runtime di cui parli sarebbe convalida del tipo Moose e coercizione. Entrambi sono facoltativi: non è necessario specificare un qualificatore di tipo e non è necessario specificare is coerce. Se non ne usi nessuno, la tua performance di runtime dovrebbe essere molto simile a quella che sarebbe senza la magia di MooseX :: Declare.

Quindi, in termini di esecuzione, è win/win. Paghi solo per le funzioni che usi. La convalida del tipo è qualcosa che dovresti fare manualmente in ogni caso, e la coercizione, mentre sicuramente un colpo di performance, è abilitata su una base per argomento.

Problemi correlati