Quando chegar a hora de escolher um plano de hospedagem, é importante escolher aquele que melhor atenda às demandas do seu site WordPress.

Por exemplo, um site de comércio eletrônico que recebe 50.000 visitantes por mês normalmente vai ser muito mais exigente em recursos do que um simples blog com a mesma quantidade de tráfego.

Isto se deve simplesmente ao fato de que os sites de comércio eletrônico são tipicamente dinâmicos por natureza, e requerem mais recursos para PHP e consultas a bancos de dados.

É aí que entram em jogo os PHP workers. Leia mais abaixo sobre o que são os PHP workers e como eles são usados para acelerar o processamento de requisições no seu site.

O que é um PHP Worker?

No contexto do WordPress, os PHP workers constroem páginas, processam tarefas de fundo programadas, e muito mais. Como os PHP workers são diretamente responsáveis por gerar páginas HTML para servir aos visitantes do seu site, eles determinam quantas solicitações simultâneas sem cache o seu site pode lidar a qualquer momento.

Por exemplo, digamos que seu site WordPress está equipado com dois PHP workers e sem configuração de cache de página. Se quatro solicitações chegarem ao seu site exatamente ao mesmo tempo, duas dessas solicitações serão processadas imediatamente, enquanto as outras duas terão que esperar na fila até que as duas primeiras tenham terminado de processar.

Aqui em Kinsta, nós usamos PHP workers como uma das variáveis para as nossas diferentes camadas de planos. Por exemplo, planos Business 1 têm 4 PHP workers por site, enquanto planos Enterprise 4 têm 16.

Embora nós implementemos o cache em nível de servidor, para requisições onde o cache é contornado ou perdido, os PHP workers se tornam muito importantes, pois eles têm que fazer o trabalho para cada requisição.

Tipicamente vemos muitos pedidos sem cache em sites de comércio eletrônico e fóruns comunitários. Portanto, esses sites exigirão trabalhadores adicionais de PHP para garantir que cada requisição seja processada sem atrasos ou timeouts.

Se o seu site é altamente otimizado ou não tem muito código PHP (por exemplo, um tema complexo ou muitos plugins WordPress), então o processamento de cada requisição deve acontecer quase que instantaneamente. Mesmo com 2 PHP workers e 4 requisições, todas as quatro requisições seriam tratadas muito rapidamente.

Simplificando, um PHP worker é um processo em segundo plano em um servidor que executa código PHP.

Como o WordPress Utiliza os PHP workers?

Antes de entrarmos em como otimizar o uso de PHP workers para WordPress, temos que primeiro entender como WordPress usa PHP workers.

Um pedido típico em um ambiente sem cache é algo assim:

  1. O servidor web (Nginx ou Apache) recebe uma solicitação de um visitante.
  2. Nginx passa a requisição para o PHP.
  3. PHP consulta a base de dados MySQL conforme necessário e usa os templates PHP do seu tema para gerar uma página HTML.
  4. PHP entrega uma página HTML renderizada de volta para o servidor web.
  5. A página é servida ao visitante.

No processo destacado acima, o Passo 3 é o mais intensivo em tempo e recursos (CPU e RAM). Um site altamente otimizado com o mínimo de consultas a banco de dados e código PHP eficiente passará pelo terceiro passo de forma relativamente rápida.

Pelo contrário, um site com código PHP mal escrito que faz muitas consultas desnecessárias a bancos de dados gastará muito mais tempo para passar pelo Passo 3, o que significa que as solicitações ocuparão os PHP workers por períodos mais longos de tempo.

A Relação entre os PHP workers e a CPU

No que diz respeito ao desempenho do WordPress, a relação entre os PHP workers e a CPU disponível é importante a ser considerada.

Se a falta de recursos de CPU é o gargalo do seu site, o aumento do número de PHP workers não aumentará a performance do seu site – só permitirá que seu site processe mais solicitações ao mesmo tempo com uma performance mais lenta por solicitação.

Deixe-me explicar.

Imagine uma boca-de-incêndio com uma única mangueira presa a ela. Com apenas uma mangueira conectada, a boca-de-incêndio é capaz de fornecer pressão de água adequada. Agora, o que acontece se conectarmos dez mangueiras à boca-de-incêndio?

