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
Respuesta
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.
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
Hay algunos [buenos ver las partes internas de PHP en YouTube] (http://www.youtube.com/watch?v=p5S1K60mhQU). – alex
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.
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
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.
- 1. OpenGL preguntas de rendimiento de bajo nivel
- 2. gzip - preguntas sobre el rendimiento
- 3. python __get__ method
- 4. Declaración de JavaScript Preguntas sobre el rendimiento
- 5. Preguntas sobre el rendimiento del canje
- 6. __get__ y __call__ en Python
- 7. Preguntas de rendimiento para SQL Dependencia de caché
- 8. Preguntas sobre el patrón de comando (PHP)
- 9. ¿Preguntas paralelas de mysql en php?
- 10. PHP matriz rendimiento - memoria sabia
- 11. Cuellos de botella de rendimiento en llamadas concurrentes a System.currentTimeInMillis()
- 12. Errores personalizados de PHP para llamadas AJAX
- 13. El rendimiento de XPath.evaluate se ralentiza (absurdamente) en llamadas múltiples
- 14. Zend preguntas de examen de muestra de certificación PHP
- 15. ¿Qué preguntas de la entrevista Hibernate preguntas?
- 16. algunas preguntas acerca de las sesiones de PHP
- 17. PHP __autoload rendimiento
- 18. ¿Problemas de rendimiento con llamadas repetidas a ConfigurationManager.AppSettings para obtener valores de aplicación?
- 19. PHP Red Bean ORM Problema de rendimiento
- 20. Rendimiento de FOR vs FOREACH en PHP
- 21. Rendimiento de try-catch en php
- 22. ASP.net preguntas de la entrevista
- 23. rendimiento de rendimiento anidado con IEnumerable
- 24. PHP 5 Reflexión de rendimiento API
- 25. Java - Programando con aserciones preguntas
- 26. Preguntas sobre Backbone.js con Handlebars.js
- 27. rendimiento de la función anónima en PHP
- 28. Prueba de rendimiento del código PHP
- 29. Algunas preguntas básicas de Python
- 30. Algunas preguntas de clasificación
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. –