Ajude o cache do WordPress a ajudar seu site

fecharEste post foi publicado há mais de seis meses, e as informações aqui contidas podem estar desatualizadas ou mesmo não terem mais nenhuma validade. Não nos responsabilizamos por eventuais mal entendidos.

Nossos clientes já estão acostumados à nossa obstinação com velocidade e desempenho dos sites instalados em nossos servidores. A maioria de nossos clientes é usuária de WordPress — a mesma plataforma de blog que usamos aqui no site da PortoFácil –, da qual temos bastante conhecimento. Sem medo de errar, podemos dizer que dificilmente outra empresa contará com tanto know-how em WordPress quanto nós.

Há diversas técnicas para se otimizar um blog em WordPress, e não existe nenhuma fórmula que funcione para todo mundo, exceto quanto à utilização de caches, que evitam que o WP propriamente dito precise reprocessar cada página, a cada requisição; em vez disso, o cache faz com que o servidor entregue ao vistante uma versão previamente existente de cada página, acelerando o processo e poupando recursos.

Níveis de cache

Há vários níveis possíveis de cache aplicáveis ao WordPress, como por exemplo:

  • caches no nível do servidor web (ou “aceleradores HTTP”);
  • caches de páginas;
  • caches de objetos;
  • caches de banco de dados;
  • caches de bytecode.

Vamos ver cada um deles em sequência, com sugestões de como ajudar o WordPress a rodar o mais rapidamente possível.

O acelerador HTTP

Todos os VPSs e dedicados da PortoFácil têm “de série” o Nginx como webserver ou como acelerador HTTP.

De maneira simplificada, podemos dizer que o acelerador HTTP é um programa que fica colocado estrategicamente entre o servidor web propriamente dito (Apache) e os visitantes; sempre que um visitante requisitar um objeto — uma página, um script, uma imagem, um CSS, etc — o cache vai armazenar por um determinado tempo uma cópia deste objeto na memória do servidor; requisições subsequentes do mesmo objeto são entregues diretamente a partir deste repositório de cópias, não demandando mais acionar o Apache, que por sua vez aciona o PHP, que roda o WordPress com toda a sua complexidade, e por fim devolve o resultado que o visitante deseja.

Pela natureza do acelerador HTTP, é comum que ele tenha critérios diferentes para os diversos tipos de objetos que um visitante possa requisitar, mas de maneira simplificada o esquema é assim:

  • objetos estáticos (arquivos de JavaScript, CSS, arquivos de texto, imagens, animações em Flash, e outras): o cache é o mais longo possível, e nos VPSs NX esse tempo tende ao infinito;
  • páginas HTML (páginas, posts, índices de posts, etc): o cache tem duração mais curta, com o fito de evitar que atualizações aplicadas às páginas sejam perdidas;
  • páginas dinânicas (scripts PHP, por exemplo): não há cache.

Deste esquema fica fácil depreender a primeira regra de ouro para ter um site WP eficiente e rápido: jamais usar scripts em PHP para gerar conteúdo que deveria ser estático, como imagens redimensionadas, JavaScript personalizado, ou outros.

Para saber se o seu site está cometendo este pecado, basta acessar algum post, ou mesmo a página inicial, e visualizar o código fonte da página publicada. Aí é só procurar por qualquer imagem ou objeto que esteja sendo chamado com a extensão .php. Por exemplo: <img src="http://endereco-do-site.net/wp-content/themes/classipress/includes/img_resize.php?width=100&amp;height=100&amp;url=imagem.jpg" />.

Especificamente, no caso de imagens, recorte e redimensionamento destas, sugerimos enfaticamente que se utilize o Jetpack Photon, em vez de qualquer script local. Além de aliviar o seu site do processamento das imagens, o Photon ainda faz CDN dos arquivos, acelerando ainda mais o carregamento das páginas.

