2011-06-22 22 views
5

Para simplificar mi situación; Tengo 3 páginas de PHP. Dos de ellos agrega y elimina filas de una base de datos, respectivamente. El tercero recupera todas las filas, las codifica como JSON e imprime el resultado.¿Por qué algunas llamadas AJAX tardan más en finalizar que otras cuando las URL tienen el mismo tiempo de respuesta?

He programado la ejecución de todas las páginas, que oscila entre 0.001 y 0.004 segundos. Estos son los horarios del Ajax no obstante, pide:

Fetch tabla entera como JSON: 8-12ms
Añadir fila: 990-1010ms
Quitar consecutivas: 990-1010ms

El tiempo de respuesta del complemento y eliminar tiempos están causando lentitud innecesaria en mi aplicación, teniendo en cuenta que los tiempos de ejecución de PHP son meras fracciones de segundos, y su salida es simplemente "1" para el éxito y "0" para el fracaso (Comparado con la llamada de búsqueda, que imprime hasta 100 filas (~ 10 columnas) de datos como JSON)

Todos mis tiempos de retorno de Ajax se miden en Firebug. Todas las llamadas Ajax se realizan a través de jQuery ($.ajax()).

Supongo que esto tiene algo que ver con que Firefox no considere que se ha respondido una solicitud GET a menos que haya recibido una determinada cantidad de bytes o caracteres, y que el tiempo de respuesta de 1 segundo sea un tiempo de espera de algún tipo.

¿Alguna sabiduría para compartir sobre el tema?


que hemos cronometrado los tiempos de carga AJAX en Chrome y Opera también (promedios):

Opera:
* Todas las llamadas AJAX ~ 15 ms

Chrome:
* Eliminar filas de fila y búsqueda: ~ 25 ms
* Agregar fila: ~ 350 ms

Mi aplicación es ágil y receptiva en Opera, pero lenta para un grado variable en todos los otros navegadores. Exactamente por qué aún no está claro para mí.


También he sincronizado IE 9, que funciona de forma prácticamente idéntica a Opera. Mi aplicación ahora funciona rápidamente en dos navegadores.

+0

¿Se puede publicar el código (PHP, HTML, JavaScript y MySQL)? ¿Y qué tan grande es la base de datos? (# de filas) –

+0

Ryan Doherty: Me temo que no puedo, ya que este es un proyecto propietario. Sin embargo, ya resumí los tiempos de ejecución de PHP en la pregunta, que incluye consultas MySQL y excluye PHP como la causa del retraso de 1 segundo. Cualquier fragmento de código en particular que quiera ver Estoy seguro de que podría proporcionar aunque – Hubro

+0

¿Ha intentado medir el tiempo de carga de cada página cuando se solicita directamente, y no a través de ajax? PHP tiene algunos gastos generales antes de que se ejecute su script (más aún si está utilizando algún tipo de marco). –

Respuesta

1

Aparentemente, algunos navegadores experimentan misteriosos efectos secundarios al usar localhost en lugar de 127.0.0.1 en la URL. El segundo segundo de retraso añadido fue uno de ellos. Usar 127.0.0.1 resolvió el problema por mí.

+0

suena como un problema de DNS –

+0

¿Podría seguir siendo un problema de DNS si actúa de manera diferente en la mayoría de los navegadores? – Hubro

+1

Es menos probable, pero aún es posible ya que los navegadores implementan su propio caché de DNS y cosas por el estilo (solo digo que los navegadores no * usan simplemente el 'gethostbyname()' del sistema) –

0

será mejor si usa HTTPWatch. Le dirá la hora exacta de todos los archivos js y css y la representación de páginas, etc. de esta manera puede analizar, qué llamada está tomando más tiempo y por qué.no estoy Seguro que he respondido tu pregunta o no, pero espero que puedas obtener ayuda del HTTPWatch.

Here que tienen un buen artículo que le dirá, cómo mejorar el rendimiento del sitio minimizando el tiempo de petición.

-1

no tengo información para basar esto en, pero yo creo en este momento es uno de los culpables:

  • disco lento (s) - agregar y eliminar filas podría requerir un mayor acceso en disco que lee (además de MySQL podría estar haciendo caché)
  • índices - MySQL tiene que actualizar los índices es cuando una columna se cambia o se agrega

Salvo que se debe perfilar su código. Use xdebug y/o ejecute sus consultas MySQL directamente a través de MySQL para ver cuánto tiempo llevan.

+0

En mi pregunta excluyo MySQL o PHP como la causa de la demora. Tiene que ser causado por Apache o Firefox. – Hubro

+0

¿Cómo los excluyes? ¿Has probado tus consultas individualmente? ¿Hiciste un perfil de tu PHP? ¿Ejecutó las llamadas AJAX sin consultar la base de datos? –

+0

Simplemente sincronicé la ejecución de PHP para cada una de las páginas de principio a fin – Hubro

Cuestiones relacionadas