2009-09-08 24 views

Respuesta

15

(Negación: Sólo sé APC)

Lo que una caché de código de operación hacer es:

  • cuando se incluye un archivo/requerido, se toma la ruta completa a ese archivo
  • compruebe si los códigos de operación correspondientes a ese archivo ya están en la memoria RAM (en el caché del código de operación)
    • En caso afirmativo, devuelva esos códigos de operación para que se ejecuten
    • En caso negativo, cargue el archivo y compílelo en los códigos de operación; y almacenar códigos de operación en caché.

El punto importante, aquí, es el punto de entrada: la ruta completa al archivo.


Qué carga automática generalmente lo es:

  • obtener el nombre de una clase
  • transformarla en el nombre de un archivo
  • include/requerir ese archivo

Así , las informaciones que son relevantes para el caché del código de operación (ruta completa al archivo, y el hecho de que está incluido/requerido) todavía están aquí.

En consecuencia, la autocarga no debería ocasionar problemas con el almacenamiento en caché de los códigos operativos.

(Y, cuando se utiliza APC, no lo hace, por lo que yo puedo decir)

+0

Esta es mi experiencia también - El almacenamiento en caché de Opcode no se ve afectado por el uso de autocarga –

25

Código de operación cachés de trabajo (o al menos debería funcionar) con carga automática, pero puede potencialmente tener un impacto en el rendimiento de .

De Remember: be nice to byte code caches:

<arnaud_> does autoload have a performance impact when using apc ? 
<Rasmus_> it is slow both with and without apc 
<Rasmus_> but yes, moreso with apc because anything that is autoloaded is pushed down into the executor 
<Rasmus_> so nothing can be cached 
<Rasmus_> the script itself is cached of course, but no functions or classes 
<Rasmus_> Well, there is no way around that 
<Rasmus_> autoload is runtime dependent 
<Rasmus_> we have no idea if any autoloaded class should be loaded until the script is executed 
<Rasmus_> top-level clean deps would speed things up a lot 
<Rasmus_> it's not just autoload 
<Rasmus_> it is any sort of class or function declaration that depends on some runtime context 
<Rasmus_> if(cond) function foo... 
<Rasmus_> if(cond) include file 
<Rasmus_> where file has functions and classes 
<Rasmus_> or heaven forbid: function foo() { class bar { } } 

y this mail from Ramus:

para aclarar, por supuesto condicionalmente incluidos los archivos se compilan y almacenan en caché. El problema no son los archivos incluidos, sino las clases y funciones condicionalmente resultantes que necesitan para redefinirse en cada solicitud. Si eso es significativo o no se reduce a los detalles de la situación , pero no hay duda de que es más lento. Todo se reduce a un NOP frente a un FETCH_CLASS, por ejemplo, y el NOP es, obviamente, mucho más rápido.

+0

No estoy seguro de por qué no se ha subido la fecha. Acabo de comenzar una nueva publicación sobre este tema, ya que me gustaría saber si hay soluciones alternativas para spl_autoload_register -> http://stackoverflow.com/questions/1941541/php5-frameworks-autoloading-and-opcode-caching –

Cuestiones relacionadas