2009-12-21 32 views
9

Varios frameworks utilizan spl_autoload_register() para cargar clases dinámicamente (es decir, controladores y modelos). Hay un par de publicaciones sobre el tema de la carga automática y el almacenamiento en caché de códigos de operación. Un puesto en particular, tiene una respuesta por @cletus que hace referencia a @Rasmus hacer una serie de afirmaciones que llegar a ser desagradable para los que utilizan APC como una caché de código de operación:PHP5 Frameworks: Autoloading y Opcode Caching

No parece ser cualquier discusión sobre cualquier alternativa posible a la carga automática que no afecte el rendimiento de la memoria caché del código de operación.

¿Hay alguna forma de evitar el hecho de que las clases cargadas automáticamente no se agreguen a la memoria caché de códigos de bytes?

Si no, ¿hay algún método alternativo para cargar dinámicamente las clases que se almacenarán en caché?

+4

de lo que recuerdo de mis días de Mediawiki + APC, clases de auto-cargado conseguirán en caché por APC. – jldupont

+0

@jldupont - Acabo de actualizar para hacer referencia a una respuesta específica que me intrigó para escribir esta publicación. –

Respuesta

5

Parece que todavía hay confusión sobre este tema, sin embargo, en la mayoría de los casos se trata de facilidad frente a rendimiento.

Una buena lista de correo hilo para leer sería éste en la lista de correo Zend Marcos:

http://n4.nabble.com/ZF-and-Autoloading-td640085i20.html

Ahora, la correlación es aquí porque si se hereda de la que aún no es definido clase , puede confiar en la carga automática para definirlo (aunque también puede usar en incluir), y en realidad la presencia de la función de autocarga puede alentarlo a que use . Pero esta no es la autocarga que trae problemas (ver después de "no es solo autoload" de Ramus en el blog para ver algunos ejemplos de cosas problemáticas). Así que la frase correcta sería "las personas que tienden a confiar en la carga automática tienden a también para usar código que desafía el enlace en tiempo de compilación". Lo que no se puede ver como falla de carga automática, por supuesto, y simplemente evitar la carga automática no ayudará con un bit - también tendría que volver a escribir el código para que la unión en tiempo de compilación ocurra. Y no tiene nada que ver con los usos de autocarga de con "nuevo", por ejemplo.

En cuanto a la desaceleración de los efectos descritos anteriormente - es decir, la ausencia de el tiempo de compilación de unión - el código de hecho se vuelve un poco más lento y dicho código puede conducir en algunos casos oscuros a algunos problemas para cachés opcode (no en los casos de carga automática, pero en los casos en que las clases están definidas en condiciones internas, o, Dios no lo permita, se crea una definición diferente dependiendo de la condición), pero no tiene nada que ver con usar autocargada por sí mismo. La cantidad de desaceleración, sin embargo, parecen estar exagerrated en gran medida por personas - no es nada (y repito que ser claro - NADA) en comparación a la mejora en el rendimiento propuesta por el caché de código de operación debido a la ausencia de la operaciones de disco y etapa de compilación. Probablemente podría componer un punto de referencia artificial que mostraría una importante desaceleración , pero no creo que ninguna aplicación real siquiera se daría cuenta.

fuente:http://n4.nabble.com/ZF-and-Autoloading-td640085i20.html#a640092

+2

[enlace actualizado] (http://osdir.com/ml/php.zend.framework.general/2007-01/msg00132.html) a la cita completa. – Xeoncross