2011-01-24 9 views
18

Estoy tratando de encontrar una respuesta definitiva a la pregunta de que la carga automática mata el rendimiento cuando se usa APC y por qué (¿puntos de referencia?)¿La autocarga realmente mata el rendimiento cuando se utiliza APC (últimas versiones/actualizado). ¿Puntos de referencia?

P.S. Encontré esto link usando google/stackoverflow, pero me pregunto si esto aún se cumple. PHP debe haber sido mejorado para manejar esto? ¡Porque la carga automática es genial!

+1

Referencia: http://stackoverflow.com/questions/1396501/do-php-opcode-cache-work-with-autoload, http://stackoverflow.com/questions/1941541/php5-frameworks-autoloading-and -opcode-caching –

+0

Gracias Mike B. Leí ese tema. Esperaba algunos puntos de referencia. Debería actualizar mi respuesta. Supongo – Alfred

+2

. Interesante pregunta: nunca pensé que la carga automática pudiera causar problemas, y uso una gran biblioteca que usa mucha carga automática y se beneficia enormemente de APC, así que mi opinión es que la carga automática es simple. No es malo para APC. Los puntos de referencia serían interesantes sin embargo. – Hamish

Respuesta

5

Personalmente, no creo que confiar en __autoload() es una buena práctica. PHP es un lenguaje poco tipado, no un lenguaje perezosamente tipado. :)

Salida algo de rendimiento aquí:

respuesta de Rasmus en este (que también encontramos) era mi guidline a través de todos estos años:

<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 { } } 
+1

Todavía se mantiene en PHP5.3? Me gustaría ver algunos puntos de referencia o algo que respalde esto o un artículo o algo así. – Alfred

+0

Este es el punto de referencia más completo hasta la fecha que pude encontrar - http://weierophinney.net/matthew/archives/245-Autoloading-Benchmarks.html – seven

5

Hice un poco más googling y ha encontrado interesante esta article resumen a continuación:

Los puntos de referencia se corrieron 10 veces para cada estrategia:

enter image description here

Conclusión

Cada método tiene sus méritos. Durante el desarrollo, no desea necesariamente ejecutar un script para generar el mapa de clase o actualizar manualmente el mapa de clase cada vez que agrega una nueva clase. Dicho esto, si espera mucho tráfico a su sitio, es trivialmente fácil ejecutar un script durante la implementación para construir el mapa de clase por usted, y así permitirle obtener un poco de rendimiento adicional de su aplicación.

Cuestiones relacionadas