Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Frameworks y PHP orientado a objetos (http://www.forosdelweb.com/f68/)
-   -   Rendimiento: ¿conviene utilizar php POO? (http://www.forosdelweb.com/f68/rendimiento-conviene-utilizar-php-poo-653702/)

mariano_donati 13/12/2008 09:52

Rendimiento: ¿conviene utilizar php POO?
 
Buenas a todos. Hace unos meses me comencé a meter de lleno con php. Después tuve que dejar otro tiempo más porque me surgieron proyectos en otras plataformas, y ahora estoy retomando para hacer un proyecto personal en php. Me surgieron algunas dudas con respecto a la verdadera utilidad, en relación al rendimiento, de la programación orientada a objetos en php. Si bien no conozco como trabaja internamente php, es un lenguaje interpretado, es decir, que en cada carga o recarga de la página las clases en cuestión deben ser interpretadas una y otra vez. ¿Es más ineficiente interpretar una clase, que interpretar una secuencia de comandos?¿Alguien conoce de esta interna?. En .Net las clases son compiladas una vez que fueron solicitadas, por lo tanto, con cargas o recargas posteriores solo resta usarlas tranquilamente, ya que sabemos que ya ha pasado por esa etapa previamente.
Solo me estoy enfocando en el rendimiento de la aplicación. Si lo analizamos desde otro punto de vista, de seguro que encontramos muchas más ventajas a la programación orientada a objetos que a la programación procedimental.
Espero que alguien me oriente un poco en esto.
Saludos.

GatorV 13/12/2008 12:27

Respuesta: Rendimiento: ¿conviene utilizar php POO?
 
Tema trasladado PHP OO.

Es mínimo el impacto, si a caso lo que es más es la memoria ram que llegue a consumir, aunque no es nada que imapacte, ya que el compilador de PHP esta muy optimizado para evitar desperdiciar memoria.

Por otro lado si te importa un poco el tema de estar re-interpretando las clases, una vez que termines puedes usar Zend Optimizer para guardar solamente las clases en estado compilado, y asi eliminar el overhead de estar interpretando y ejecutando.

Saludos :adios:

enriqueplace 13/12/2008 16:49

Respuesta: Rendimiento: ¿conviene utilizar php POO?
 
Tus comentarios (completamente justificados) me hacen acordar a los mitos de la "optimización extrema" en PHP, algo que veo completamente injustificado.

La forma en que se hace las pruebas es generalmente muy fuera de la realidad, como hacer un loop de millones de registros para luego contar las milésimas de segundo entre usar un echo o un print.

El peor mal que podemos tener en la ingeniería de software es ir hacia la "optimización temprana", es decir, preocuparnos tempranamente del rendimiento y no de la funcionalidad o el diseño de un sistema.

La parte que no se llega a entender es que ya pasamos la época de hacer páginas PHP embebidas con HTML y conexiones SQL, actualmente los proyectos requieren SISTEMAS, y estos poder escalar y desarrollar rápidamente de acuerdo a las necesidades del mercado.

¿Cuanto cuesta modificar un producto web que no es un sistema? ¿cuanto nos cuesta hacer funcionalidades nuevas?


Si no tienes diseño, si no aplicamos metodologías que incluyan POO, dudo seriamente que podamos estar aptos de desarrollar un sistemas de medio para arriba.

Pero eso de "no uses require_once porque es caro", "echo es más rápido que print" ó "print es más rápido que echo" (he visto artículos sobre "optimización extrema" que dicen lo contrario entre ellos), etcétera, las considero completamente tontas e inútiles.

Podemos discutir que si tienes POO + Persistencia (BD), es seguro tendrás más consultas a la base de datos que si hicieras un JOIN y luego recuperaras los datos y procesaras, pero hay muchas técnicas para evitar esto, como el "lazy loading", evitando tener que consultar todas las veces por un mismo valor a la base de datos si ya lo tienes la primera vez, o evitar consultas SQL innecesarias por valores que perfectamente pueden estar en un array ya que no cambian (o en un archivo plano, luego lo puedes actualizar, etc), etc.

Siempre hay que tener en cuenta la escala del sistema, si es para 10 usuarios concurrentes, no me molestes con estas tonterías. ;-)

Pero puedes estar tranquilo, el problema no pasa por usar puramente POO, el problema para por otros lados, la latencia se estudia desde que el usuario ejecuta una acción y recorre todos los servicios y servidores hasta que el sistema responde, no es solo PHP.

PD: ahora me acuerdo que hace rato que quiero escribir un artículo sobre "lazy loading" ;-)