Não é demais repetir: scripts PHP não se beneficiam de nenhum cache, a não ser que tenham sido projetados para isto. Tal é a razão pela qual é uma péssima prática usar scripts para gerar recursos que deveriam ser estáticos.

Dica Extra #1: restringir a execução do wp-cron

Siga as instruções do velho mas ainda válido post: Domando o wp-cron.php. Com isso você vai economizar preciosos ciclos de processamento ao diminuir a frequência com que o WordPress roda o wp-cron.php, que não tem cache nenhum.

Caches de Páginas

O cache mais famoso, e também o mais importante, em um blog WordPress, é o cache de páginas. Existem incontáveis plugins (além de outros métodos menos populares) que geram caches de páginas, cuja função é evitar que o WP precise reprocessar a cada requisição todas as variáveis que darão como resultado final uma página HTML.

Além de gerar o cache das páginas HTML, os plugins também contam com inteligência o suficiente para limpar o cache periodicamente ou sob demanda (na publicação ou atualização de algum conteúdo, por exemplo).

O melhor plugin de cache atualmente existente para o WordPress é o WP Super Cache, que é leve para rodar, não tem recursos que podem ser encontrados de maneira mais eficiente em outros plugins especializados, e tem extrema eficiência ao gerar cache que pode ser entregue diretamente do sistema de arquivos ao webserver, ao configurar corretamente o plugin em mod_rewrite.

Dica extra #2 — coletar o lixo “por fora”

Coleta de lixo é o termo que descreve a tarefa que o cache precisa desempenhar ao identificar arquivos que já estejam mais velhos que o prazo máximo especificado pelo administrador do blog.

Esta limpeza é feita baseada no wp-cron, subsistema do WordPress responsável por disparar tarefas em horários ou a intervalos predeterminados.

Por causa da arquitetura do WordPress, que precisa se adaptar aos ambientes mais hostis, este subsistema é qualquer coisa menos eficiente: a cada visitante o WP precisa verificar se está na hora de rodar alguma tarefa, e estas são todas interpretadas via PHP.

A dica da vez é desabilitar a coleta de lixo do Super Cache, e ativar uma tarefa na crontab do Linux para de tempos em tempos ir apagando os arquivos expirados do cache.

Trata-se de uma tarefa especifica e especializada, e recomendamos que em vez de tentar executá-la sozinho você peça ajuda ao nosso Suporte Técnico.

Caches de objetos

O conceito de “objeto” é um dos mais abstratos em computação, e dos mais difíceis de explicar sem entrar em aspectos técnicos maçantes. Podemos dizer, de maneira simples, que “objetos” do ponto de vista do WordPress podem ser resultados de consultas ao banco de dados, comentários, posts, widgets, menus, ou qualquer outra coisa que se possa imaginar.

O WP conta com diversos mecanismos para fazer cache de objetos, utilizando a sua Transient API. Caso não tenha sido fornecido ao WordPress uma interface para utilização de algum método mais eficiente, os transients (ou o cache dos objetos) será feito utilizando a tabela wp_options do banco de dados do blog.

Caberá ao desenvolvedor de cada blog implementar as políticas de uso dos transients da melhor maneira para cada caso.

Dica extra #3: forçar os widgets do blog a usarem transients

Instale e ative o plugin Widget Cache, e configure cada widget de seu tema para usar caches de duração especificada, ou de duração indeterminada, mas que são limpos ao publicar um novo post, alterar categorias, etc.

Este procedimento vai diminuir o volume de consultas ao banco de dados necessárias para gerar uma página HTML, acelerando a geração do cache e aliviando a carga na máquina.

Dica extra #4: forçar cache dos menus

Se você usa os menus do WordPress, quanto mais complexo e extenso ele for, mais pesado vai ficar o blog. Você pode acelerar imensamente o blog fazendo cache dos menus usando a Transient API.

Para ver como se faz esta mágica acesse o post: #365Posts – Acelere seu WordPress fazendo cache dos menus.

