Como Reduzir o Tempo de Carregamento de seu Blog WordPress
O presente artigo traz um aprofundamento das ideias anteriormente discutidas em Receita de Blog Otimizado ao Extremo, com o objetivo de ampliar o entendimento sobre as implicações de um site lento e como resolver este tipo de problema.
Índice de Tópicos
Otimizando o blog
Você já sabe, de ler o artigo anterior, que deve:
- eliminar os plugins desnecessários do blog;
- “terceirizar” os comentários (e bloquear o acesso ao script
wp-comment-post.php
); - fazer cache de widgets, de banco de dados e objetos;
- fazer uso de widgets em vez de programar as funcionalidades diretamente no arquivo
sidebar.php
do tema.
Isso posto, o mais importante a se ter em mente em termos de otimização do WordPress é utilizar os caches corretamente.
A importância do cache
Hoje um amigo me disse que não usa cache (que as pessoas insistem em chamar de cachê — isto é o pagamento que um artista recebe depois de fazer uma apresentação) porque este só traz benefício aos visitantes recorrentes, e nunca aos visitantes esporádicos (ou “paraquedistas”). Crasso engano.
Não que meu amigo esteja totalmente enganado: cache de navegador realmente só beneficia o visitante a partir da sua segunda visita (ou visualização de página). Mas não é disso que estamos falando, e sim de caches no servidor.
Para entender a importância do cache de páginas (e o princípio é o mesmo para banco de dados e para widgets) basta pensar que por maior que seja um blog, apenas um subconjunto de suas páginas será visitado com bastante frequência, as demais vão servir apenas para saciar a fome do Googlebot.
Se o blog não tiver cache de páginas, cada vez que um paraquedista chegar o WordPress vai ter que executar todo o seu mecanismo para buscar os dados do banco de dados, executar os plugins, formatar, e só então gerar o HTML que vai ser entregue para o navegador.
Já num cenário de blog com cache de páginas apenas o primeiro visitante numa determinada URL será penalizado com a demora: as visitas seguintes serão muito mais rápidas porque o servidor não precisará mais “chamar” o WordPress para gerar o código HTML correto, ele apenas vai ler um arquivo (que pode estar em RAM, para maior velocidade ainda) e entregá-lo diretamente para visitante.
Em outras palavras, todo mundo deveria receber o mesmo conteúdo ao acessar uma mesma URL (embora haja quem entregue ao Googlebot um conteúdo diferente, são outros quinhentos totalmente fora do escopo deste artigo). Logo, não faz sentido obrigar o reprocessamento constante da mesma informação para obter o mesmo resultado!
No caso do Nginx é possível fazer cache de páginas sem nem usar plugin algum no WordPress (é o que se chama de FastCGI cache).
Caches de páginas
Existem muitas opções de plugins de cache para o WordPress. Até o presente momento, os melhores são o WP Super Cache e o W3 Total Cache.
Particularmente, gosto mais do WPSC, porque ele é mais leve e mais simples; o W3TC já é mais inchado, tem muitas funcionalidades que acabam tornando-o difícil de configurar, e em alguns casos o excesso pode até tornar o blog mais lento do que sem cache nenhum (basta que se ative o recurso de popular automaticamente o cache para criar lentidão como se não houvesse amanhã).
Entretanto, apesar do meu gosto pessoal, tenho usado mais o W3TC em meus sites (e em sites de clientes) do que o WPSC porque este não tem suporte ao Memcached, que permite que partes do cache sejam salvas diretamente na memória RAM do servidor.
Seja qual for a sua escolha, o importante é que o plugin de cache de páginas seja corretamente configurado para usar o modo “mod_rewrite” do WPSC ou “Enhanced Disk Cache”.
Caches de banco de dados e de objetos
Caso esteja usando o W3TC e seu servidor tenha Memcached instalado, aproveite para configurar o cache de objetos e o cache de objetos no modo Memcached (dã!).
Se você tiver escolhido o WPSC precisará de plugins adicionais para cache de objetos (não recomendo nenhum) e de banco de dados (sugiro mas não recomendo o DB Cache Reloaded Fix — é importante atentar para o nome completo do plugin, porque o “Fix” é o único que funciona).
Digo que sugiro mas não recomendo o DB Cache Reloaded fix porque dependendo do hardware em que o site roda é melhor ficar só com os caches do sistema operacional do que fazer cache extra em disco. Caberá a você a terafa de experimentar e decidir pelo uso ou não.
Caches de widgets
Um dos pontos importantes mais negligenciados por todo mundo que administra blogs WordPress é o cache de widgets.
Inclusive há quem ache que é melhor programar as funcionalidades que deveriam estar nos widgets diretamente no arquivo sidebar.php
do tema.
Na verdade, os widgets são desejáveis, principalmente porque podemos adicionar cache a eles, com o plugin WP Widget Cache (não gosto de bancar o Capitão Óbvio mas às vezes é inevitável).
Depois de ativar o plugin, cada widget vai passar a contar com uma seção extra com opções de configuração, conforme pode ser visto na imagem abaixo.

