MEP WP Cache: use o WordPress para um site com desempenho de HTML estático!

Conhece a Digital Ocean? Tenha VPS em cloud pagando a partir de US$ 5 por mês! Cadastre-se pelo meu link de afiliado aqui e ganhe US$ 10! Dá para testar o plano mais básico por 2 meses, ou o segundo por um... Existem várias distros Linux pré-configuradas, muitos tutoriais de instalação dos serviços web e um excelente suporte. O serviço é rápido e estável, tenho gostado muito! Vale a pena conferir e resgatar os seus 10 dólares de crédito ao ativar sua conta. Eles aceitam PayPal ;)

por Marcos Elias

Nota: o nome MEP WP Cache é interno e temporário; tenho outro nome em mente para ele, talvez quando for lançado virá diferente ;)

Não é de hoje que busco um sistema de cache para WordPress que seja simples, porém bem objetivo: um que guarde um cache estático das páginas em HTML, e entregue este arquivo aos visitantes sem passar pelo MySQL nem PHP.

A maioria dos plugins de cache que existem têm várias opções, adicionam um certo “peso” no processamento e acabam limpando o cache de tempos em tempos (algo configurável, é verdade). Eu cansei. Quero um WordPress praticamente estático! Entregar conteúdo textual, artigos, dicas, tutoriais, notícias… Pô, não precisamos usar o MySQL ou PHP para isso! É um baita desperdício de recursos. Junte isso ao fato do WordPress ser bem visado e atacado (xmlrpc, comentários, força bruta… falarei disso em outro mega artigo em breve)… Cansei de ver o site fora do ar porque o servidor MySQL caiu!

Pensei em usar plugins que geram o site todo estático, mas este tipo de plugin é ruim porque demora muito para gerar as páginas (como o Really Static). Se seu site tem uns 2 mil posts ou mais a coisa complica: a geração é interrompida por atingir a memória limite do PHP, ou o MySQL trava, etc… Especialmente em hospedagem compartilhada e servidores com pouca memória. Pelo lado ruim os plugins que geram o site estático também ficariam limitados na questão dos comentários. Acho legal o sistema de comentários próprio do WordPress, ainda que usar outros também possa ser interessante dependendo do site (caso do Facebook ou Disqus).

Em busca do plugin de cache para WordPress perfeito

A solução perfeita para mim é um plugin com estas características:

  • Que gere um cache estático sempre que possível, HTML puro!
  • Que entregue este HTML puro sem passar pelo PHP (isso é fácil com as regras de rewrite no .htaccess, nginx etc)
  • Que permita que o site continue no ar mesmo se o MySQL cair! (com o cache em HTML + rewrite dá certo, pelo menos para as páginas já cacheadas…)
  • Que nunca apague o cache automaticamente, só ao publicar novos posts ou comentários!
  • Que não pese no processamento do servidor! (há plugins que podem consumir muito processamento na geração e verificação do cache…)
  • Que funcione bem tanto em VPS/cloud/dedicado como nas hospedagens vagabundas!
  • Que funcione bem tanto em sites de um autor só, como em sites coletivos!

Note que há casos e casos: coloquei as minhas necessidades para a maioria dos meus blogs. Alguns outros tipos de sites podem se beneficiar com outros plugins, especialmente se você precisa que o cache seja limpo em intervalos regulares ou faça uso excessivo de conteúdo dinâmico.

Nasce aí o MEP WP Cache! WordPress estático em 99%+ do tempo!

Decidi então criar meu próprio plugin, na verdade iniciando com um fork de um plugin já existente: o Cache Enabler da KeyCDN. Foi um dos plugins mais limpos e diretos que encontrei, e simples, o que é bom – os plugins complexos tornariam minhas edições mais difícies, não é de hoje que quero editar o WP Super Cache e vivo enrolando… Obrigado KeyCDN por disponibilizar a base!

Removi as firulas desnecessárias do Cache Enabler, como um serviço de compressão de imagens em WebP (o módulo PageSpeed do Google pode fazer isso de forma mais eficiente) e também a compressão gzip (prefiro deixar isso a cargo dos módulos do servidor web!). E eliminei vários ifs… Tornando o código do plugin ainda mais veloz.

É meu primeiro fork de um plugin do WordPress (não é meu primeiro plugin, já fiz vários para uso próprio, inclusive de proteção do wp-login com senha extra ou captcha que disponibilizarei em breve). Fiz para uso próprio, mas estou disponibilizando a quem interessar, aliás viva o open source!

Depois de debugar e testar em mais sites vou carregá-lo ao diretório de plugins do WordPress. Embora não sei como será meu tempo para mantê-lo depois. Ele é bem simples e direto, o que é bom: é focado e tem menos opções do que os outros.

O MEP WP Cache é bem simples, rápido e com código limpo!

Ele faz o essencial de maneira bela e direta. Há duas possibilidades para o cache e algumas situações variáveis. Se você usar o rewrite, o cache será mais eficiente:

O usuário acessa uma página qualquer do site » Se o arquivo existir na pasta do cache ele é entregue diretamente (processamento de PHP e MySQL = ZERO) » Se o arquivo não existir na pasta do cache a página é montada na hora (será rápido pois o servidor MySQL não estará tão ocupado) e o resultado é gravado no cache » Os próximos visitantes desta página verão a versão em cache!

Como um diferencial, o cache no MEP WP Cache nunca expira sozinho! Se nenhum novo comentário for feito nesta página, o cache estático ficará lá para sempre! Ela vai poupar o trampo do PHP e MySQL durante várias semanas, meses, anos!

Se você não usar o rewrite, beleza: o PHP entregará o arquivo do cache. O desempenho ainda será infinitamente maior do que deixar a entrega pelo meio tradicional, pulando a repetição de todas as consultas no servidor MySQL… Ele basicamente vai ler o txt (.html) e entregar ao visitante.

