Ajax é uma tecnologia web baseada em JavaScript que ajuda você a construir sites dinâmicos e interativos. O WordPress usa Ajax para potencializar muitos de seus principais recursos da área administrativa, tais como postos de auto-salvamento, gerenciamento de sessões de usuários e notificações.

Por padrão, o WordPress direciona todas as chamadas Ajax através do arquivo admin-ajax.php localizado no diretório /wp-admin do site.

Numerosos pedidos simultâneos de Ajax podem levar a uma alta utilização do admin-ajax.php, resultando em uma desaceleração considerável do servidor e do website. É um dos problemas mais comuns enfrentados por muitos sites WordPress não otimizados. Tipicamente, ele se manifesta como um site lento ou um erro HTTP 5xx (na maioria das vezes erro 504 ou 502).

Neste artigo, você aprenderá sobre o arquivo admin-ajax.php do WordPress, como ele funciona, seus benefícios e desvantagens, e como você pode diagnosticar e corrigir a alta questão do uso do admin-ajax.php.

Pronto para ir? Vamos lá!

O que é o arquivo admin-ajax.php?

O arquivo admin-ajax.php contém todo o código para rotear as solicitações Ajax no WordPress. Seu objetivo principal é estabelecer uma conexão entre o cliente e o servidor usando Ajax. O WordPress o utiliza para atualizar o conteúdo da página sem recarregá-la, tornando-a assim dinâmica e interativa para os usuários.

Uma visão geral básica de como Admin Ajax funciona no WordPress
Uma visão geral básica de como Admin Ajax funciona no WordPress

Como o núcleo do WordPress já usa Ajax para alimentar seus vários recursos de backend, você pode usar as mesmas funções para usar Ajax no WordPress. Tudo o que você precisa fazer é registrar uma ação, apontar para o arquivo admin-ajax.phpde seu site e definir como você quer que ele retorne o valor. Você pode defini-lo para retornar HTML, JSON, ou mesmo XML.

arquivo admin-ajax.php em WordPress
arquivo admin-ajax.php em WordPress

Conforme o WordPress Trac, o arquivo admin-ajax.php apareceu pela primeira vez no WordPress 2.1. Também é referido como Ajax Admin na comunidade de desenvolvimento do WordPress.

Verificação do uso do Ajax no painel MyKinsta
Verificação do uso do Ajax no painel MyKinsta

O gráfico acima mostra apenas a quantidade de solicitações admin-ajax.php, não de onde elas podem estar vindo. É uma ótima maneira de ver quando os picos estão ocorrendo. Você pode combiná-lo com outras técnicas mencionadas neste post para restringir a causa primária.

Verificação do número de solicitações admin-ajax.php no Chrome DevTools
Verificação do número de solicitações admin-ajax.php no Chrome DevTools

Você também pode usar o Chrome DevTools para ver quantos pedidos estão sendo enviados para admin-ajax.php. Você também pode verificar a guia Timings na seção Rede para saber quanto tempo leva para processar estas solicitações.

Quanto a encontrar a razão exata por trás do alto uso do admin-ajax.php, há principalmente duas causas principais: uma devido ao frontend, e outra devido ao backend. Discutiremos ambas abaixo.

Como depurar o Alto uso do admin-ajax.php no WordPress

Os plugins de terceiros são uma das razões mais comuns por trás do alto uso do admin-ajax.php. Tipicamente, esta questão é vista no frontend do site e aparece freqüentemente em relatórios de testes de velocidade.

Mas os plugins não são os únicos culpados aqui como temas, o núcleo WordPress, o webserver e um ataque DDoS também podem ser a razão por trás da alta utilização do Admin Ajax.

Vamos explorá-los com mais detalhes.

Como Determinar a Origem do Uso de Plugins e Temas em Alta Administração-ajax.php

Plugins acionados por Ajax no repositório WordPress.org
Plugins acionados por Ajax no repositório WordPress.org

O Ajax é freqüentemente usado pelos desenvolvedores do WordPress para criar plugins e temas dinâmicos e interativos. Alguns exemplos populares incluem a adição de recursos como pesquisa ao vivo, filtros de produtos, scroll infinito, carrinho de compras dinâmico e caixa de chat.