enriqueplace 14/12/2008 07:41

Respuesta: Rendimiento: ¿conviene utilizar php POO?
 
Cita:

Iniciado por GatorV (Mensaje 2704155)
Tema trasladado PHP OO.

Es mínimo el impacto, si a caso lo que es más es la memoria ram que llegue a consumir, aunque no es nada que imapacte, ya que el compilador de PHP esta muy optimizado para evitar desperdiciar memoria.

Por otro lado si te importa un poco el tema de estar re-interpretando las clases, una vez que termines puedes usar Zend Optimizer para guardar solamente las clases en estado compilado, y asi eliminar el overhead de estar interpretando y ejecutando.

Saludos :adios:

Estimado, por lo que tengo entendido (nunca lo usé), con Zend Optimizer solo no puedes hacer eso, primero tienes que compilarlo con otro producto, el cual tienes que comprar primero.

GatorV 14/12/2008 12:20

Respuesta: Rendimiento: ¿conviene utilizar php POO?
 
Mmm según tengo entendido eso hace el Optimizer, guarda en cache una copia compilada del script, el otro producto que mencionas es el Zend Encoder, ese si transforma un .php a un archivo compilado para distribución, el Optimizer lo hace en memoria.

Saludos :adios:

enriqueplace 14/12/2008 13:40

Respuesta: Rendimiento: ¿conviene utilizar php POO?
 
Nunca lo usé, voy a ver de leer la documentación de ambos y probarlo. Según tenía entendido necesitas el Zend Encoder para compilarlo y el Zend Optimizer para ejecutarlo. Como decías "para guardarlo en estado compilado" me generó la duda si con el último solo podías llegar a eso.

GatorV 14/12/2008 14:22

Respuesta: Rendimiento: ¿conviene utilizar php POO?
 
Con el optimizer, es como un cache, o sea cuando ejecutas primero un archivo .php el optimizador guarda en memoria el archivo compilado para ser ejecutado en lugar de volver a compilar el archivo.

Pero el archivo .php siempre queda igual, con el Encoder si se transforma el archivo original para ser re-distribuido.

Saludos.

mariano_donati 14/12/2008 20:44

Respuesta: Rendimiento: ¿conviene utilizar php POO?
 
Muchas gracias por sus respuestas. No sabia que existia algo tal como el "Zend Optimizer". Me voy a poner a buscar info al respecto. Como ustedes tienen más experiencia que yo, me gustaría hacerles una pregunta: ¿alguna vez tuvieron la oportunidad, con aplicaciones reales, y no de prueba, de probar el rendimiento de un sitio con php poo y sin poo?. Quizás en algún momento les tocó migrar una aplicación a poo y pudieron notar alguna diferencia.
Saludos y gracias nuevamente.

GatorV 14/12/2008 21:06

Respuesta: Rendimiento: ¿conviene utilizar php POO?
 
Como te comenta enrique y yo te he comentado es nula la diferencia a lo mucho seran milisegundos pero nada que puedas decir que es demasiado, el interprete de PHP es muy optimizado en ese aspecto.

Saludos.

mariano_donati 14/12/2008 21:35

Respuesta: Rendimiento: ¿conviene utilizar php POO?
 
Si, habia entendido eso. Simplemente quería saber si ustedes mismos eran los que lo habian podido comprobar a partir de experiencias propias.
Saludos gatorv.

GatorV 14/12/2008 21:39

Respuesta: Rendimiento: ¿conviene utilizar php POO?
 
Pues actualmente estoy manteniendo una aplicacion hibrida, y te puedo decir que no es notorio el cambio, todo depende de como este programado y la limpieza del algoritmo, puede ser una aplicacion POO, pero PESIMAMENTE hecha y que no funcione bien, o puede ser una aplicacion sin POO pero igual pesimamente programada.

El rendimiento lo ves en la limpieza del diseño, sea o no POO.

Saludos.

luisartola 15/12/2008 04:36