Se o usuário estiver logado ele vai ver a versão não cacheada, ou seja, gerada em tempo real. É melhor assim para efeitos de comentários (o formulário para usuários logados é diferente) e para sites de membros. Se você é o único autor do blog (e a maioria dos blogs é de um autor só), isto jamais será problema!

Quando o cache será limpo?

Garbage collector e data de expiração é algo que odeio, no caso de cache de site praticamente estático! O cache fica lá quietinho e será servido para sempre, a menos que…

  • … você limpe o cache manualmente;
  • … você troque o tema (template, layout) do site;
  • … um comentário seja feito na página específica.

Por padrão, ao fazer um novo post apenas a página inicial e as relacionadas serão atualizadas – as demais não. Se você usa um menu de posts recentes em todas as páginas do site, isso poderia ser indesejável, né? O mesmo vale para os comentários: ao postar um comentário, por padrão somente a página onde ele foi postado será atualizada no cache.

Para isso há duas opções para limpeza do cache inteiro: dá para configurar para todo o cache ser esvaziado ao fazer um novo post ou quando um novo comentário chegar…

Desta forma os menus de postagens e comentários recentes em todas as páginas serão atualizados – conforme as páginas forem sendo acessadas, elas serão gravadas no cache… E não sairão de lá até que novos comentários ou posts sejam feitos.

Se você tem uma lista de posts recentes em todas as páginas, é bom marcar para apagar o cache quando fizer um novo post.

Se você tem uma lista de comentários recentes em todas as páginas, é bom marcar para apagar o cache quando um novo comentário for feito… Isso será ruim em sites com muitos comentários (centenas por hora): nesse caso o cache não surtirá efeito, já que ficará sendo apagado o tempo todo. Mas se não marcar esta opção, os comentários recentes não aparecerão nas demais páginas… Bem, não recomendo usar o widget de comentários recentes em sites tão movimentados assim. Talvez seria bom você usar outro plugin de cache com tempo de expiração então. Meu plugin é focado mais em sites estáticos mesmo.

Se você precisa que o cache seja limpo regularmente a cada 2 ou 3 horas, por favor, procure outro plugin – o recurso de expiração foi eliminado, pois quero manter as páginas em cache pelo maior tempo possível – podendo ser para sempre em sites de conteúdo estático como tutoriais, FAQs, ajuda, páginas de cursos, etc.

Para quem serve o MEP WP Cache?

Ele não é para todo mundo, mas se você quer um WordPress rápido pra caramba sem frescura, e que não fique limpando o cache de tempos em tempos… Ele pode ser para você!

Sites de um autor só se beneficiam imensamente disso. Após publicar e acessar o post, o cache é gerado, e ele NUNCA SERÁ APAGADO a menos que você troque o tema… Ou limpe o cache manualmente. Ou deixe marcada a opção de apagar o cache todo ao criar um novo post ou quando um comentário for postado (útil se você tiver links para os posts recentes ou comentários recentes nas outras páginas).

As páginas são geradas em cache conforme necessário: assim que são acessadas. A primeira requisição é processada pelo PHP + MySQL, as demais serão entregues rapidamente já que será um arquivo HTML estático, tão leve como um TXT.

Como o backend continua funcionando, os comentários podem ser postados normalmente – as requisições POST não serão cacheadas. Se você usar um sistema de comentários de terceiros, como o Facebook ou Disqus, melhor ainda: as páginas em cache serão bem duradouras, só sendo necessário limpar o cache ao editar o template (tema, layout) ou ao fazer um novo post.

Coisas que o MEP WP Cache não faz

No momento não há função de preload, eu adoraria fazer isso mas ainda não parei para implementar. Isto consome muitos recursos do servidor, em sites com muitos posts fica complicado. Uma saída é fazer um sitemap ou página com todos os links do seu site, e usar o wget no terminal para baixar o site todo… Depois apagar o resultado. Apenas pelo fato das páginas estarem sendo acessadas o cache estará sendo gerado. E como o meu plugin NÃO APAGA O CACHE de tempos em tempos sozinho, as páginas ficarão lá por muito tempo! É quase um site estático de verdade, mas com todo o potencial do WordPress, plataforma que amamos.

Se seu site lida com coisas que envolvem Ajax ou edição em tempo real (como plugins de votação com estrelinhas, etc) este plugin pode não ser o mais recomendável. Você pode configurar certos posts ou páginas para não serem cacheados, isso facilita muito caso você use alguma página com códigos específicos de determinados plugins. Assim todo o restante do site é cacheado, menos as páginas ou posts que você especificar. Neste caso nestas páginas os recursos dinâmicos continuarão funcionando normalmente.

O cache pode ser entregue por PHP, funcionando em vários tipos de hospedagens e servidores web. Todavia, o meio mais eficiente é o cache com rewrite: ele reescreve internamente as URLs, fazendo com que as páginas do site sejam acessadas diretamente da pasta do cache. Isso não passa pelo PHP! O desempenho é espetacular, ainda mais se você usar um servidor otimizado para arquivos, como o Nginx. Aliás tanto o Nginx como o Apache são suportados, eu uso atualmente os dois – estou migrando para o Nginx aos poucos. Já usei o Lighttpd também. Não curto hosts web com Windows e não tenho experiência neles, Windows é melhor para ASP ou .NET. Mas pelo menos o cache via PHP deve funcionar.

Download? Eu quero!

Espere só mais uns dias! Estou testando o plugin em produção em vários dos meus sites. Aparentemente está funcionando que é uma maravilha! Logo logo ele será publicado, grátis e open source!

publicidade
comments powered by Disqus