Just because a plugin uses Ajax doesn’t mean that it’ll slow down your site.

Visualizando o pedido admin-ajax.php no relatório WebPageTest
Visualizando o pedido admin-ajax.php no relatório WebPageTest

Normalmente, Admin Ajax é carregado no final da página. Além disso, é possível definir os pedidos de Ajax para carregar de forma assíncrona, de modo que possa ter pouco ou nenhum efeito sobre o desempenho percebido pelo usuário na página.

Como você pode ver no relatório do WebPageTest acima, admin-ajax.php carrega no final da fila de pedidos, mas ainda ocupa 780 ms. Isso é muito tempo para apenas uma solicitação.

Relatório GTmetrix indicando um sério pico de uso admin-ajax.php
Relatório GTmetrix indicando um sério pico de uso admin-ajax.php

Quando os desenvolvedores não implementam o Ajax corretamente no WordPress, isso pode levar a problemas drásticos de desempenho. O relatório GTmetrix acima é um exemplo perfeito de tal comportamento.

Você também pode usar GTmetrix para pesquisar dados individuais de postagem e resposta. Você pode usar este recurso para identificar o que está causando o problema.

Para fazer isso, vá até a aba Cascata do relatório GTmetrix, e então encontre e clique no item POST admin-ajax.php. Você verá três abas para esta solicitação: Cabeçalhos, Correio e Resposta.

Dados dos cabeçalhos do pedido POST admin-ajax.php
Dados dos cabeçalhos do pedido POST admin-ajax.php

Ao verificar as guias de Postagem e Resposta da solicitação, você encontrará algumas dicas para descobrir as razões por trás do problema de desempenho. Para este site, você pode ver as pistas na aba Resposta.

Dados de resposta do pedido POST admin-ajax.php
Dados de resposta do pedido POST admin-ajax.php

Você pode ver que parte da resposta tem algo a ver com uma etiqueta de entrada com id definida como “fusion-form-nonce-656”.

Uma rápida busca desta pista o levará ao site do ThemeFusion, os criadores do tema Avada. Portanto, você pode concluir que o pedido é originário do tema, ou de qualquer um dos plugins com os quais ele está agrupado.
Neste caso, é preciso primeiro assegurar-se de que o tema Avada e todos os seus plugins relacionados estejam totalmente atualizados. Se isso não corrigir o problema, então você pode tentar desativar o tema e ver se isso corrige o problema.

Ao contrário de desativar um plugin, desativar um tema não é viável na maioria dos cenários. Portanto, tente otimizar o tema para remover qualquer gargalo. Você também pode contatar a equipe de suporte do tema para ver se eles podem sugerir uma solução melhor.

Testar outro website lento em GTmetrix levou a encontrar problemas similares com o construtor de páginas Visual Composer e plugins de barras de notificação.

Outro pedido POST admin-ajax.php Dados de resposta
Outro pedido POST admin-ajax.php Dados de resposta
PÓS pedido admin-ajax.php Dados do correio
PÓS pedido admin-ajax.php Dados do correio

Felizmente, se você não conseguir resolver um problema com o plugin, você mais gosta de ter muitos plugins alternativos disponíveis para experimentar. Por exemplo, quando se trata de construtores de páginas, você também poderia experimentar o Beaver Builder ou o Elementor.

Como determinar a origem do alto admin-ajax.php

Por vezes, os dados Post e Response apresentados em relatórios de testes de velocidade podem não ser tão claros e diretos. Aqui, encontrar a origem do alto uso do admin-ajax.php não é tão fácil. Nesses casos, sempre é possível fazê-lo à moda antiga.

Desative todos os plugins seu site, limpe cache de seu site (se houver), e então faça um teste de velocidade novamente. Se admin-ajax.php ainda estiver presente, então o culpado mais provável é o tema. Mas se ele não estiver em nenhum lugar, então você deve ativar cada plugin um por um e executar os testes de velocidade a cada vez. Por processo de eliminação, você bloqueará a origem do problema.

Dica: Usar um ambiente de teste (por exemplo, o ambiente de teste da Kinsta) é uma ótima maneira de fazer testes em seu site sem afetar seu site de produção (ao vivo). Uma vez determinada a causa e corrigida a questão no ambiente de teste, você pode mover as mudanças para seu site de produção (ao vivo).