A pressão limitada da água é distribuída por dez mangueiras, o que significa que cada mangueira individual tem menos pressão de água para realizar o trabalho. Nesta analogia, a boca-de-incêndio é a CPU, e as mangueiras são operadoras de PHP.

Com o acima exposto em mente, você deve estar atento se seu host está constantemente lhe aconselhando a aumentar os PHP workers sem mencionar a CPU também.

Aqui na Kinsta, nossos containers LXD personalizados são configurados para com amplos recursos de CPU e RAM. Nós também usamos máquinas virtuais C2 otimizadas para computação, equipadas com as CPUs mais rápidas do Google Cloud para ajudar os PHP workers do seu site a rodar de forma mais eficiente. Nosso infra-estrutura escalável garante que os PHP workers do seu site WordPress tenham recursos de CPU suficientes para operar com o máximo desempenho.

Vamos voltar à analogia da boca-de-incêndio por apenas um momento.

Imagine que você está em uma situação em que precisa apagar dez incêndios com cinco mangueiras. Depois de conectar as cinco mangueiras, você percebe que a boca-de-incêndio ainda está fornecendo pressão de água adequada.

Nesta situação, faria sentido conectar mais algumas mangueiras, pois a pressão da água da boca-de-incêndio não é o gargalo.

Da mesma forma, se o seu site está tendo um desempenho ruim mesmo com CPU e RAM adequados, é quando você deve olhar para o aumento do número de PHP workers como uma opção para melhorar o desempenho.

Como otimizar o uso do seu site pelo usuário do PHP

Explicamos que os PHP workers são processos de fundo que geram páginas HTML com código PHP. Agora, a maneira mais óbvia de reduzir e otimizar o uso do PHP worker é reduzir a quantidade de CPU e recursos PHP necessários para atender as solicitações do seu site.

Veja como fazer isso.

1. Configure o Caching para o seu site WordPress

O primeiro passo para reduzir o uso do PHP worker é configurar camadas de cache para o seu site WordPress. Por padrão, o WordPress é um CMS dinâmico que atende a todas as solicitações de página sob demanda.

Para muitos sites como blogs, revistas online e portfólios, usar PHP para gerar dinamicamente páginas para cada solicitação é desnecessário.

Caching de Página

O post do blog que você está lendo atualmente é o exemplo perfeito de uma página que não precisa ser gerada dinamicamente. Como muitos de nossos outros posts, o conteúdo deste post foi projetado para ser estático, portanto não há necessidade de gastar recursos da CPU para gerar páginas idênticas continuamente.

Ao invés disso, é melhor ter o PHP gerando a página uma vez e depois fazer o cache dela. O cache de páginas tem muitas vantagens óbvias sobre a geração dinâmica de páginas com PHP.

Por exemplo, imagine se um post de blog em seu site se torna viral e recebe 100.000 page views em poucas horas após a publicação. Sem o cache de páginas, seus PHP workers provavelmente ficariam sobrecarregados e seu servidor provavelmente falharia.

Com o cache de páginas, apenas a visualização da primeira página seria gerada dinamicamente. Os outros 99.999 pedidos seriam atendidos a partir do cache de sua página, que utiliza relativamente poucos recursos da CPU.

Há duas maneiras de configurar o cache de páginas para o seu site WordPress.

  1. Caching de páginas em nível de servidor com um servidor web como o Nginx.
  2. Cache de página baseado em plugins com um plugin WordPress como o WP-Rocket.

Para máxima performance, recomendamos o uso de cache de página em nível de servidor sempre que possível. Na Kinsta, todos os nossos sites usam o módulo de cache FastCGI da Nginx para uma performance super-rápida.

Se seu host não oferece a opção de cache de página em nível de servidor, a próxima melhor opção é usar um plugin de cache do WordPress para implementar o cache de página em nível de aplicação.

Cacheamento de Objetos

Para lojas WooCommerce, fóruns comunitários e outros sites WordPress que não podem fazer uso eficiente do cache de páginas, adicionar um cache de objetos persistentes como Redis em frente ao seu banco de dados MySQL pode aumentar o desempenho e reduzir a carga de PHP workers.

