Foros del Web » Programando para Internet » PHP »

Carga progresiva

Estas en el tema de Carga progresiva en el foro de PHP en Foros del Web. Muy buenas a todos, Tengo un script en php que se conecta a una base de datos para sacar información y construir una tabla. El ...
  #1 (permalink)  
Antiguo 13/02/2013, 07:23
 
Fecha de Ingreso: diciembre-2012
Mensajes: 17
Antigüedad: 11 años, 3 meses
Puntos: 2
Carga progresiva

Muy buenas a todos,

Tengo un script en php que se conecta a una base de datos para sacar información y construir una tabla. El script tarda bastante, y el problema que tenemos es que el servidor acaba dando un error 500, supongo que por tema de timeout.

Esto me ha pasado al cambiar una aplicación de un cliente a un nuevo servidor. El cliente dice que antes la tabla iba saliendo progresivamente, mientras que ahora, cuando le funciona (forzando una reducción del script) va todo de golpe. Mirando el código veo que al acabar cada consulta escribe una nueva fila en la tabla y llama a flush(), pero no tiene efecto.

Investigando un poco he tocado cuatro cosas del php.ini, como por ejemplo:
  • output_buffering = Off
  • zlib.output_compression = Off

Pero esto no me ha servido para que construyera la página poco a poco.

Por otro lado, aumentando los resource limits he conseguido hacerlo funcionar en local, pero con los mismos valores en producción no tira:
  • max_execution_time = 800
  • max_input_time = 100
  • memory_limit = 16M

Estamos hablando de una aplicación con php 5.0.4 y que corre bajo IIS7.

No sé qué más puedo tocar para ampliar el timeout o para que se vaya cargando de manera progresiva.

Y tengo la duda de si al cargar de manera progresiva, el timeout total de la petición sigue siendo el mismo o se va ampliando, es decir, solo con que cargue progresivamente las filas de la tabla ya funcionará o llegará a x filas y ya no me responderá nada más??

A ver qué me podéis decir, gracias
  #2 (permalink)  
Antiguo 13/02/2013, 12:27
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 13 años, 4 meses
Puntos: 13
Respuesta: Carga progresiva

Primero necesitas tener el motivo real por el que da error (mirando los log's por ejemplo). Porque puede ser otro problema y tocar configuraciones "a ciegas" nunca es bueno.
No se que haga el script ni como está hecho, pero si llegas al tiempo de ejecución máximo o el uso de memoria máximo, por lo general es porque no estás haciendo las cosas bien. Si estas sacando una gran cantidad de datos de una base de datos para hacer una tabla, te recomiendo utilizar paginación y alguna grilla que utilice AJAX para dar una mejor experiencia de uso (como jqgrid).
  #3 (permalink)  
Antiguo 15/02/2013, 06:56
 
Fecha de Ingreso: diciembre-2012
Mensajes: 17
Antigüedad: 11 años, 3 meses
Puntos: 2
Respuesta: Carga progresiva

Puede ser que el script esté mal programado, o haga uso de malas prácticas. Yo tb creo que AJAX sería una mejor opción, pero el tema es que hemos cambiado el código del cliente de un servidor a otro, y ahora este código a veces se ejecuta y a veces no, y además ya no hace una carga progresiva, sino que lo vuelca todo de golp al final. Se trata de conseguir que lo que ya tenía el cliente funcione, no de hacerle un script nuevo a medida.

Volviendo al tema, buscando por los logs he encontrado que a veces no carga por un error 500, a veces por un 302, y otras veces carga porque me da un código 200, pero en realidad se ha quedado a medias.

El error 500 y el 302 me preocupan relativamente poco. El 302 creo que es porque en el código, en caso de error, hace una redirección a un archivo que no existe (otra práctica buenísima!!) . El 500 creo que es un problema con las sesiones. Estoy continuamente probando de ejecutar el script en desarrollo, en producción, con un usuario, con otro, etc. El error 500 solo me ha dado a mí, al cliente nunca, por lo que no me preocupa excesivamente. Vamos a lo de que se quede cortado, que es lo que me interesa, porque es lo que le pasa al cliente.

Jugando en local con la variable de php.ini max_execution_time he visto que aumentando el tiempo que doy sí consigo que acabe. Si lo pongo a 30, la página siempre aparece cortada, y en el log siempre me dice que ha tardado 30000ms. Aumentando este tiempo, he visto que el script tarda de media unos 70seg. Así que le he puesto max_execution_time = 100 y en local me funciona bien SIEMPRE.

Ahora bien, en desarrollo he configurado igual el parámetro (incluso lo he subido a 800 como ya puse), y aun así a veces no funciona (otras sí). Lo curioso del caso, es que me da un código 200 y dice que ha tardado 73seg, 80seg, 65seg... Bajo mi punto de vista, cuando se quedara cortado tendría que haber tardado el tiempo máximo que le he dado no??

Qué otros motivos pueden estar haciendo abortar el script antes de tiempo??

Alguien tiene alguna idea de porqué no va apareciendo el resultado en la web poco a poco en lugar de volcarse todo al final??
  #4 (permalink)  
Antiguo 15/02/2013, 07:02
Avatar de 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
Puntos: 270
Respuesta: Carga progresiva

Quien "carga" una página web?
El servidor, o el cliente?
Cómo se renderiza una página, en qué orden se cargan las cosas, etc, está en manos del cliente, no del servidor.
Lo único que puedes hacer del lado del servidor, es poner antes la información disponible al navegador.Para eso es para lo que quitas el buffering y la compresión zlib, pero ninguna de las dos cosas es muy recomendable a la larga.
Para hacer una carga progresiva, hay que hacer que el *navegador* haga carga progresiva..no el servidor..Y, para que el navegador lo haga, lógicamente, el HTML que parsee no puede ser el mismo...
  #5 (permalink)  
Antiguo 18/02/2013, 02:34
 
Fecha de Ingreso: diciembre-2012
Mensajes: 17
Antigüedad: 11 años, 3 meses
Puntos: 2
Respuesta: Carga progresiva

Pues no acabo de entenderte dashtrash.
Según mis conocimientos, el flujo normal es que el cliente haga una request, y el servidor le devuelva todo de golpe en una response.
Luego, si utilizas AJAX, puedes hacer request y response parciales sobre una misma página, recargando solo un trozo de la misma.
Sabiendo esto, no tengo muy claro como hacer que se vaya cargando la información gradualmente si no es con AJAX. O no tengo claro cómo hacerlo al menos a nivel programático.

Volviendo a mi duda, no sé si me estás diciendo que hay que hacer "algo" en el navegador para que cargue progresivo, o si tengo que hacer algo en el código, o en los archivos de configuración de PHP e IIS. Podrías concretar un poco por favor??

Etiquetas: tabla
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 16:16.