A primeira configuração é o tempo de vida do cache daquele widget em específico. Minhas regras para definir este tempo são:
- informações estáticas (como widgets de texto) são configuradas com um longo tempo de cache, algo como 300s (5min);
- informações dinâmicas em geral ficam com um cache de 60s;
- widgets relacionados a posts, categorias, tags ou comentários ganham cache de 5min também, mas marco as caixinhas que indicam que tipo de evento deve esvaziar imediatamente este cache.
Já vi casos em que a diferença de tempo de carregamento de uma página com e sem cache de widgets chegou a 4s (o que é uma eternidade, convenhamos).
Encolhimento (minify) de código
Outra recomendação constante para acelerar os sites é que se encolham os códigos CSS, JavaScript e HTML das páginas — o que se popularizou sob o nome em Inglês de “minify.”
Não recomendo que se faça minify via plugin mas sim diretamente no servidor com o ModPageSpeed (mais detalhes abaixo).
Deixe as imagens para depois
Se você nunca ouviu falar em “lazy load” de imagens, dê um pulinho no Google para instruir-se e volte aqui.
Agora, instale um plugin de “lazy load” no seu blog, aquele mesmo cujas imagens você não otimiza, e veja o tempo de carga das páginas diminuir drasticamente.
Há vários plugins que fazem a mesma coisa, mas há diferenças sutis entre eles. Experimente e caso não encontre um adequado para o seu site já na primeira vez, por favor, tente outros. Seus visitantes (e o PageSpeed Insight) vão apreciar muito.
Otimizando o servidor
Do que falamos no artigo anterior, citado no início desta página, você lembra que deve:
- sempre que possível usar o HHVM em vez do PHP (dica: existem serviços especializados de hospedagem de WordPress usando HHVM);
- preferir o Nginx no lugar do Apache;
- fazer caches de páginas em RAM.
SSD > HDD > NFS
Hoje em dia há três tecnologias disponíveis para o sistema de arquivos do servidor: SSD (dispositivos de estado sólido, os mais rápidos e mais caros), HDD (os “agadês” comuns, discos rígidos tradicionais) e o NFS (acrônimo para “Network File System,” ou sistema de arquivo de redes).
O NFS (ou variações dele) é utilizado em servidores do tipo cloud; não são dispositivos físicos de rede, e sim lógicos; seu desempenho pode variar do péssimo ao maravilhoso, e por via das dúvidas eu não gosto dele.
Entre SSD e HDD vale a métrica do custo×benefício: se você não necessitar de espaço massivo para seus arquivos, a eficiência do SSD vai se sobressair.
Nem sempre é possível fazer esse tipo de escolha quando se está numa hospedagem compartilhada. Nesse caso, certifique-se de estar usando uma hospedagem compartilhada de excelente qualidade.
Deixe o servidor fazer o seu trabalho
Acima falei que não recomendo que o encolhimento de código seja feito por nenhum tipo de plugin. Isso porque o ModPageSpeed é muito, muito melhor na tarefa de encolher arquivos e compactá-los do que qualquer código escrito em PHP (por melhor e mais lindo que seja).
Acelerador HTTP
O Apache é um excelente servidor web: robusto, estável, maduro, e praticamente onipresente na Internet.
Entretanto, softwares mais novos (como o Nginx) são muito mais eficientes e rápidos, demandando menos hardware para entregar resultados melhores e mais rápidos.
Caso você precise muito do Apache, e não possa abrir mão dele, então deverá considerar a instalação de um acelerador HTTP na frente do Apache. Pode ser o Nginx ou pode ser o Varnish.
Cada caso é um caso, e é impossível dizer que uma configuração é melhor que a outra. Em linhas gerais, contudo, o Varnish vai fazer um melhor trabalho de acelerador HTTP pelo simples motivo de que foi projetado para esta tarefa exclusivamente.
Bônus: melhorando o cache de navegador
Um fator que vai melhorar a “nota” do site no PageSpeed Insight é a utilização de cache de arquivos estáticos melhorada.
Há plugins que prometem adequar o WordPress para atender esta necessidade, mas estes nada mais são do que interfaces que salvam algumas linhas no .htaccess
do blog (logo nem servindo para quem tem seu blog rodando no Nginx).
Você não precisa de nenhum plugin para isso. Só precisa adicionar as linhas abaixo no .htaccess
manualmente, de preferência no topo do arquivo, antes de qualquer outra regra (do cache ou de reescrita do próprio WP):
## EXPIRES CACHING ## <IfModule mod_expires.c> ExpiresActive On ExpiresByType image/jpg "access 1 year" ExpiresByType image/jpeg "access 1 year" ExpiresByType image/gif "access 1 year" ExpiresByType image/png "access 1 year" ExpiresByType text/css "access 1 month" ExpiresByType application/pdf "access 1 month" ExpiresByType text/x-javascript "access 1 month" ExpiresByType application/x-shockwave-flash "access 1 month" ExpiresByType image/x-icon "access 1 year" ExpiresDefault "access 2 days" </IfModule> ## EXPIRES CACHING ##
No Nginx o mesmo efeito pode ser adquirido com o código abaixo (que deve ser inserido dentro da diretiva server
do seu blog, se não tiver certeza do que está fazendo procure o suporte técnico):
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; } location ~* \.(pdf)$ { expires 30d; }
Hospedagem Especializada
Talvez você não queira ter de sujar as mãos em todos esses detalhes técnicos. Ou talvez não seja a sua área de atuação exatamente.
Neste caso, tenho a solução ideal: a Hospedagem HHVM contempla todos estes ítens, e conta com o atendimento especializado mais personalizado que você vai encontrar do lado de cá do Universo conhecido.