2010-07-25 13 views
5

Tengo un framework MVC PHP personalizado que estoy en el proceso de reescribir y tengo una pregunta sobre el rendimiento y los métodos mágicos. Con la porción de modelo del framework, estaba pensando que si los métodos mágicos __get/__set causarían demasiado rendimiento, sería útil usarlo. Me refiero a que acceder (leer y escribir) a los datos del modelo va a ser una de las cosas más comunes que se realizan. ¿Es el uso de __get/__set métodos mágicos demasiado grandes como un golpe de rendimiento para la funcionalidad de uso pesado como la porción de modelo de un marco MVC?__get/__ set/__ preguntas de rendimiento de llamadas con PHP

+0

Debería tratar de encontrar otra forma de usarlas y solo usarlas si es necesario. Además de ser lento, también son, en mi opinión, más difíciles de leer y mantener. –

Respuesta

8

Mídalo.

Sin duda tiene un gran impacto en el rendimiento, especialmente teniendo en cuenta que las llamadas a funciones son caras en PHP. Esta diferencia será aún mayor en la próxima versión de PHP, que implementa optimizaciones que hacen que el acceso regular a las propiedades de instancia declaradas sea mucho más rápido.

Dicho esto, PHP rara vez es el cuello de botella. Las consultas de E/S y de bases de datos con frecuencia toman mucho más tiempo. Esto, sin embargo, depende de tu uso; la única forma de saber con certeza que es un punto de referencia.

También son otros problemas de legibilidad con los métodos mágicos. A menudo degeneran en una gran declaración switch y comprometen la finalización del código, y ambos pueden ser éxitos en la productividad de la programación.

+3

Algunos IDEs permiten la finalización de código para métodos mágicos cuando [anota la clase con @method] (http://manual.phpdoc.org/HTMLframesConverter/default/phpDocumentor/tutorial_tags.method.pkg.html) – Gordon

+0

Hay algunos [buenos ver las partes internas de PHP en YouTube] (http://www.youtube.com/watch?v=p5S1K60mhQU). – alex

3

Puramente desde mi experiencia, agrega bastante sobre la sobrecarga. En una página con aproximadamente 4000 __get (sí, había bastantes datos en esa página), el rendimiento fue bastante más lento, hasta el punto que se volvió inaceptable. Lancé __set's & __get's para las variables que no requirieran alterar otros datos o dependencias externas (como claves foráneas), después de lo cual el tiempo para generar esa página fue aproximadamente 15% del tiempo tomó antes.

0

Me acabo de hacer esta misma pregunta y llegué a la misma conclusión: es mejor establecer las propiedades de la manera tradicional. __get() + interruptor masivo ralentiza todo

7

Aquí hay un an article (tres años) con algunos puntos de referencia. Ejecute sus propias pruebas para ver cómo impacta su código.

En general, son mucho más lentos. ¿Pero son ellos el cuello de botella? Depende de lo que estés haciendo. Si le preocupa la velocidad, ¿dónde se detiene? El ciclo foreach es más lento que el for, pero la mayoría de las personas no reescribe todo su código para usar el for.

El solo uso de PHP significa que la velocidad de su código no es tan crítica. Personalmente, preferiría cualquier estilo que lo haga más fácil de programar.

Cuestiones relacionadas