Dica extra #5: utilizar o memcached como mecanismo de cache dos transients

O memcache é um mecanismo do tipo cliente/servidor que permite a criação de “dicionários” compartilhados entre usuários na RAM de um mesmo servidor, sendo que o servidor de memcache pode ser a máquina local ou um servidor na rede, acessível por diversas máquinas.

Para fazer o WordPress utilizar o memcache como mecanismo de cache de objetos, basta salvar no wp-content um script chamado object-cache.php escrito especificamente para esta função.

Observe que se você apenas salvar um arquivo destes muitos que circulam na Internet, você só poderá utilizá-lo em um blog, porque haverá “colisão” de chaves. Se você tiver dois ou mais WPs instalados no mesmo servidor e quiser evitar a colisão de chaves, terá de usar uma versão alternativa desse script.

Estamos utilizando em alguns blogs, inclusive neste, uma versão que contempla múltiplos blogs usando o mesmo servidor de memcache. Basta baixar o arquivo object-cache.php.txt, renomeá-lo e salvá-lo no local correto do blog.

Quem souber ler em Inglês e quiser se aprofundar mais no assunto pode ler este artigo, fazendo a seleção da informação que não se aplica ao seu caso específico.

Todos os VPSs NX têm o memcache instalado. Alguns VPSs Turbo têm, outros não, o mesmo se dando com os dedicados. Na dúvida, entre em contato com o Suporte Técnico e peça ajuda para configurar o seu.

Caches de banco de dados

Acima dissemos que as consultas aos bancos de dados também são “objetos” para o WordPress. Elas podem se beneficiar da Transient API assim como qualquer outro tipo de objeto, mas para quem quiser ganhar tempo e implementar uma solução, como todo bom plugin deveria ser (instale e esqueça), a dica é instalar o DB Cache Reloaded Fix (atenção com plugins de nomes parecidos, este é o único que ainda funciona com a versão atual do WP).

Dica Extra #6: Usar MariaDB em vez de MySQL

O MariaDB, já disponível nos servidores da PortoFácil, pode acelerar imensamente as consultas ao banco de dados, sendo um excelente companheiro para todas as técnicas de otimização já citadas, ou que ainda vamos citar neste artigo.

Caches de bytecode

Por fim, para esta abordagem, o último tipo de cache de que pode se beneficiar o WordPress é o cache de bytecode. Simplificando, o bytecode é um código intermediário entre a linguagem de script e o código de máquina. Embora não seja o mais correto, podemos dizer que o bytecode é o código obtido da “compilação” do PHP.

Existem vários mecanismos de cache de bytecode disponíveis no mercado, inclusive o HipHop, que converte scripts PHP em linguagem de máquina, e é usado no Facebook (criador da tecnologia). Apesar de ser uma tecnologia linda, macia, perfumada e cheirosa, ela não é amigável o suficiente para aditivar os WPs dos usuários medianos (como nós).

Mas existe o APC (Alternate PHP Cache) que é um módulo que se adiciona ao PHP, que basta instalar e ativar e pronto, todo e qualquer site na máquina estará se beneficiando do cache de bytecode. Além disso, o APC também pode funcionar como alternativa ao memcached para cache de objetos.

Todos os VPSs NX têm o APC instalado e ativo. Alguns VPSs Turbo também o têm, outros não, assim como acontece com os dedicados (máquinas menores normalmente não o têm, em função de restrições quanto à quantidade de RAM).

Consulte nosso suporte para saber se sua máquina tem, e se não tem se comporta o APC. Teremos prazer em ajudar.

 

Quero ser cliente da PortoFácil!Contato

Avalie este conteúdo!

Avaliação média: 4.67
Total de Votos: 30

Ajude o cache do WordPress a ajudar seu site

Compartilhe

Publicado por Janio Sarmento – 21 de agosto de 2015