Ajax es una tecnología web basada en JavaScript que ayuda a construir sitios web dinámicos e interactivos. WordPress utiliza Ajax para potenciar muchas de las características principales de su área de administración, como el autoguardado de mensajes, la gestión de sesiones de usuario y las notificaciones.

De forma predeterminada, WordPress dirige todas las llamadas a Ajax a través del archivo admin-ajax.php ubicado en el directorio /wp-admin del sitio.

Numerosas solicitudes simultáneas de Ajax pueden dar lugar a un uso intensivo de admin-ajax.php, lo que resulta en un servidor y un sitio web considerablemente más lentos. Es uno de los problemas más comunes al que se enfrentan muchos sitios de WordPress no optimizados. Habitualmente, se manifiesta como un sitio web lento o un error HTTP 5xx (principalmente errores 504 o 502).

En este artículo, aprenderás sobre el archivo admin-ajax.php de WordPress, cómo funciona, sus ventajas y desventajas, y cómo puedes diagnosticar y solucionar el problema del uso intensivo de admin-ajax.php.

¿Listo para empezar? ¡Vamos a ponernos en marcha!

¿Qué es el Archivo admin-ajax.php?

El archivo admin-ajax.php contiene todos los códigos para enrutar las solicitudes de Ajax en WordPress. Su propósito principal es establecer una conexión entre el cliente y el servidor usando Ajax. WordPress lo utiliza para refrescar el contenido de la página sin recargarlo, haciéndolo así dinámico e interactivo para los usuarios.

Un resumen básico de cómo funciona Admin Ajax en WordPress
Un resumen básico de cómo funciona Admin Ajax en WordPress

Como el núcleo de WordPress ya utiliza Ajax para potenciar sus diversas funciones de backend, puedes utilizar las mismas funciones para utilizar Ajax en WordPress. Todo lo que necesitas hacer es registrar una acción, apuntarla al archivo admin-ajax.phpde tu sitio, y definir cómo quieres que devuelva el valor. Puedes configurarlo para que devuelva HTML, JSON, o incluso XML.

admin-ajax.php en WordPress
admin-ajax.php en WordPress

Según WordPress Trac, el archivo admin-ajax.php apareció por primera vez en WordPress 2.1. También se conoce como Ajax Admin en la comunidad de desarrollo de WordPress.

Comprobando el uso de Ajax en el panel de control MyKinsta
Comprobando el uso de Ajax en el panel de control MyKinsta

El gráfico anterior solo muestra la cantidad de solicitudes de admin-ajax.php, no de dónde podrían provenir. Es una gran manera de ver cuando los picos están ocurriendo. Puedes combinarlo con otras técnicas mencionadas en este post para reducir la causa principal.

Comprobando el número de peticiones de admin-ajax.php en Chrome DevTools
Comprobando el número de peticiones de admin-ajax.php en Chrome DevTools

También puedes usar Chrome DevTools para ver cuántas solicitudes se envían a admin-ajax.php. También puedes consultar la pestaña Tiempos en la sección Red para saber cuánto tiempo se tarda en procesar estas solicitudes.

En cuanto a la búsqueda de la razón exacta del uso intensivo de admin-ajax.php, principalmente suele haber dos causas principales: una debido al frontend, y la otra debido al backend. Discutiremos ambas a continuación.

Cómo Depurar el Uso de admin-ajax.php en WordPress

Los plugins de terceros son una de las razones más comunes del uso de admin-ajax.php. Normalmente, este problema se ve en el frontend del sitio y aparece frecuentemente en los informes de pruebas de velocidad.

Pero los plugins no son los únicos culpables aquí, ya que los temas, el núcleo de WordPress, el servidor web y un ataque DDoS también pueden ser la razón de un uso intensivo de Ajax en la administración.

Vamos a explorarlos a fondo.

Cómo Determinar el Origen del Uso Intensivo de admin-ajax.php para Plugins y Temas

Plugins alimentados por Ajax en el repositorio de WordPress.org
Plugins alimentados por Ajax en el repositorio de WordPress.org

Los desarrolladores de WordPress utilizan a menudo Ajax para crear plugins y temas dinámicos e interactivos. Algunos ejemplos populares incluyen la adición de funciones como la búsqueda en vivo, filtros de productos, desplazamiento infinito, carrito de compras dinámico y cuadro de chat.

Solo porque un plugin use Ajax no significa que vaya a ralentizar tu sitio.

