¿Por qué mis solicitudes AJAX simultáneas a PHP Scripts/WP REST API son tan lentas?

3 minutos de lectura

avatar de usuario
Slevin

Después de investigar un poco, actualicé el título de la pregunta. Por favor, vea mis actualizaciones a continuación.

Pregunta inicial:

Estoy creando un sitio web con WordPress y, a veces, uso llamadas asincrónicas a los puntos finales de la API REST de WP.

Llamar a estos puntos finales desde mis funciones AJAX conduce a menudo a tiempos de TTFB de al menos ~ 780 ms:

ingrese la descripción de la imagen aquí

Pero si abro la URL/punto final directamente en el navegador, obtengo tiempos de TTFB que son 4-5 veces más rápidos:

ingrese la descripción de la imagen aquí

Me pregunto de dónde vienen los retrasos. Estoy ejecutando esta página en mi servidor de desarrollo local con Apache 2.4, HTTP/2 y PHP 7 habilitados.

¿Cuál es la mejor manera de monitorear tales “problemas” de rendimiento?

Por favor, tenga en cuenta: estoy no utilizando la funcionalidad AJAX incorporada de WordPress. Solo estoy llamando algo como

axios.get(`${url}/wp-json/wp/v2/flightplan`)

dentro de un componente React que he montado en mi plantilla de página de inicio.

Actualizar

Muy interesante: borrar las cookies reduce el TTFB mucho:

ingrese la descripción de la imagen aquí

Actualización 2

Después de eliminar las otras dos llamadas AJAX, el flightplan la solicitud se realiza mucho más rápido. Creo que hay algunos problemas con las solicitudes AJAX simultáneas. He leído un poco sobre el bloqueo de sesiones, pero dado que WordPress y todos los complementos instalados no utilizan sesiones, esta no puede ser la razón.

Actualización 3

Definitivamente, tiene algo que ver con la configuración de mi servidor local. Acabo de implementar el sitio en un servidor web “real”:

ingrese la descripción de la imagen aquí

Pero aún sería interesante saber cómo configurar un servidor que pueda manejar mejor la concurrencia.

Actualización 4

Hice una pequeña prueba: llamando a 4 solicitudes ficticias antes de llamar a las “reales”. El script solo devuelve una cadena “Foobar”. Todo se ve bien en este momento:

ingrese la descripción de la imagen aquí

Pero al agregar sleep(3) al script ficticio AJAX, todas las demás solicitudes también tardan mucho más:

ingrese la descripción de la imagen aquí

¿Por qué?

Porque su llamada Ajax esperará la carga de todos sus complementos WP 🙂

Por lo tanto, debe realizar una prueba sin complemento y activar uno por uno para ver cuál ralentiza su llamada ajax.

  • Solo hay unos pocos complementos de WP activados (MultilingualPress, ACF, ACF to REST y Timber), y todos ellos son necesarios para la salida correcta de mis llamadas a la API REST (bueno, además de Timber). Pero no entiendo la diferencia entre mi llamada AJAX, que solo obtiene el contenido de example.com/rest/foo y accediendo directamente example.com/rest/foo.

    – Slevin

    10 de agosto de 2016 a las 9:03

  • Acabo de crear un violín (fuera de cualquier entorno WP) e hice una llamada AJAX a un punto final. Misma velocidad que accediendo directamente. Entonces, ¿Wordpress parece modificar/filtrar/cualquier solicitud de AJAX?

    – Slevin

    10 de agosto de 2016 a las 9:14

  • Cuando usa ajax en wordpress, necesita ganchos, por lo que carga toda la mecánica de wordpress, por lo que seguramente será más lento.

    – MaximeK

    10 de agosto de 2016 a las 9:16

  • ¿No hago ganchos? solo estoy llamando $.ajax({...}) dentro de mis funciones JS.

    – Slevin

    10 de agosto de 2016 a las 9:19

  • es solo axios.get(`${$('meta[name="site-url"]').attr('content')}/wp-json/wp/v2/flightplan`)

    – Slevin

    10 de agosto de 2016 a las 9:23


¿Ha sido útil esta solución?