
El año pasado escribí una publicación de blog que compara el rendimiento del uso de Admin-AJAX.PHP y la API REST WordPress y descubrí que la API REST era aproximadamente un 16% más rápido que el uso de la API de AJAX tradicional. Aunque esta fue una mejora sólida, algunos desarrolladores (incluidos yo) se preguntaron cómo comparar el resto con el uso de puntos finales completamente personalizados. Debido a que el resto del resto carga la mayor parte del núcleo de WordPress y cualquier complemento activo, ¡debería ser una gran diferencia! No hay duda de que un punto final personalizado será más rápido, pero debería ser interesante ver cuánto más rápido será. También vale la pena echar un vistazo para ver si un punto final personalizado tiene sentido desde la perspectiva del desarrollo y la asistencia futura.
Definición de gerentes de solicitudes personalizados Hay algunas formas diferentes de configurar puntos finales personalizados. El punto final más rápido posible probablemente sea completamente independiente de WordPress y podría ser tan simple como un archivo PHP independiente que se carga en el servidor web. Aunque rápido, probablemente no sería tan útil, porque no tendremos acceso a ningún WordPress básico, lo que a menudo ahorra mucho tiempo de desarrollo. Acelerar las cosas con el próximo enfoque más rápido sería cargar suficiente WordPress para usar funciones básicas sin cargar cosas como temas y complementos. Las solicitudes de AJAX estarían dirigidas por este archivo, por lo que debe colocarse en algún lugar del servidor, donde sea accesible públicamente.
Hay algunas maneras de hacer esto, pero este es el enfoque más común que veo: time ()));El archivo anterior hace algunas cosas.Primero defina a Constanta Doing_ajax para decirle WordPress que se realiza una solicitud AJAX.Luego defina a Constanta Shortinit para decirle a WordPress que cargue los elementos básicos, algunos del núcleo de WordPress y no muchos otros.Luego, el archivo WP-Load.php manualmente requiere (que generalmente es una mala práctica, porque la ubicación de este archivo puede variar entre las instalaciones) que cargan otros archivos necesarios para satisfacer la solicitud correctamente.Finalmente, responde a pedido con el tiempo codificado JSON.
Mientras miraba esto, mi colega Evan notó otro enfoque que no requiere conocimiento de la ubicación del archivo WP-Load.php. Esto se puede lograr escuchando un parámetro que define una solicitud personalizada en el archivo wp-config.php: / ** * Define ShortInit y DBI_AJAX constantes si esta es * una solicitud a nuestro controlador de solicitud personalizado * / if (filtre_input (input_get , ‘Dbi-ajax’)) {define (‘shorInit’, true); Define (‘dbi_ajax’, true); } /* Eso es todo, ¡Detente la edición! Feliz blogs. * / / ** ruta absoluta al directorio de WordPress. */ if (! definido (‘abspath’)) Define (‘abspath’, dirname (__ file__). ‘/’); /** Establece Vars de WordPress y archivos incluidos. */ reequire_once (abspath. ‘wpsets.php’); if (definido (‘dbi_ajax’)) {wp_send_json (array (‘time’ => time ())); } Esto es similar al primer enfoque anterior. Si la solicitud contiene un parámetro DBI-AJAX (por lo que sabemos que esta es una solicitud personalizada), definimos a Constanta Shortinit para decir WordPress para cargar los elementos esenciales. También definimos un DBI_AJAX constante, por lo que podemos decir fácilmente si se realiza una solicitud personalizada sin verificar el parámetro DBI-AJAX nuevamente. Luego, una vez que se ha cargado WordPress (después de que se haya solicitado el archivo WP-SETINGS.PHP), podemos satisfacer la solicitud. Por lo general, le recomendamos que incluya otro archivo en este momento que contenga esta funcionalidad, pero para el propósito de este punto de referencia, solo devolvemos el tiempo codificado JSON, como en el primer ejemplo anterior.
Cargar tan poco de WordPress viene con un conjunto único de desafíos. No todas las funciones básicas de WordPress estarán disponibles, por lo que si una función que necesita no está disponible, deberá rastrear el archivo en el que se encuentra e incluirlo manualmente. Dependiendo de lo que su operador de solicitud tenga que hacer, esto podría convertirse en una carga. Además, la solicitud manual del archivo WP-Load.php o la edición del archivo WP-Config.php no es portátil y probablemente no debe hacerse en un complemento o un tema que se distribuya en una gran cantidad de instalaciones. Mejor alternativa alternativa. ? Otro enfoque posible es crear un controlador de solicitud personalizado en un complemento imprescindible. De esta manera, puede responder a cualquier solicitud personalizada después de la carga básica de WordPress, pero antes de que se carguen los complementos y los temas. Esto debería mejorar el rendimiento y evitar conflictos de otros complementos que usan REST o Admin-AJAX.PHP. time ())); El complemento anterior escucha las solicitudes que contienen el parámetro DBI-AJAX (para evitar que responda a cualquier solicitud), luego utiliza wp_send_json () para devolver el tiempo a JSON para completar la solicitud como en ejemplos anteriores.

