É muito comum, ao lidar com o WordPress e diagnosticar a alta utilização do admin-ajax.php. Se você tem trabalhado com o WordPress por um tempo, você provavelmente já se deparou com isso ao executar testes de velocidade ou verificar seus logs de acesso ao servidor. Geralmente, isso é causado por plugins de terceiros ou por solicitações frequentes de painel de administração que não são armazenáveis, devido à API Heartbeat, como rascunhos salvos automaticamente. É importante, entretanto, que você diagnostique altos picos de admin-ajax.php quando os vir, pois eles são conhecidos por trazer um site a um rastreamento. Confira as seguintes recomendações abaixo sobre algumas maneiras de resolver o problema admin-ajax.php no WordPress.

1. Qual é o arquivo admin-ajax.php?

O arquivo admin-ajax.php em si não é uma coisa ruim quando usado corretamente. Faz parte do núcleo e foi adicionado pela equipe de desenvolvimento do WordPress em versão 3.6. O objetivo do admin-ajax.php é criar uma conexão entre o navegador e o servidor usando o AJAX. Isso permite uma funcionalidade estendida, como melhorar a gravação automática, o rastreamento de revisões, os tempos limite de login, o gerenciamento de sessões e as notificações sobre uma postagem bloqueada quando há vários editores. São todos ótimos recursos, especialmente para aqueles que trabalham com vários administradores e autores.

A ideia é ter uma API relativamente simples que envie solicitações XHR ao servidor a cada 15 segundos e acione eventos (ou retornos de chamada) ao receber dados. Outros componentes poderiam “pegar carona” ou ser notificado sobre as atividades de outro usuário. Isso pode ser usado para bloquear a edição simultânea de widgets e menus ou qualquer outra tarefa que exija atualizações regulares do servidor. — Make WordPress Core

E para aqueles que talvez não sejam tão experientes em tecnologia, sua única exposição ao admin-ajax.php pode ser simplesmente que você está tentando descobrir por que está reduzindo a velocidade dos testes de velocidade em ferramentas como Pingdom (como visto no exemplo abaixo). Ou você pode receber milhares de solicitações nos registros de acesso do seu host.

Alto uso de admin-ajax.php

Alto uso de admin-ajax.php

Ver admin-ajax.php em testes de velocidade e logs de acesso é tipicamente o resultado de dois cenários de diferença acontecendo, um front-end e outro back-end, dos quais iremos mergulhar abaixo.

2. Plugins podem causar admin-ajax.php para Spike

O primeiro  e mais comum problema que as pessoas veem com admin-ajax.php são aquelas geradas a partir de plugins de terceiros. Isso geralmente é visto no front-end e aparece nos testes de velocidade. Os desenvolvedores utilizam esse arquivo e/ou AJAX para adicionar funcionalidade aos seus plugins. Mas só porque você vê uma solicitação para admin-ajax.php não significa necessariamente que está reduzindo o ritmo do seu site. O AJAX é carregado depois que a página é carregada e certas solicitações podem ser carregadas de forma assíncrona. No entanto, isso também nem sempre significa que o desenvolvedor está fazendo isso da maneira correta ou que está codificado de forma eficaz para o desempenho. Para desenvolvedores, aqui estão algumas dicas sobre como usar corretamente o AJAX em temas e plugins do WordPress.

Abaixo estão alguns exemplos de como diagnosticamos rapidamente um pico de admin-ajax.php. Estamos usando o GTmetrix, devido ao fato de que nos permite cavar os dados individuais de post e resposta. O Pingdom, infelizmente, não permite ver os dados do formulário de solicitação. Você também pode usar o Google Chrome Devtools ou o WebPageTest.

Alto admin-ajax.php Spike do plugin Visual Composer

Aqui está um site WordPress de terceiros que encontramos que estava indicando alguns picos muito grandes com admin-ajax.php. Como você pode ver, o GTmetrix está reportando um pico de mais de 8 segundos! O resto de sua cascata parece ok, mas isso é algo que definitivamente precisa ser tratado pelo dono do site.

pedido longo de admin-ajax