Viendo la solicitud de admin-ajax.php en el informe de WebPageTest
Viendo la solicitud de admin-ajax.php en el informe de WebPageTest

Normalmente, el Admin Ajax se carga hacia el final de la carga de la página. Además, puedes configurar las solicitudes de Ajax para que se carguen de forma asincrónica, de modo que tenga poco o ningún efecto en el rendimiento percibido de la página para el usuario.

Como puedes ver en el informe de WebPageTest arriba, admin-ajax.php se carga hacia el final de la cola de solicitudes, pero aún así ocupa 780 ms. Eso es mucho tiempo para una sola solicitud.

El informe de GTmetrix indica un serio pico de uso de admin-ajax.php
El informe de GTmetrix indica un serio pico de uso de admin-ajax.php

Cuando los desarrolladores no implementan Ajax correctamente en WordPress, puede causar problemas drásticos de rendimiento. El informe de GTmetrix anterior es un ejemplo perfecto de tal comportamiento.

También puedes usar GTmetrix para indagar en los datos de respuesta y de los mensajes individuales. Puedes usar esta función para señalar lo que está causando el problema.

Para ello, ve a la pestaña Waterfall (Cascada) del informe de GTmetrix, y luego busca y haz clic en el elemento POST admin-ajax.php. Verás tres pestañas para esta solicitud: Headers (Encabezados), Post (Post) y Response (Respuesta).

POST admin-ajax.php solicita los datos de la cabecera
POST admin-ajax.php solicita los datos de la Headers

Revisando las pestañas de Post Response de la solicitud obtendrás algunas pistas para averiguar las razones detrás del problema de rendimiento. Para este sitio, puedes ver las pistas en la pestaña de Response.

POST admin-ajax.php request's Response data
POST admin-ajax.php solicitud de datos en Response

Puedes ver que parte de la respuesta tiene algo que ver con una etiqueta de entrada con el id fijado en «fusion-form-nonce-656».

Una rápida búsqueda de esta pista te llevará a la página web de ThemeFusion, los creadores del tema Avada. Por lo tanto, puedes concluir que la petición se origina en el tema, o en cualquiera de los plugins con los que está empaquetado.

En tal caso, primero debes asegurarte de que el tema de Avada y todos sus plugins relacionados estén completamente actualizados. Si eso no soluciona el problema, entonces puedes intentar deshabilitar el tema y ver si eso soluciona el problema.

A diferencia de desactivar un plugin, desactivar un tema no es factible en la mayoría de los escenarios. Por lo tanto, intenta optimizar el tema para eliminar los cuellos de botella. También puedes contactar con el equipo de soporte del tema para ver si pueden sugerir una solución mejor.

Probando otro sitio web lento en GTmetrix, se encontraron problemas similares con el constructor de páginas de Visual Composer y los plugins de la Barra de Notificación.

Otra solicitud de POST admin-ajax.php Datos de respuesta
Otra solicitud de POST admin-ajax.php Datos en Response
POST admin-ajax.php request’s Post data
POST admin-ajax.php solicitud de datos en Post

Afortunadamente, si no puedes resolver un problema con el plugin, probablemente existen muchos plugins alternativos disponibles con los que puedas probar. Por ejemplo, cuando se trata de constructores de páginas también puedes probar Beaver Builder o Elementor.

Cómo Determinar el Origen del Uso Intensivo de admin-ajax.php

A veces, los datos de Post y Response presentados en los informes de pruebas de velocidad pueden no ser tan claros y directos. Aquí, encontrar el origen del uso intensivo de admin-ajax.php no es tan fácil. En tales casos, siempre puedes hacerlo de la manera clásica.

Deshabilita todos los plugins de tu sitio, limpia la caché de tu sitio (si la hay), y luego vuelve a hacer una prueba de velocidad. Si admin-ajax.php está todavía presente, entonces el culpable más probable es el tema. Pero si no se encuentra en ninguna parte, entonces debes activar cada plugin uno por uno y ejecutar las pruebas de velocidad cada vez. Mediante el proceso de eliminación, encontrarás el origen del problema.

Consejo: Utiliza un entorno staging (por ejemplo, el entorno staging de Kinsta) es una buena manera de realizar pruebas en tu sitio sin afectar a tu sitio en vivo. Una vez que hayas determinado la causa y solucionado el problema en el entorno staging, puedes llevar los cambios en tu sitio en vivo.