Sem um cache de objetos persistente, consultas de banco de dados MySQL serão executadas para cada requisição, mesmo que o resultado seja idêntico a uma requisição anterior.

Por exemplo, um site de fórum da comunidade que contorna o cache de páginas fará consultas idênticas ao banco de dados para pegar os dados das mensagens, a fim de construir uma página.

Para sites de alto tráfego e de banco de dados, este método de consulta ao banco de dados é ineficiente porque utiliza PHP workers para gerar resultados de consulta idênticos para solicitações separadas. É aí que entra a Redis.

A Redis armazena os resultados das consultas de banco de dados na RAM, o que permite ao PHP pegar os resultados das consultas que já foram executadas. Este método de cache de objetos permite que os trabalhadores do PHP conservem recursos da CPU e gastem menos tempo atendendo uma requisição, pois elimina a necessidade de consultas repetitivas a bancos de dados.

2. Otimize seu código PHP

Além de configurar o cache de páginas, outra estratégia que o ajudará a reduzir o uso do PHP worker é a otimização do seu código PHP. No contexto do WordPress, “otimizar o código PHP” pode significar uma variedade de coisas diferentes, então vamos dar uma olhada mais profunda.

Uma das características mais adoradas e odiadas do WordPress (dependendo de quem você perguntar) é sua extensibilidade através de plugins e trechos de código.

Se você quiser adicionar um widget de ticker de estoque ao seu site WordPress, há um plugin para isso. Da mesma forma, se você quiser adicionar fontes personalizadas, há um trecho de código functions.php para isso também.

A ampliação do núcleo do WordPress com recursos adicionais tornou-se tão fácil que muitas vezes exageramos sem pensar no impacto potencial no desempenho do site.

Portanto, a primeira maneira de otimizar seu código PHP é realizar uma auditoria em todo o site para determinar quais plugins e trechos de código são realmente necessários.

Escolha os Plugins de Qualidade

Na maioria das vezes, o número de plugins em seu site WordPress não é tão importante quanto a qualidade dos plugins. Se um plugin não tiver sido atualizado nos últimos seis meses, recomendamos escolher outro que se ajuste à conta.

A razão para isso é que o WordPress está sendo constantemente melhorado. Se um plugin não é atualizado há anos, é provável que seu código não esteja utilizando as melhores práticas de desenvolvimento e segurança do WordPress.

Por outro lado, se um plugin é constantemente atualizado a cada poucas semanas, há uma boa chance do desenvolvedor ser sério sobre a qualidade, o que faz dele uma boa escolha para o seu site WordPress.

Use Plugins Somente Quando Necessário

Se você está procurando realizar uma tarefa simples em seu site como adicionar JavaScript ou CSS, você nem sempre precisa de um plugin para isso. Ao invés disso, você pode adicionar código diretamente aos templates PHP do seu tema ou ao arquivo style.css com um tema infantil.

Da próxima vez que você estiver em uma situação em que esteja pensando em instalar um plugin, gaste algum tempo para verificar se ele é 100% necessário primeiro. Às vezes, não há como instalar outro plugin e não há problema. Outras vezes, você pode ser capaz de evitar a adição de códigos adicionais inchados por não instalar plugins desnecessários.

Escolha Temas Leve

A partir de nossa experiência monitorando milhares de sites WordPress, descobrimos que temas são ocasionalmente a causa para o mau desempenho do PHP. Para atender a versatilidade do WordPress como um CMS de propósito geral, alguns temas de código de desenvolvedores para trabalhar para uma variedade de casos de uso.

Muitas vezes, isso resulta em temas pesados e inchados que não fazem uso do PHP e consultas a banco de dados de forma eficiente.

Ao construir um site WordPress, é importante escolher um tema que seja mais performante e customizávelGeneratePress, OceanWP, e Astra são três exemplos.

3. Escolha um Host WordPress com foco no desempenho

Acredite ou não, escolher o host WordPress certo pode ter um grande impacto no desempenho do seu site. Como a eficiência de um PHP worker está diretamente correlacionada com CPU e RAM, hospedar seu site em um servidor moderno com o hardware mais recente pode ajudá-lo a otimizar o uso do PHP worker.

Aqui estão dois exemplos mostrando porque a escolha de um host com foco no desempenho é importante para os seus sites WordPress.