POST admin-ajax.php

Se você clicar na solicitação POST admin-ajax.php, poderá ver três guias diferentes: Cabeçalhos, Post e Resposta. Ao diagnosticar esses tipos de problemas, você deve realmente focar no conteúdo das guias Post e Resposta. Para este site, podemos ver pistas instantaneamente na guia Resposta. Podemos ver que parte da solicitação tem a ver com o script “vc_shortcodes-custom-css”.

Resposta POST

Resposta POST

Um rápido copiar e colar no Google e podemos ver instantaneamente que isso vem do plugin do Construtor de páginas do Visual Composer para WordPress. Você ficaria surpreso com o quanto os índices do Google.

Pesquisa visual composer

Pesquisa visual composer

O próximo passo para essa pessoa deve ser garantir que o plugin do Visual Composer esteja totalmente atualizado. Se for, eles devem entrar em contato com os desenvolvedores do plugin e relatar o problema com admin-ajax.php. Na verdade, este parece ser um problema comum com este plugin, como visto no post Stack Overflow. O melhor do WordPress é que, se um desenvolvedor não conseguir resolver o problema com o plugin, é bem provável que haja plugins alternativos disponíveis para você e que façam a mesma coisa. Por exemplo, quando se trata de construtores de páginas você poderia testar o Beaver Builder ou Elementor.

Alto admin-ajax.php spike do plugin da barra de notificação

Aqui está o segundo exemplo em nosso site de desenvolvedor. Após a instalação de um determinado plugin de terceiros, instantaneamente vimos um enorme pico para o admin-ajax.php.

admin-ajax gtmetrix lento

Pedido lento de admin-ajax.php

Novamente, se você clicar na solicitação POST admin-ajax.php, investigará mais. Podemos ver que nos dados do post há “action = mtsnb_add_impression & bar_id = 88 & ab_variation = none”.

dados gtmetrix post

Dados de ação do POST

Normalmente, a primeira parte de uma ação de postagem também estará relacionada a uma classe CSS em um plugin. Então, novamente, fazemos uma busca rápida no Google de “mtsnb” e o primeiro resultado que aparece é na verdade, o plugin Notification Bar que estamos rodando em nosso site de desenvolvimento.

mtsnb

Pesquisar por ação mtsnb

Se você é um desenvolvedor, há outras maneiras de rastrear qual plug-in pode estar gerando resposta do POST, mas descobrimos que um teste rápido de velocidade e a pesquisa do Google também podem ser bastante eficazes.

Um caminho seguro de determinar a origem do admin-ajax.php

Acima estão algumas maneiras fáceis de encontrar rapidamente o plugin em seu site WordPress que possa estar causando o problema. Em nossa experiência, isso funciona 99% do tempo. Mas nas outras vezes em que os dados ou ações dos posts podem não ser tão claros, você sempre pode fazer isso da maneira antiga. Simplesmente desative todos os plugins no seu site WordPress. Execute um teste de velocidade em seu site, se admin-ajax.php não for encontrado em lugar nenhum, reative cada plugin, um por um, enquanto executa os testes de cada vez. Usar um processo de eliminação é uma maneira segura de encontrar a origem.

Este também é um momento perfeito quando o ambiente de teste da Kinsta é útil. Simplesmente copie seu site WordPress para testar e executar seus testes sem afetar seu site ativo. Depois de determinar a causa, você pode fazer as alterações em seu site ativo.

O relatório de uso do AJAX no MyKinsta analytics pode ser outra ótima maneira de ajudá-lo a solucionar esses tipos de problemas, pois você pode determinar se está vendo determinados picos de AJAX durante determinados períodos.

Monitoramento de desempenho de uso do AJAX

Monitoramento de desempenho de uso do AJAX

3. Problemas de CPU com admin-ajax.php no back-end

