Hola,
Estoy observando saturación de recursos (CPU, Memoria física, etc) desde el servidor.
En Cpanel > MEETERICAS > Visistantes, puedo observar que cada vez que un visitante consulta cualquier url de mi sitio web, se hace una requet por triplicado del archivo admin-ajax.php.
Leyendo acerca de este tema, entiendo que esto debería estar asociado con la API Hearbeat, y que puedo controlar los pulsos, limitar su frecuencia, hacer un deregister del script para determinadas páginas, etc.
Pero me pregunto:
¿Por qué o qué puede estar causando que para cualquier solicitud o request se está llamando hasta tres y cuatro veces el wp-admin/admin-ajax.php ?
Podrían ayudarme ?
Gracias de antemano
Contenido solo visible a usuarios registrados
Hola Daniel,
Que complemento para cache utilizas? veo que efectivamente se repite:
Pero trata de un tema de cache, has validado en tu complemento de caché? adicional a veces tiene que ver con un complemento instalado, has hecho algun cambio recientemente en complementos para que tome más peticiones de lo usual?
Verifica y nos comentas, un saludo 🖐️
Hola @argenis
Verás, para cachear de momento tengo el Varnish por el lado del servidor, instalado por vosotros.
Regularmente he estado usando AutoOptimize para los scrpts y styles, pero hace poco lo desinstalé para poder mirar exactamente cuantas peticiones tenía sin el mismo, por temas de saturación de recursos del servidor.
Hilando poco a poco he ido quitándome requests, quitando plugins innecesarios y en estos momentos, sin volver a usar Autoptimize, veo que, el uso de Contact Form 7 me está generando este problema.
Concretamente, cada vez que llamo a una página donde donde hago uso de Contact Form 7, hay una llamada a admin-ajax.php.
Pero ocurre, que yo tengo un formulario con shortcode de Contact Form 7, insertado en la cabecera del sitio, que lo que hace es invitar al visitante a poner su nro de teléfono para que éste ponga su nro. y sea llamado por nuestros agentes comerciales. y dicho formulario se muestra en todas las páginas del sitio y, concretamente, en las páginas donde igualmente tengo implementado un formulario de contacto para otros fines, como es el caso de lapágina de "contacto", uso un shortcode de CF7 para el formulario de contacto y otro shortcode (el de la cabecera), de tal manera que a veces uso CF7 x2 en algunas páginas y al menos una vez, en todas.
Cuando yo suprimo el shortcode de CF7 de la cabecera, veo que ya no se llama al admin-ajax.php en ninguna página excepto en aquellas que sí tienen algún formulario.
Me pregunto si es que puedo conservar mi shortcode de CF7 en la cabecera, para que conviva con algún otro formulario según qué página, y si la carga múltiple del admin-ajax.php se pueda evitar técnicamente ?
Leyendo por la web, también he podido ver que se puede deregistrar los cripts según qué páginas, etc, pero no sé si esta sea una vía porque quiero conservar el form que inserto en todas las cabeceras, aunque tal vez, conociendo si el script ya ha sido llamado, evitar una segunda vez y con ello evitar las múltiples llamadas al admin-ajax.php con cada url, o si es que esto se deba a otro conflicto.
Espero por tus comentarios
Gracias
Hola Daniel,
Puedes verificar con esta guia el deshabilitar la carga constante de estilos y javascripts de contact form 7 > https://decodecms.com/cargar-scripts-y-estilos-de-contact-forms-7-condicionalmente/ tambien se hablo en esta entrada del blog > https://www.webempresa.com/foro/preguntas-sobre-wordpress/evitar-que-contact-form-7-cargue-en-cada-visita .
Prueba hacer estos ajustes y luego de instalarlo puedes verificar en > https://gtmetrix.com/ . si está siendo cargado 3 veces como comentas.
Un saludo 🖐️
Hola @argenis
La verdad es que esas soluciones planteadas no me sirven, dado que el tema es que necesito contar al menos con un formulario de CF7 en todas las cabeceras del sitio.
No se trata de evitar la carga de scripts y styles en ciertas páginas.
Lo que quiero saber es si esa llamada múltiple de admin-ajax.php por cada url, tal como lo explico más arriba, se deba a un conflicto por usar dos veces el CF7 en una misma página y si ello, pudiera ser la causa del error porque ahora mismo, no cacheo nada desde el lado del cliente.
Gracias
Hola Daniel.
Admin-ajax es utilizado por el core de WordPress para realizar las solicitudes entre WordPress y ajax del servidor, este es utilizado tanto por WordPress como por los plugins.
El funcionamiento de Heartbeat se realiza mediante pulsos, es decir, cada cierto tiempo WordPress envía una petición o “pulso” mediante el admin-ajax.php (esto quiere decir que se ejecuta el admin-ajax.php).
De forma predeterminada WordPress realiza una petición al admin-ajax.php cada 15 segundos, el problema viene cuando son varios usuarios los que ejecutan procesos PHP con peticiones al admin-ajax.php y varios plugins utilizan de forma intensiva el API de Heartbeat realizando peticiones continuas cada 15 segundos.
Estos tiempos se pueden controlar aumentando el tiempo en el que se realizan esas peticiones.
Para controlarlo puedes utilizar el siguiente plugin:
-> https://es.wordpress.org/plugins/heartbeat-control/
Tienes mas información en esta entrada del blog:
-> https://www.webempresa.com/blog/mejora-carga-wordpress-admin-ajax-php.html
Un saludo
Hola @pepesoler
Al revisar tus recomendaciones, puedo ver que GTMetrix me indica que admin-ajax.php se carga 3 veces, al igual que lo veo en el CPANEL > METRICAS > Visitantes.
Veo en la pestaña post del GTMETRIX, que se trata de un script apbct que no se cachea.
action=apbct_js_keys__get&no_cache=0.26542769254053433
action=apbct_js_keys__get&no_cache=0.6507160717613805
action=apbct_js_keys__get&no_cache=0.3649439476625975
Por lo que he podido investigar, es algo del Plugins AntiSpam By Clean Talk.
¿ cómo puedo evitar que este error me esté sucediendo ?
¿debo pedir a soporte del plugin que me oriente al respecto o puedo solucionarlo con alguna recomendación de vuestra parte ?
Gracias
Un saludo
Hola Daniel.
Puedes consultar con el soporte del plugin a ver que te dicen.
Con el plugin que te indique antes puedes aumentar lso tiempos, es decir, en vez que se realicen peticiones cada 15 segundo puedes aumentar ese tiempo para que las peticiones se retarden.
Las peticiones de Admin Ajax se tiene que realizar si o si, no puedes omitirlas, si que puedes retardarlas pero siempre te tienen que hacer.
Un saludo
Hola @pepesoler,
en mi caso no es que quiera deshabilitar admin-ajax.php.
Yo entiendo que sirve para hacer consultas evitando recargar la página y que lo usan plugins, el mismo Dashboard de Wpress, etc, y que por defecto es cargado cada cierta cantidad de segundos. Y sé que puedo mediante Hearbet API controlar los intervalos.
Todo eso lo entiendo, pero a lo que me refiero es que cuando un usuario cualquiera hace una consulta a una url, puedo observar que a la vez, esta url cualquiera que consulte, se genera un request simultáneo de hasta 3,4 5 y 6 veces del admin-ajax.php, que lo veo en Cpanel > METRICAS > Visitantes.
Ahora bien, me pregunto ahora si es que tal vez esto más bien se pueda deber a incompatibilidad tal vez entre Akismet y Antispam By Clean Talk, ya que ambos los tengo instalados y tal vez ello pueda generar algún conflicto y por ello se me saturen los recursos del CPU del servidor y por ello es que yo observe repetidas llamadas al admin-ajax.php en la misma solicitud de cualquier url, y no me refiero a que se cargue cada 15 seg, sino simultáneamente.
Si fuera un problema de incompatibilidad, y puedo descartar desactivando alguno, me surge otra pregunta:
¿tengo formularios con CF7 más formularios de comentarios de blog activos y cuentas de clientes con Woocommerce que se loguean para hacer pedidos, y hasta la fecha no tengo problemas con spam alguno.
Los CF7 hacen uso de Recaptcha en su última versión igualmente y eso está caminando bien..
¿ podrían decirme si puedo descartar el Antispam By Clean Talk y contar solo con Akismet + Recaptcha para los formularios y fiarme de ataques antispam, al menos en buena medida?
Lo planteo porque ayer desactivé Antispam By Clean Talk, y los recursos del servidor no colapsaron con la frecuencia que lo hacían y las reiteradas solicitudes simultáneas de admin-ajax decrecieron considerablemente.
Mi idea es descartar plugin, mejorar la velocidad pero manteniendo la seguridad.
¿algún consejo?
Gracias
Hola Daniel,
Usualmente con la activación de recaptcha en tus formularios es suficiente para proteger tu sitio, ten en cuenta que también debes proteger los formularios de comentarios si los tienes habilitados, te sugiero leer el siguiente articulo -> https://www.webempresa.com/blog/captcha-wordpress-formularios.html
De igual forma si tienes Askimet y recaptcha con estos puede ser suficiente, te sugiero mantengas desactivado el plugin de Antispam By Clean Talk y pruebes unods como funciona tu sitio web y si no entra ningún spam
Un Saludo