CPUs de Alto Desempenho

O PHP utiliza recursos da CPU para executar o código. Uma CPU mais rápida significa uma execução mais rápida do código. Na Kinsta, usamos os servidores mais rápidos do Google Cloud – VMs C2 otimizadas para computação.

Estas VMs são equipadas com os mais recentes processadores Intel Xeon capazes de operar a 3,8 GHz com turbo de todos os núcleos. Em nossos testes de referência, vimos máquinas C2 superando as tradicionais máquinas N1 em 2-4x.

Armazenamento rápido SSD

A velocidade de E/S do disco pode ter um impacto direto na execução do código e nas consultas ao banco de dados. Se o seu banco de dados estiver armazenado em um disco mecânico lento ou em um SSD baseado em nuvem sem IOPS (operações de entrada/saída por segundo) suficiente, seus PHP workers serão forçados a gastar mais tempo preenchendo uma requisição.

Nós usamos o armazenamento SSD de alta performance da plataforma Google Cloud para garantir que seu site WordPress tenha acesso à rápida I/O de disco.

4. Trabalhe com um especialista em performance (Opcional)

Se você não tem certeza sobre como resolver um problema de desempenho em seu site, recomendamos trabalhar com um especialista em desempenho qualificado para diagnosticar o problema.

Um especialista pode ajudá-lo a identificar gargalos específicos em seu código usando ferramentas avançadas de monitoramento como o New Relic ou o plugin Query Monitor WordPress.

Ao fazer zoom e inspecionar processos e consultas de banco de dados PHP individuais, é possível identificar blocos específicos de código e suas características associadas que estão colocando alta carga nos PHP workers do seu site.

Para resumir a otimização do PHP worker, tenha em mente as seguintes dicas.

  1. CPU e RAM devem ser escaladas junto com os PHP workers. Se a utilização da CPU estiver bloqueada a 100%, adicionar mais PHP workers não irá melhorar a performance.
  2. Hospedar seu site com um host com foco em desempenho pode resolver muitos problemas de desempenho.
  3. O cache de páginas e o cache de objetos podem reduzir significativamente a carga do PHP worker.
  4. O uso de plugins e temas WordPress de qualidade pode reduzir a quantidade de códigos inchados desnecessários em seu site.
  5. Se necessário, trabalhe com um especialista em desempenho para identificar e resolver problemas complexos.

Resultados dos PHP workers Insuficientes

Para atingir um desempenho rápido e confiável para o seu site WordPress, é importante ter certeza de que ele tem PHP workers suficientes. Quando os PHP workers já estão ocupados em um site, eles começam a construir uma fila.

Uma vez que você tenha atingido seu limite de PHP workers, a fila começa a empurrar para fora solicitações mais antigas, o que pode resultar em erro 504 ou solicitações incompletas.

Outro erro comum que vemos devido à falta de PHP workers é o erro 502 bad gateway. Estes são ligeiramente diferentes dos 504 erros porque o erro ocorre após um timeout de 60 segundos na fila de PHP workers.

Estes erros não só apresentam uma má experiência para os seus visitantes, mas também podem ter um impacto negativo no SEO do seu site.

Um erro 502 (Bad Gateway).
Um erro 502 (Bad Gateway).

Há uma série de fatores diferentes que podem causar lentidão ou erros de página. Por exemplo, se uma requisição sem cache requer muitos dados do banco de dados, a consulta resultante pode levar de 20 a 30 segundos para ser concluída.

Nesta situação, um PHP worker estaria ocupado por pelo menos meio minuto. Se o seu site tem apenas dois PHP workers, apenas duas ou três dessas longas requisições podem ser suficientes para começar a causar erros.

Para resolver isso, otimizar o banco de dados MySQL e aumentar o número de PHP workers se a CPU ainda não estiver no máximo, pode melhorar o desempenho.

Estimando o Número de PHP workers Necessários

Cada um dos planos de hospedagem em Kinsta inclui um certo número de PHP workers. O número incluído de PHP workers é baseado em métricas históricas de uso de recursos que coletamos ao longo dos últimos anos. Em geral, sites com conteúdo principalmente estático – artigos, páginas estáticas e portfólios – não requerem muitos PHP workers.

