Todo plugin que você adiciona ao seu site WordPress acrescentará tempo de execução e consultas ao banco de dados. Neste tutorial, explicamos como verificar a origem do tempo de execução. Com essa informação, você e a equipe de suporte do WPML podem encontrar pontos de obstrução e melhorar o desempenho de seu site.

Instale e ative o plugin Debug Objects

Usaremos o plugin Debug Objects para ver e entender as consultas ao banco de dados necessárias para gerar seu site. O Debug Objects mostrará uma lista detalhada das consultas executadas em cada página no site. Esta saída só é visível para você, quando está conectado como administrador. Os visitantes não verão as informações de depuração.

Para instalar o plugin, acesse o painel do WordPress e escolha Plugins no menu esquerdo e depois Adicionar novo. No campo de pesquisa, digite “debug objects” e tecle Enter.

Na tela de resultados da pesquisa, clique no botão Instalar agora:

Instalando o plugin Debug Objects
Instalando o plugin Debug Objects

Após a conclusão da instalação, ative o plugin.

Outra opção é baixar o Debug Objects diretamente do repositório do WordPress e fazer upload dele para wp-content/plugins em seu servidor. Daí, ative-o através da página de Plugins do painel de administração do WordPress.

Desativar o Xdebug

Se você não sabe o que é Xdebug, sinta-se à vontade para pular essa seção. Se você está usando o Xdebug, não se esqueça de desabilitá-lo antes de fazer testes de desempenho. O Xdebug causa uma sobrecarga significativa no seu servidor e os resultados saem distorcidos. Saiba como desativar o Xdebug.

Configure o Debug Objects para analisar consultas SQL

Primeiro, adicione esta linha ao seu arquivo wp-config.php (esse arquivo fica no diretório principal em que seu WordPress está instalado):

define( 'SAVEQUERIES', TRUE );

Agora acesse Ferramentas -> Debug Objects e desabilite todas as opções exceto DB Query:

Configure o Debug Objects
Configure o Debug Objects

Role até a parte inferior dessa tela e clique no botão Salvar.

Verifique a saída da depuração

Após a ativação e configuração adequada do plugin, podemos começar a depuração. Enquanto está conectado como administrador do WordPress, acesse qualquer página que você acha que está muito lenta (caso esse seja o caso de muitas páginas, escolha a que parece ser a mais lenta) e clique no link Objects na barra superior de menu de administrador:

Link do Debug Objects pronto para você
Link do Debug Objects pronto para você

Você verá três guias com as informações de depuração:

Saída do Debug Objects em três guias
Saída do Debug Objects em três guias

Como ler e entender a saída de depuração

Nessas três tabelas, você verá muitos dados, mas apenas parte deles é importante para nós e relevante para o plugin WPML. Em geral, estamos interessados em duas coisas:

  • Consultas muito lentas – às vezes, muito do problema de desempenho é resultado de algumas consultas que levam muito tempo para serem processadas
  • Muitas consultas repetidas – em outros casos, não há consultas muito lentas, mas muitas consultas rápidas que, juntas, levam muito tempo para serem concluídas

Localizando consultas lentas

Acesse a primeira guia, chamada DB Queries, e procure as consultas mais lentas. O plugin Debug Objects nos ajuda a fazer isso realçando consultas que exigem mais de 0,5 ms com uma borda laranja:

Consultas lentas
Consultas lentas

Sob a string da consulta, você pode ver o nome da função que realizou a consulta. No entanto, isso pode enganar, porque essa guia só mostra a última função da pilha de execução inteira e não sabemos se isso vem do núcleo do WordPress ou de um dos plugins (nem qual plugin).

Verifique se a consulta veio do plugin WPML

Copie a consulta lenta (Ctrl+C) e selecione a segunda guia, chamada Plugin DB queries. Você verá algumas tabelas com consultas, que estão organizadas de acordo com os nomes de plugins e com os arquivos de plugins pelos quais as consultas passaram. Se o plugin WPML participou na execução dessa consulta, ele deve estar listado na tabela correspondente.

Tecle Ctrl+F em seu teclado e depois Ctrl+V para colar a consulta copiada.

Isso iniciará uma pesquisa de toda ocorrência da consulta selecionada nessa tabela. Provavelmente, você verá mais de um resultado. Para pular entre eles, tecle F3.

Para todo resultado da pesquisa, verifique se ele está na tabela localizada sob um dos plugins do WPML. Em caso afirmativo, escreva:

  • o nome do plugin
  • o arquivo em que a consulta foi executada
  • o número da linha neste arquivo (primeira coluna na tabela)

Detalhes da consulta
Detalhes da consulta

Consultas comuns ao WPML e outros plugins e temas

Algumas das consultas passam por outros plugins e/ou temas bem como pelo plugin WPML. Por exemplo, o WPML String Translation fornece serviços de tradução para strings localizadas no núcleo do WordPress, no tema e em todos os outros plugins. Se você vir o plugin String Translation se destacando na lista de DB queries, significa que o WPML precisa traduzir muitas strings diferentes no seu site.