Diagnóstico de Problemas del Servidor Backend con admin-ajax.php

La segunda razón más común para el uso intensivo de admin-ajax.php es la API de WordPress Heartbeat que genera frecuentes llamadas a Ajax, lo que lleva a un intensivo uso de la CPU en el servidor. Típicamente, esto se debe a que muchos usuarios se conectan al panel de control del backend de WordPress. Por lo tanto, no verás esto aparecer en las pruebas de velocidad.

Por defecto, la API de Heartbeat encuesta el archivo admin-ajax.php cada 15 segundos para guardar automáticamente los mensajes o páginas. Si utilizas un servidor de alojamiento compartido, entonces no tienes muchos recursos de servidor dedicados a tu sitio. Si estás editando un artículo o una página y dejas la pestaña abierta durante un tiempo considerable, entonces puede acumular muchas solicitudes de Admin Ajax.

Por ejemplo, cuando estás escribiendo o editando mensajes, un solo usuario puede generar 240 solicitudes en una hora.

Frecuentes solicitudes de autoguardado de admin-ajax.php
Frecuentes solicitudes de autoguardado de admin-ajax.php

Son muchas peticiones en el backend con un solo usuario. Ahora imagina un sitio donde hay varios editores conectados simultáneamente. Un sitio así puede acumular peticiones de Ajax rápidamente, generando un uso intensivo de la CPU.

Esa fue la situación descubierta por DARTDrones cuando la empresa estaba preparando su sitio WooCommerce para un esperado aumento de tráfico tras una aparición en Shark Tank.

Antes de aparecer en el programa de televisión, el sitio de DARTDrones estaba recibiendo más de 4.100 llamadas admin-ajax.php en un día con sólo 2.000 visitantes únicos. Esa es una proporción muy baja entre peticiones y visitas.

Uso pesado de admin-ajax.php en dartdrones.com
Uso pesado de admin-ajax.php en dartdrones.com

Los investigadores observaron la URL de referencia /wp-admin y determinaron correctamente la raíz del problema. Estas peticiones se debieron a que los administradores y editores de DARTDrones actualizaban el sitio frecuentemente con anticipación al programa.

WordPress ha solucionado este problema del API de Heartbeat parcialmente hace mucho tiempo. Por ejemplo, se puede reducir la frecuencia de las solicitudes generadas por la API de Heartbeat en hosts con recursos limitados. También se suspende a sí mismo después de una hora de inactividad del teclado/ratón/toque.

Alto Tráfico Debido a un Ataque DDoS o a los Robots de Spam

Sobrecargar tu sitio con un ataque DDoS o robots de spam también puede llevar a un intensivo uso del  admin-ajax.php. Sin embargo, un ataque de este tipo no necesariamente tiene como objetivo aumentar las solicitudes de Admin Ajax. Es solo un daño colateral.

Si tu sitio está bajo un ataque DDoS, tu prioridad debería ser ponerte detrás de un robusto CDN/WAF como Cloudflare o Sucuri. Todos los planes de alojamiento con Kinsta incluyen la integración gratuita de Cloudflare y Kinsta CDN, que pueden ayudarte a descargar los recursos de tu sitio web en gran medida.

Para obtener más información sobre cómo puedes proteger tus sitios web de ataques maliciosos como estos, puedes consultar nuestra guía detallada sobre cómo detener un ataque DDoS.

Resumen

WordPress utiliza Ajax en su API Heartbeat para implementar muchas de sus funciones principales. Sin embargo, puede llevar a un aumento de los tiempos de carga si no se usa correctamente. Esto es típicamente causado por una alta carga de solicitudes al archivo admin-ajax.php.

En este artículo, has aprendido las diversas causas del uso intensivo de admin-ajax.php, cómo diagnosticar lo que es responsable de este síntoma, y cómo puedes arreglarlo. En la mayoría de los casos, seguir esta guía debería hacer que tu sitio vuelva a funcionar sin problemas en poco tiempo.

Sin embargo, en algunos casos la actualización a un servidor con mayores recursos es la única solución viable. Especialmente para casos de uso exigentes como el comercio electrónico y los sitios de membresía. Si estás ejecutando un sitio de este tipo, considera la posibilidad de actualizarlo a un host de WordPress administrado que tenga experiencia en el manejo de este tipo de problemas de rendimiento.

Si todavía tienes problemas con el uso de admin-ajax.php en tu sitio de WordPress, háznoslo saber en la sección de comentarios.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.