Diagnosticando problemas do Backend Server com admin-ajax.php

A segunda razão mais comum para o alto uso do admin-ajax.php é a API do WordPress Heartbeat que gera freqüentes chamadas Ajax, levando ao alto uso da CPU no servidor. Normalmente, isto é causado por causa de muitos usuários logados no painel do backend do WordPress. Portanto, você não verá isto aparecer em testes de velocidade.

Por padrão, a API Heartbeat API pesquisa o arquivo admin-ajax.php a cada 15 segundos para salvar automaticamente mensagens ou páginas. Se você estiver usando um servidor de hospedagem compartilhado, então você não tem muitos recursos de servidor dedicados ao seu site. Se você estiver editando um post ou página e deixar a aba aberta por um tempo significativo, então ele pode fazer uma grande quantidade de solicitações Admin Ajax.

Por exemplo, quando você está escrevendo ou editando mensagens, um único usuário pode gerar 240 solicitações em uma hora!

Solicitações frequentes de autosave admin-ajax.php
Solicitações frequentes de autosave admin-ajax.php

São muitos pedidos no back-end com apenas um usuário. Agora imagine um site onde há vários editores logados simultaneamente. Um site desse tipo pode fazer racks de pedidos Ajax rapidamente, gerando alto uso de CPU.

Essa foi a situação descoberta pela DARTDrones quando a empresa estava preparando seu site WooCommerce para um esperado aumento no tráfego após uma aparição no Shark Tank.

Antes de ser exibido no programa de televisão, o site da DARTDrones estava recebendo mais de 4.100 chamadas admin-ajax.php em um dia com apenas 2.000 visitantes únicos. Essa é uma relação fraca entre pedidos e visitas.

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

Os investigadores notaram a URL de referência /wp-admin e determinaram corretamente a causa raiz. Estes pedidos foram devidos aos administradores e editores do DARTDrones, atualizando o site frequentemente em antecipação ao show.

O WordPress corrigiu este problema do Heartbeat API parcialmente há muito tempo. Por exemplo, você pode reduzir a freqüência das solicitações geradas pelo Heartbeat API em hosts com recursos limitados. Ele também se suspende após uma hora de inatividade de teclado/mouse/touch.

Alto Tráfego Devido a um Ataque DDoS ou Spam Bots

Deslumbrar seu site com um ataque DDoS ou bots de spam também pode levar ao alto uso do admin-ajax.php. No entanto, tal ataque não necessariamente tem como alvo o aumento das solicitações de Admin Ajax. É apenas um dano colateral.

Se seu site estiver sob um ataque DDoS, sua prioridade deve ser colocá-lo atrás de um CDN/WAF robusto como o Cloudflare ou Sucuri. Cada plano de hospedagem com Kinsta inclui integração gratuita Cloudflare e Kinsta CDN, que pode ajudá-lo a descarregar os recursos de seu site em grande parte.

Para saber mais sobre como você pode proteger seus websites contra ataques maliciosos como estes, você pode consultar nosso guia detalhado sobre como impedir um ataque DDoS.

Resumo

O WordPress usa Ajax em seu API Heartbeat para implementar muitas de suas principais características. Entretanto, ele pode levar a um aumento dos tempos de carga se não for usado corretamente. Isto é normalmente causado devido a uma alta freqüência de solicitações para o arquivo admin-ajax.php.

Neste artigo, você aprendeu as várias causas do alto uso do admin-ajax.php, como diagnosticar o que é responsável por este sintoma, e como você pode consertá-lo. Na maioria dos casos, seguir este guia deve fazer com que seu site volte a funcionar sem problemas em pouco tempo.

No entanto, em alguns casos, a atualização para um servidor com maiores recursos é a única solução viável. Especialmente para casos de uso exigente, tais como comércio eletrônico e sites de membros. Se você estiver rodando tal site, considere atualizar para um provedor de hospedagem gerenciada de WordPress que tenha experiência com estes tipos de problemas de desempenho.

Se você ainda estiver lutando com o alto uso do admin-ajax.php em seu site WordPress, informe-nos na seção de comentários.

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.