Para grandes sites WordPress com funcionalidades mais dinâmicas como eCommerce ou fóruns de discussão, encontramos 4 PHP workers como um bom ponto de partida. Entretanto, isto pode variar por site, pois cada um terá seu próprio conjunto único de temas, plugins, consultas a bancos de dados e relação cache/descache.

Em alguns casos, mais PHP workers podem ser necessários para um desempenho rápido e confiável. Se você não tem certeza sobre quantos PHP workers seu site precisa em Kinsta, nossas equipes de vendas e suporte podem ajudar você a descobrir.

Gráfico de Limite de PHP worker

O gráfico de limite de PHP workers na análise do MyKinsta permite que você veja quantas vezes o mecanismo PHP reportou atingir o número máximo de trabalhadores alocados em seu log de erros. Este gráfico pode ajudá-lo a avaliar se as otimizações de performance estão ou não impactando o uso do seu PHP worker.

Cache superior de derivações.
Cache superior de derivações.

Por exemplo, se você trocasse a versão do PHP do seu site de 5.6 para 7.4, você provavelmente veria uma queda nos limites de PHP workers porque o PHP 7.4 é muito mais rápido que a versão 5.6.

Da mesma forma, se você trabalhou com um especialista em performance para corrigir longas consultas a bancos de dados e mudar para um tema mais leve, você pode usar o gráfico de limite do PHP worker para ver as diferenças antes e depois das otimizações.

Gráfico de Análise de Cache

Você também pode usar o relatório de análise de cache no MyKinsta para determinar o número de acessos, desvios, misses e expirações do cache. Estes dados podem ser especialmente úteis ao otimizar o uso de PHP workers pelo seu site.

Cache Bypass com Strings de Consulta

Por padrão, URLs com strings de consulta como https://kinstalife.com/?query=123 contornam o cache da página. Em alguns casos, as query strings podem resultar em um grande pico de uso desnecessário de PHP e CPU.

Por exemplo, se você visitar um link do Facebook, você verá frequentemente a seqüência de consulta ?fbclid= no final da URL. Da mesma forma, você pode ver os parâmetros de rastreamento do UTM após clicar em um link em um boletim de e-mail.

Uma URL com uma query string (?querystring=123).
Uma URL com uma query string (?querystring=123).

Se um post em seu site ficar viral, e estiver sendo constantemente acessado com uma query string, você será capaz de identificar a URL específica com o relatório de análise de cache.

Com essa informação chave, você pode então entrar em contato com nossa equipe de suporte para forçar o cache dessa URL específica para reduzir a carga em seus PHP workers.

Identificação de Plugins de Recursos Pesados

Em alguns casos, o gráfico de análise de cache também pode ser usado para identificar plugins e processos pesados de recursos.

Por exemplo, se você ver que a URL de desvio do cache superior aponta para um arquivo dentro de um diretório de plugin específico, há uma boa chance de que o plugin seja responsável pelo alto uso do PHP worker.

Se você vê muitas solicitações relacionadas a plugins na sua lista de bypass do cache, você pode trabalhar com um desenvolvedor para resolver o problema ou mudar para um plugin que usa menos recursos.

Resumo

O objetivo de manter um site WordPress rápido é maximizar a eficiência do backend. Quando PHP workers são utilizados adequadamente, encontrando um equilíbrio entre contagem de trabalhadores, uso de CPU e otimização de código, o WordPress pode ser um CMS extremamente performante.
Considere usar o recurso de minificação de código se você for um cliente Kinsta. O recurso está embutido diretamente no painel de controle MyKinsta e permite aos clientes ativar facilmente a minificação automática de CSS e JavaScript com um simples clique.

Se você tiver alguma dúvida sobre quantos PHP workers você pode precisar, ou se você acha que pode estar vendo erros devido à falta de PHP workers, por favor abra um ticket com nossa equipe de suporte para assistência.

Agora é a sua vez: Quais estratégias de otimização você usa para manter seu site WordPress funcionando sem problemas? Nos comente nos comentários!

Brian Li

Brian has been a WordPress user for over 10 years, and enjoys sharing his knowledge with the community. In his free time, Brian enjoys playing the piano and exploring Tokyo with his camera. Connect with Brian on his website at brianli.com.