2010-03-30 7 views
5

¿El rendimiento se ve afectado al usar MooseX :: Declare principalmente cuando se realiza su magia inicial (es decir, "traducir" la definición a la sintaxis estándar de Perl)? es decir, una vez completada la compilación y la configuración del tiempo de ejecución inicial, ¿existe una diferencia en el rendimiento al llamar a un método MooseX :: Declare frente a un método definido a través de una declaración tradicional?¿El rendimiento alcanzado con el uso de MooseX :: Declare se encuentra principalmente durante el inicio?

+2

El golpe de velocidad que observa es el paso make_immutable. Sería lento independientemente de si usa MXD o no; simplemente ocurre por defecto en MXD. – jrockway

Respuesta

8

La respuesta es sí y no. Dado que MooseX :: Declare usa MooseX::Method::Signatures para realizar el desempaquetado y la validación de parámetros, existe una sobrecarga de tiempo de ejecución en comparación con la no validación de los parámetros.

Pero si su idea de "declaración tradicional" incluye la validación del número y tipo de sus parámetros (y lo que debería si quieres código robusto) entonces no hay razón para pensar que el MXD validación/MXMS no sería nada más lento que la validación que haría usted mismo.

+1

Gracias por su respuesta. Por lo general hago una validación de los parámetros, pero no en el enésimo grado. Creo que tomo el enfoque Perlish de muchos otros desarrolladores de Perl. Supongo que lo que me gusta de MooseX :: Declare es que la sintaxis promueve la legibilidad tanto como cualquier otra cosa. –

2

MooseX :: Declare es una conversión en tiempo de compilación de la sintaxis declarativa al código "verdadero" de Perl. Toda su sobrecarga es en tiempo de compilación.

La sobrecarga del tiempo de ejecución de la que habla es de validación y coerción del tipo Moose. Ambos son opcionales: no necesita especificar un calificador de tipo y no necesita especificar is coerce. Si no usa ninguno, su rendimiento en el tiempo de ejecución debería ser muy similar al que tendría sin la magia de MooseX :: Declare.

Por lo tanto, en términos de tiempo de ejecución, es ganar/ganar. Usted solo paga por las funciones que usa. La validación de tipo es algo que tendría que hacer manualmente de todos modos, y la coerción, aunque definitivamente es un golpe de rendimiento, se habilita por argumento.

Cuestiones relacionadas