Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Una cuestion de rendimiento.

Estas en el tema de Una cuestion de rendimiento. en el foro de Frameworks JS en Foros del Web. Saludos a todos. No voy a formular una duda "al uso" mas bien me gustaria conocer las diversas opiniones que todos los foreros con experiencia ...
  #1 (permalink)  
Antiguo 21/01/2010, 11:20
 
Fecha de Ingreso: marzo-2006
Mensajes: 8
Antigüedad: 18 años, 8 meses
Puntos: 0
Una cuestion de rendimiento.

Saludos a todos.
No voy a formular una duda "al uso" mas bien me gustaria conocer las diversas opiniones que todos los foreros con experiencia puedan o quieran aportar.
Les explico el caso:

Resulta que tenemos un proyecto de monitorizacion de trafico de red echo en 100% PHP. Segun el cliente monitorizamos mayor o menor volumen de registros obtenidos de una base de datos. El caso es que hay clientes que tienen un elevado numero de resultados y detectabamos grandes tiempo de espera a la hora de cargar los datos (o bien el servidor, o bien la red, que nos han asignado no es gran cosa y se forman unos cuellos de botella de escandalo).
Por lo que decidimos paginar los resultados e ir haciendo pequeñas peticiones mediante ajax, en segundo plano, para aumentar el rendimiento de cara al cliente.

Y ahi es donde nos ha surgido la duda pues tenemos dos opciones (olvide decir que usamos la libreria xajax).

Opcion A:
Generamos el codigo html en el servidor y enviamos el resultado al cliente para que este se pinte en su navegador (siendo por lo tanto mayor el volumen de trafico en la salida del servidor al incluir contenido htm,l pero entendemos que es menor el tiempo en que tarda en "pintarse" en el navegador ya que no tiene que hacer ninguna operacion mas alla de mostrar el contenido recibido desde el servidor)

Servidor->Consulta BD->Resultado de la consulta->Maquetamos HTML->Enviamos al cliente->Pintamos el resultado


Opcion B:
Armamos un array con los resultados devueltos en la consulta a la BD, Se lo devolvemos al cliente y ejecutamos una funcion javascript en el cliente (a través del método call) para que desde el mismo cliente se maquete el código html y se pinte en la capa que le indiquemos en el código de la función.

Servidor->Consulta BD->Resultado de la consulta->Enviamos al cliente->Maquetamos HTML->Pintamos el resultado.


A priori la opcion B parece la mas rentable en redimiento (reducimos el tiempo de proceso en el servidor y reducimos el volumen de tráfico que enviamos por la red), pero nos surge la duda si ese tiempo que ganamos en trafico y tiempo de proceso en el servidor no lo vamos a perder en tiempo de proceso en el cliente (a priori entendemos que un cliente va a tener recursos mas limitados en proceso que el que pueda tener un servidor).

Me gustaria conocer sus opiniones.
¿Que creen que es mas rápido de cara al cliente?
  #2 (permalink)  
Antiguo 21/01/2010, 11:43
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 15 años
Puntos: 65
Respuesta: Una cuestion de rendimiento.

Para trafico de gran cantidad de informacion, sin duda te conviene JSON. Fijate que haciendo una consulta a la base de datos, podes trasladar los resultados de PHP a JSON con la funcion json_encode().
Luego, mandas eso como respuesta y lo lees con javascript, con la funcion eval().
Luego, para presentar los resultados, usas nuevamente javascript
__________________
HV Studio
Diseño y desarrollo web
  #3 (permalink)  
Antiguo 22/01/2010, 07:02
 
Fecha de Ingreso: marzo-2006
Mensajes: 8
Antigüedad: 18 años, 8 meses
Puntos: 0
Respuesta: Una cuestion de rendimiento.

Muchas gracias por tu respuesta jackson666.

Precisamente ese era uno de los debates que pretendia abrir, ya que he leido por ahí que eval penaliza mucho el rendimiento y que no es muy seguro.

En cualquier caso he seguido tu consejo e intentado lanzarlo con JSON, y reconozco mi ignoracia ya que no estoy habituado a usarlo mas allá que dentro del código de la propia página del cliente (es decir nunca he devuelto un json por ajax desde el servidor).

Además tenemos un problema añadido y es que no podemos hacer uso de json_encode, el cliente es un tanto "especialito" y no deja tocar sus servidores mas alla que para subir y bajar archivos, por lo que no podemos actualizar a php 5.2 que es donde se empieza a implementar.
El caso que he creado en el servidor un JSON para que este sea devuelto al cliente y desde alli poder capturar los datos que nos interesan.

Te pongo un ejemplo de lo que hemos echo

En el servidor:
Código PHP:
....
$json="var json={div:' ".$i." ', status:' ".$status." '}";
....
$objResponse->call("respuesta_json",$json); 
En el cliente:
Código HTML:
function respuesta_json(jsoon)
{

  /*Probando envio JSON a traves de AJAX*/

   var objeto=eval('('+jsoon+')'); 	
   alert(objeto.status);
}
Y el resultado es ninguno. Hemos echo alguna prueba con el método Script del $objResponse y seguimos sin dar con la manera.

¿Alguien puede darnos alguna sugerencia?
Saludos.
  #4 (permalink)  
Antiguo 22/01/2010, 07:37
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 15 años
Puntos: 65
Respuesta: Una cuestion de rendimiento.

Es que esta mal la forma en la que estas mandando la respuesta del callback... Si es texto plano, porque simplemente no lo imprimes??
eval() lo que haces es evaluar una cadena de texto como si fuera codigo!
Deberias hacer algo asi:

Código PHP:
.... 

# Esto esta bien
$json="var json={div:' ".$i." ', status:' ".$status." '}"
.... 

#Luego en la respuesta
echo $json
Luego en tu javascript, uina vez que preparas el elemento en donde se mostrara la respuesta de tu peticion asincrona, haces asi

Código Javascript:
Ver original
  1. // Supongamos que la variable ajax contiene a la instancia de la clase XMLHttpRequest
  2.  
  3. if(ajax.readyState == 4){
  4.  
  5.     if(ajax.status == 200){
  6.  
  7.        // Siempre con doble parentesis
  8.         var json = eval('(('+ajax.responseText+'))');
  9.  
  10.         // Como devolviste un array
  11.         for(var i = 0; i < json.length; i++){
  12.  
  13.         document.getElementById('tuID').innerHTML += json[i]+'<br />';
  14.  
  15.        }
  16.  
  17.     }
  18.  
  19. }
__________________
HV Studio
Diseño y desarrollo web

Etiquetas: ajax, rendimiento
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:17.