Respuesta: Rendimiento: ¿conviene utilizar php POO?
 
hola,
he conocido éste hilo de discusión mediante el blog de Enrique. Os dejo el post que he publicado con mis experiencias...

http://www.programania.net/patrones-de-diseno/lecciones-aprendidas-sobre-rendimiento-en-php/

Un saludo a todos!

DarkJ 15/12/2008 05:14

Respuesta: Rendimiento: ¿conviene utilizar php POO?
 
Las optimizaciones son una vez que tienes el programa funcionando, a ser posible en un entorno lo mas real posible. En ese punto usas un profiler para analizar el tiempo empleado por tu codigo, y encuentras tus cuellos de botella. Son esos cuellos de botella los que hay que optimizar, a veces es simplemente cambiar el algoritmo (aplicar patrones como el lazy loading, ...).

Lo que es una tonteria es ir optimizando codigo que no tiene influencia en el rendimiento de la aplicacion.

Si estas creando paginas webs normales, no es necesario (rentable) pensar en la optimizacion.

enriqueplace 15/12/2008 06:37

Respuesta: Rendimiento: ¿conviene utilizar php POO?
 
Cita:

Iniciado por mariano_donati (Mensaje 2705571)
Muchas gracias por sus respuestas. No sabia que existia algo tal como el "Zend Optimizer". Me voy a poner a buscar info al respecto. Como ustedes tienen más experiencia que yo, me gustaría hacerles una pregunta: ¿alguna vez tuvieron la oportunidad, con aplicaciones reales, y no de prueba, de probar el rendimiento de un sitio con php poo y sin poo?. Quizás en algún momento les tocó migrar una aplicación a poo y pudieron notar alguna diferencia.
Saludos y gracias nuevamente.

Sí, es medio difícil que algún proyecto tenga el tiempo suficiente como para desarrollar dos versiones, una con y otra sin POO, para ver el rendimiento ;-)

Como dice GatorV, el tema es que si está mal desarrollado, va a andar mal, más en POO, ya que solo caer en excesos de abstracciones tienes problemas para rato (pero no necesariamente es por agregar "clases" y "métodos").

Pero, si hablamos que tenemos un sistema POO con muchos archivos por clase, y lo comparamos de igual con Programación Estructurada, modularizado de la misma forma, no hay diferencia en rendimiento.

Pero, si hablamos que en vez de modularizar, tomamos un solo archivo y metemos todo ahí, y lo queremos comparar, la comparación no se hace en mismos contextos, por lo cual la invalida.

En este último caso tendremos más un tema de manejo de archivos y acceso a disco, pero si prestamos atención, no pasa por un tema de POO.

Si programamos de la misma forma en los dos paradigmas, y modularizamos de la misma forma, a lo sumo tendrás estructuras distintas o podrás codificar un poco más, pero conceptualmente es lo mismo.

Mientras no comparemos peras con zapallos, todo bien ;-)

gildus 18/12/2008 11:43

Respuesta: Rendimiento: ¿conviene utilizar php POO?
 
Holas,

Como mencionaron los amigos, creo que los mas optimo que puede hacer un programador o quien haga el programa es que su mismo programa y codigo este lo mas posible optimo, y para mi esto ya depende de uno mismo.

Sobre si la POO (PHP 5 sobre todo) o estructurada (PHP 4 o menos), mude hace poco todo un sistema de informacion que estaba muy estructurado a objetos, y la verdad se optimizo o se trato de optimizar al maximo el codigo y los programas, y al final me resulto un digamos 20 o 25 % mas rapido que el estructurado que habia, sobre todo mas rapido en los acceso a datos con el objeto mysqli.

http://www.sourcelabs.com/pdfs/SourceLabsPHP4vsPHP5.pdf

Saludos
Gildus

miguel4ngel 05/02/2009 03:48

Respuesta: Rendimiento: ¿conviene utilizar php POO?
 
eso ni dudarlo.. la POO ayuda al desarrollador a salir de lo artesanal y adentrarse al lo profesional.. imaginte que en un proyecto de 10 programadores cada quien programando segun sus criterios dañarian todo..! olvida esa idea.. y mejor decidete por POO es solo sugerencia!


La zona horaria es GMT -6. Ahora son las 09:30.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.