A segunda grande questão é que a API de pulsação do WordPress usa admin-ajax.php para executar as chamadas AJAX do navegador da Web e pode causar alto uso da CPU. Cada solicitação AJAX também carrega o back-end completo do WordPress, contornando todas as formas de armazenamento em cache. Normalmente, você não verá isso nos testes de velocidade. Isso é especialmente importante para aqueles que estão usando hosts compartilhados baratos, pois eles não têm muita margem de manobra quando se trata do uso da CPU. WP Tavern experimentou esta primeira mão e migrou do HostGator devido a várias suspensões.

Um cenário que você deve ter cuidado é salvar automaticamente no WordPress e deixar abas abertas. Por exemplo, lançamos um novo rascunho em nosso site de desenvolvimento e deixamos a guia aberta. Por padrão, a API Heartbeat pesquisa o arquivo admin-ajax.php a cada 15 segundos para fazer uma gravação automática. Você pode ver isso abaixo no log de acesso do painel MyKinsta. Se deixássemos nossa guia aberta e deixássemos o nosso computador, esse único post poderia gerar 5.760 pedidos em um dia!

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

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

Isso é um monte de pedidos no back-end para apenas uma pessoa. Mas o que acontece se você estiver lidando com um site com vários editores? Essas solicitações podem se multiplicar rapidamente. Realmente experimentamos isso em nosso recente estudo de caso com o DARTDrones, em que estávamos ajudando a escalar seu site WooCommerce para o Shark Tank. Eles receberam mais de 4.100 chamadas admin-ajax.php em um período de 24 horas, com apenas 2.000 visitantes únicos. Essa não é uma boa proporção de solicitações para visitas. Conseguimos determinar isso a partir do URL de referência do wp-admin, que estava sendo gerado devido a seus administradores atualizarem o site em preparação para o programa.

uso pesado de admin-ajax.php

uso pesado de admin-ajax.php em dartdrones.com

No entanto, existe uma maneira de ajudar a corrigir alguns dos problemas com o polling em admin-ajax.php no back-end, quando se trata de salvamento automático, revisões, bloqueio, etc. O Plugin Heartbeat Control  de Jeff Matson entra em jogo.

heartbeat control

Plugin Heartbeat Control

O plugin de controle Heartbeat atualmente tem mais de 80.000 instalações ativas com uma classificação de 4.5 de 5 estrelas. Você pode baixá-lo do WordPress repository ou procurando por ele em seu painel do WordPress em “Adicionar Novo” plugin.

O plugin permite que você gerencie a frequência da API de pulsação do WordPress com apenas algumas regras simples. Recomendamos desabilitar todos os lugares, exceto as suas páginas de pós-edição. Então, primeiro adicione uma regra que desabilite o heartbeat no “painel do WordPress” e no “Frontend”.

Locais de controle Heartbeat

Locais de controle Heartbeat

A segunda opção permite escolher a frequência do intervalo. Portanto, certifique-se de que o “Editor de postagem” esteja selecionado e altere a frequência padrão de 15 segundos para 60 segundos. Isso pode ajudá-lo a reduzir drasticamente o número de solicitações e economizar em recursos do servidor (reduzir a carga da CPU).

Frequência de controle Heartbeat

Frequência de controle Heartbeat

Você também pode usar um plugin premium como o perfmatters (desenvolvido por um membro da equipe da Kinsta), que permite desativar a pulsação, alterar a frequência de pulsação e modificar o intervalo de autosave.

Desativar e limitar Heartbeat com perfmatters - admin-ajax.php requests

Desativar e limitar Heartbeat com perfmatters – admin-ajax.php requests

Resumo

Como você pode ver, existem algumas opções rápidas e fáceis para diagnosticar e resolver problemas de admin-ajax.php. Normalmente, eles surgem de plugins de terceiros que podem estar em conflito uns com os outros ou talvez estejam mal codificados. Se você está tendo a carga da CPU no back-end como resultado de admin-ajax.php, você também pode querer considerar um host gerenciado do WordPress como Kinsta, que tem mais experiência em lidar com esses tipos de problemas de desempenho.

Você já lidou com o admin-ajax.php no seu site WordPress? Talvez você tenha algumas dicas adicionais. Se assim for, nós gostaríamos de ouvir seus pensamentos nos comentários.

13.9K
Shares