Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/02/2010, 06:45
Dacar010
 
Fecha de Ingreso: febrero-2010
Mensajes: 3
Antigüedad: 14 años, 9 meses
Puntos: 0
Imagenes en segundo plano

Buenas Tardes.

No sé si debo formular mi consulta aquí o en el foro de JavaScript, espero que al menos me podais orientar.

Resulta que tengo una aplicacion en AJAX a la que le he hecho un buscador basado en texto predictivo (como el de los telefonos móviles), según vamos insertando texto al buscador nos va devolviendo un grid a una capa donde van cargando los resultados coincidentes con la cadena insertada en la caja de búsqueda, filtrando de este modo aquellos no coincidentes y ganando un dinamismo muy fluido. Hasta aquí todo perfecto.
Me encontre con el incoveniente de que explorer no es capaz de responder cuando la consulta devuelve grandes volumenes de datos (por ejemplo si la consulta devuelve 1000 tuplas el puñetero explorer casca) por lo que opté por crear un par de métodos en el script del cliente para hacer llamadas en segundo plano. Me explico:
  1. Al insertar la cadena de texto llamo al servidor y pregunto el numero de tuplas que me va a devolver.
  2. Una vez conozco el número de tuplas divido este total entre 100 y obtengo el numero de llamadas que debo hacer.
  3. Devuelvo ese número de llamadas a un método del cliente (método 1)
  4. En el cliente ejecuto un bucle que llama de nuevo al servidor limitando la consulta de 100 en 100
  5. Por cada peticion de llamada que recibe el servidor ejecuta una llamada a otro método del cliente (método 2), encargado de recorrer el array que genero la consulta (ya con su LIMIT de 100 en 100), e ir pintando en una capa el grid que obtenemos como resultado

La idea, por lo tanto, es recibir los 100 primeros resultados, pintarlos en el navegador, y continuar procesando las respuestas que se van obteniendo en las sucesivas llamadas, las cuales se van añadiendo en tiempo real. De esta manera el cliente no tiene que esperar a recibir el resultado completo de la consulta para pintar los datos.

Y mas o menos funciona.... El problema es que este grid (que se trata de un control de equipos operativos en una intranet) según el estado nos devuelve un "UP" o "DOWN" en el array de la consulta y en base a esto en el navegador se tiene que pintar un botón (imagen .gif) de color rojo o verde y estas imagenes no se pintan mientras esta recibiendo datos... Se pinta el nombre del equipo, su dirección MAC, etc pero el dichoso boton no hay manera de mostrarlo hasta que no se ha descargado el listado completo. Eso y que el explorer se queda pillado hasta que no acaba con todas las llamadas.

En un primer momento supuse que se debia a la existencia de las iteraciones del método 1 por lo que use un setInterval() para realentizar el proceso y darle tiempo a que se ejecutase el metodo 2 sin que este recibiera continuas llamadas desde el servidor. Como no sirvió de nada probé a hacer lo mismo pero esta vez desde el lado del servidor con usleep() y aquí lo que si noté es que se pintaba el resultado cuando este era texto (nombre del equipo, mac...) amen que salia secuencialmente (si no hago pausa en la ejecucion en el servidor, el grid resultante sale desordenado) pero las imagenes no existe forma de pintarlas hasta que no ha recibido el listado entero de todas las consultas que tienen lugar...

Siento el tostón pero es que ya he mirado en todos sitio y no doy con el modo de arreglarlo.
Espero que alguien me pueda echar una mano.
Gracias y saludos.

Última edición por Dacar010; 02/02/2010 a las 06:55