Nesse caso, a consulta que você achou lenta ocorrerá na guia DB queries do plugin na tabela sob o nome de nosso plugin, mas também nas próximas tabelas relacionadas a outros plugins, ou na terceira guia: WP Content DB queries. Confira isso antes de relatar uma consulta lenta através de nosso fórum. Se você encontrar a mesma consulta na terceira guia, escreva o nome do arquivo da terceira guia. Saberemos se um tema específico está envolvido na execução dessa consulta lenta e a identidade do tema.

Relatando seus resultados através do fórum técnico do WPML

Depois de ter escrevido todos os dados relacionados à consulta lenta, crie um novo ticket de suporte no nosso fórum e explique seu problema. Inclua o seguinte em seu relatório:

  • A consulta que está lenta e quanto tempo ela leva para ser executada.
  • Se é possível encontrar essa consulta na 2ª guia do registro de depuração e onde. Se ela está localizada no plugin WPML e, se esse for o caso, os arquivos que estão envolvidos e os números de suas linhas.
  • Se é possível encontrar essa consulta na 3ª guia e onde, bem como o nome do arquivo e o número da linha.

Copie o conteúdo de todas as guias e compartilhe-o conosco usando o Pastebin.

Para fazer isso:

  1. Acesse o fórum de suporte técnico do WPML e inicie um novo tópico. Descreva o problema de desempenho que você está vendo e onde nós também podemos vê-lo.
  2. Abra a primeira guia nos resultados do Debug Objects
  3. Selecione o conteúdo dessa guia. Não se esqueça de incluir tudo das “consultas”, inclusive a seção “erros” e a inteira lista de consultas.

    Selecione todas as consultas
    Selecione todas as consultas

  4. Copie (Ctrl+C) sua seleção
  5. Acesse pastebin.com e cole (Ctrl+V) o que selecionou na área de texto e clique no botão “Enviar”.

    Cole no Pastebin
    Cole no Pastebin

  6. Copie o URL da barra de endereço do seu navegador.

    Copie o URL do Pastebin
    Copie o URL do Pastebin

  7. Cole o URL do Pastebin no tópico do suporte.
  8. Repita as etapas 2–6 para os conteúdos das outras duas guias.

Agora, nossa equipe de suporte sabe a qual site você se refere e qual página está carregando lentamente. Eles podem ver uma lista completa das consultas que estão sendo executadas e podem ajudá-lo a encontrar a causa do problema. Se estiver no WPML, veremos como podemos contornar esse problema (e por fim melhorar isso em uma versão posterior). Se estiver no tema ou outros plugins, falaremos com os desenvolvedores deles e faremos o máximo ao nosso alcance para deixar tudo funcionando adequadamente para você.


Apêndice: Desativando o Xdebug

O Xdebug é uma extensão de PHP que permite que você depure problemas de programação. Quando usado corretamente, também ajuda a analisar a origem dos problemas de desempenho.

Quando é executado, o Xdebug sobrecarrega consideravelmente o servidor, visto que precisa capturar o que está ocorrendo em tempo real. Por isso, você NUNCA deve deixar o Xdebug em execução ao realizar testes de desempenho. Se o Xdebug estiver em execução quando você medir o desempenho, você obterá números totalmente equivocados. A maior parte da sobrecarga relatada será devido ao Xdebug e não devido ao código que você deseja testar.

O modo correto de depurar questões de desempenho com o Xdebug é medir sem o Xdebug, obter os resultados e então encontrar a origem do ladrão de desempenho usando o Xdebug.

O Xdebug talvez esteja sendo executado em seu servidor mesmo que você não esteja verificando sua saída. Isso acontece muitas vezes quando as pessoas ativam o Xdebug para realmente depurar algo e o deixam carregado, pensando que está inativo.

A forma de se certificar de que ele está desligado é verificando a saída phpinfo().

Xdebug sendo exibido na saída phpinfo
Xdebug sendo exibido na saída phpinfo (ruim para testes de desempenho)

Se você quer desativar o Xdebug, faça isso por removê-lo ou assinalá-lo como comentário do seu php.ini ou de seu conf.d/xdebug.ini:

zend_extension=xdebug.so

Remova, não adicione a linha acima!

É assim que deve aparecer o phpinfo quando o Xdebug não está em execução:

phpinfo quando o Xdebug não está em execução (bom para testes de desempenho)
phpinfo quando o Xdebug não está em execução (bom para testes de desempenho)

Assim que não contiver nenhuma referência ao Xdebug, ele está desativado com certeza.

Caso haja referências ou não ao Xdebug em outras seções deste arquivo phpinfo, isso não é relevante, desde que ele não seja mostrado como uma extensão carregada, no topo.