Ejecutar puntos de referencia con dos posibles soluciones para un punto de solicitud personalizado es el momento de ejecutar algunos puntos de referencia. Para mantener las cosas de acuerdo con el artículo anterior, uso ApacheBench para enviar cientos de solicitudes HTTP al servidor en poco tiempo, para tener una idea del tiempo de respuesta promedio. Tengo el mismo conjunto de complementos activados: ACF
Akismet
Widget Black Studio Tinymce
WP migra db
WP Super Cache
Yoast SEO
Primero, echemos otro vistazo al punto de referencia del resto para que tengamos una base sólida:
Después de 100 solicitudes, se hace obvio un tiempo de respuesta promedio de 264 ms. En realidad, es mucho más rápido de lo que fue el año pasado cuando realizamos la misma prueba en el mismo servidor (490 ms), pero por ahora solo nos centramos en el tiempo de respuesta promedio de 264 ms como punto de referencia con el que podemos juzgar los resultados de los puntos finales personalizados. . ShortInit Benchmark continúa echando un vistazo al punto final personalizado que carga los archivos mínimos definiendo el ShortInit constante.
Con un tiempo de respuesta promedio de solo 29 ms (una disminución del 89%), está claro que este enfoque es más rápido día y noche que el uso del resto. Esto se debe al hecho de que solo se cargan los archivos necesarios para satisfacer la solicitud.
Debe usar el punto de referencia de complementos por fin, eche un vistazo al punto final personalizado que se creó en el mu-plug:
Con un tiempo de respuesta promedio de 144 ms (una disminución en un 45% en comparación con la API REST), el rendimiento de este punto final está en algún lugar entre el archivo autónomo y la API REST. Esto lo convierte en una buena solución para un controlador de solicitud personalizado que puede usar las funciones básicas de WordPress sin conocer la ubicación del archivo WP-Load.php. Conclusiones Los tiempos de respuesta no deberían ser su única consideración al desarrollar una aplicación que envíe una gran cantidad de solicitudes. Además, sería aconsejable considerar el tiempo de desarrollo inicial, así como en cualquier momento que pueda gastar apoyando los puntos finales. Para algunos casos de uso donde el rendimiento es crítico, como los complementos que procesan muchos datos en los lotes o en los cuales El potencial de los conflictos de complementos/temas es mayor, puede ser lógico utilizar un punto final personalizado. La mayoría de las veces, con una solución prefabricada y compatible oficial, superará con creces los posibles beneficios de rendimiento de crear sus propios puntos finales. ¿Utiliza puntos finales personalizados en su complemento o tema? Si es así, ¿consideraría la transición a la API REST? ¿Por qué o por qué no? Házmelo saber en los comentarios.
API REST WordPress versus gerentes de solicitud personalizados
Tags API
homefinance blog