Ver Mensaje Individual
  #5 (permalink)  
Antiguo 04/04/2007, 09:41
Avatar de dashtrash
dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 1 mes
Puntos: 270
Re: mejor rendimiento en el servidor

Buenass..
He encontrado por casualidad este foro mientras buscaba otra cosa, y me ha parecido interesante esta pregunta...
He programado durante 8 años C++, durante 2 java, y durante 6,PHP.Y la pregunta original, es más interesante de lo que parece.
No es un problema de cacheo.
Es un problema inherente a la programación orientada a objetos aplicada a todo.Yo era un defensor de la OOP, hasta que empecé a usar PHP y programar para la web, donde sus problemas son obvios.
Supongamos que tu estructura de clases es :
-CUsuario
-CObjetoUsuario
Supongamos que las tablas son:
-USUARIO
-OBJETOUSUARIO. Objetousuario tiene un campo ID_USUARIO, que indica a quien pertenece (suponemos que 1 objeto sólo pertenece a 1 usuario,relación 1-n)
El orden "orientado a objetos" sería algo así como:

1) Obtener la lista de objetos pertenecientes al usuario (1 query)

2) Por cada uno de esos objetos, crear una instancia de CObjetoUsuario, pasandole el ID de OBJETOUSUARIO. (1 query por cada uno de los CObjetoUsuario)

Resultado: tantas queries como OBJETOUSUARIO tengas, + 1.
Resultado 2: supón que, OBJETOUSUARIO, en su constructor, inicializa otros objetos dependientes de él.Y supón que, en un caso particular, tú sólo quieres sacar el nombre del objeto, y no quieres hacer nada con sus posibles subobjetos....Puedes seguir multiplicando el número de queries que se hacen...

Cuando esto se resuelve en SQL, con 1 sola query.

Esto lo he visto MUCHAS veces en código de todo tipo...Comercial, open-source,etc,etc.Bucles de creaciones de objetos, con queries anidadas.Cada objeto suele estar definido en su propio php3, con lo cual el programador no es consciente muchas veces de lo que está ocurriendo.

Que se puede hacer de otra forma?Claro...pero el modelo empieza a complicarse *bastante*...Tanto que, personalmente, uso OOP sólo donde la herencia tiene sentido, o como forma de agrupar funciones.
Para el resto (incluyendo la elaboración del interfaz de usuario, y obtener datos a mostrar en la web), existen sistemas de plantillas y xml/xsl que lo hacen muy bien (en vez de crear aberraciones como CTable,CContainer....).

El problema es hacer 1 query con aquello que sabemos que se puede resolver en 1 query.Usar caché como forma de "evitar" 100 queries (cuando puedes evitarlo), no es solución.
Y,siendo PHP un lenguaje interpretado, tiene muchisimas formas más flexibles que la OOP para resolver gran parte de los proyectos web, sin perder rendimiento.Yo opto por la generación de código.