Tutorial WordPress: como otimizar e aumentar o desempenho do seu blog ou site

Dicas, truques e macetes de como acelerar e turbinar a velocidade de carregamento do seu blog/site em poucos minutos usando os arquivos: .htaccess, wp-config.php, phpMyAdmin e alguns plugins indispensáveis para quem trabalha no mundo encantado dos blogs.

Dica 1: xHTML+CSS válidos, otimizados e limpos

Seu tema/layout pode ser um dos principais vilões para o alto consumo de CPU e para toda a lentidão do seu site. Ao contrário do que parece, é muito simples ajustar o melhor tema para servir seu site baseado em WordPress, para isso basta seguir as seguintes regras básicas:

1.1. Otimize de forma satisfatória todo o seu conteúdo xHTML e CSS. Explico: utilize sempre uma folha de estilo (style.css) simples, compacta e, de preferência, comprimida, com ID e Class empregados da forma correta. Use o CSS Compressor para fazer o trabalho sujo pra você. E aproveitando a oportunidade, faça o mesmo com os arquivos JavaScript.

1.2. Utilize sempre CSS Sprites para suas imagens. Entenda que carregar uma única imagem grande ainda é melhor e mais rápido que carregar várias imagens pequenas, já que neste processo será realizado apenas uma requisição HTTP. Aproveite também para comprimir ao máximo suas imagens sem que elas percam qualidade. Use o Smush.it e seja feliz!

1.3. Por falar em requisições HTTP, fique atento à quantidade delas em cada página, pois quanto mais requisições, mais lento seu site vai carregar. O mesmo serve para as requisições PHP dinâmicas e o uso exagerado de plugins e chamadas externas.

1.4. Quanto aos plugins para WordPress, estabeleça certas prioridades para cada um dos que você usa. Plugins de estatísticas e de popularidade são os campeões em sobrecarregar o banco de dados e aumentar o consumo de CPU, consequentemente.

1.5. Todo mundo sonha em ter um site com design bonito, mas um layout deste tipo geralmente usa muitas imagens, muitos recursos extras e demora segundos eternos para ser carregado. Isso, invariavelmente, afasta os visitantes que vem dos mecanismos de busca que desejam apenas a informação ali contida e não toda a sua elegância e extravagância. Pense um pouco, leia o que o Janio Sarmento escreveu no ViaMãoLotado e veja se é realmente necessário ter um site com tempo de carregamento longo.

Dica 2: Template tags com caminhos absolutos

Ao invés de usar as template tags para requisitar chamadas no banco de dados, substitua-as por caminhos absolutos/estáticos, como por exemplo:

bloginfo('atom_url') // http://dominio.com/feed
bloginfo('charset') // UTF-8
bloginfo('html_type') // text/html
bloginfo('name') // Nome do site
bloginfo('pingback_url') // http://dominio.com/xmlrpc.php
bloginfo('rss2_url') // http://dominio.com/feed
bloginfo('stylesheet_url') // http://dominio.com/wp-content/themes/tema/style.css
bloginfo('template_url') // http://dominio.com/wp-content/themes/tema
bloginfo('url') // http://dominio.com
bloginfo('version') // Versão do WordPress
wp_title() // Título do blog

Dica 3:  Hospedando todas as imagens de seu blog/site em um sub-domínio

Transferindo todas as imagens do seu domínio principal (ex: dominio.com) para um sub-domínio (ex: images.dominio.com) você estará aumentando o poder de carregamento de suas páginas web, já que cada domínio, por padrão, só carrega dois arquivos simultaneamente.

Após criar o sub-domínio, você precisa congigurar o WordPress para que, a partir deste momento, todo upload seja realizado diretamente para images.dominio.com. Para isto, basta ir em Configurações e clicar em Mídia, conforme ilustrado a seguir:

Para as imagens que ainda estão hospedadas no domínio principal, mais precisamente na pasta wp-content/uploads, será necessário realizar uma migração completa, via FTP ou Shell, para o sub-domínio, já que o WordPress não vai mais reconhecer este local. Também será necessário atualizar o novo caminho em todos os posts antigos via phpMyAdmin. Para isso, basta selecionar seu banco de dados no menu lateral e clicar na aba SQL.

Na caixa branca que acabou de aparecer diante de seus olhos, cole o código abaixo e clique em Go (Executar):

UPDATE wp_posts SET post_content = REPLACE(post_content,'http://www.dominio.com/wp-content/uploads/','http://images.dominio.com/')

Agora precisamos atualizar os links da biblioteca de imagens rodando mais um comando SQL, da mesma forma acima, mas com o código abaixo:

UPDATE wp_posts SET guid = REPLACE(guid,'http://www.dominio.com/wp-content/uploads/','http://images.dominio.com/')

Por fim, será necessário avisar ao Google que você trocou o caminho que ele conhecia para chegar até suas imagens. Cole o código abaixo em seu arquivo .htaccess:

RedirectMatch 301 ^/wp-content/uploads/(.*)$ http://images.dominio.com/$1

A dica também é válida para as imagens do seu tema/layout para WordPress. Para isso basta salvar todas no mesmo sub-domínio ou em um outro qualquer de sua escolha.

Aproveite para ler mais dicas sobre CDN no excelente artigo do J. Noronha n’O Fim da Várzea.

Dica 4: Configurando corretamente o plugin WP Super Cache

Apesar de existir vários outros plugins para cache, o mais comum, o mais tradicional e o mais eficaz é, sem dúvida, o WP Super Cache. Abaixo seguem alguns hacks úteis para ajustar o melhor desempenho desta poderosa ferramenta:

4.1. Na página de configuração, ative a opção ON WP Cache and Super Cache enabled.

4.2. Logo abaixo, marque a caixa Cache Rebuild.

4.3. Em Preload Cache, marque a caixa Preload mode.

4.4. Habilite a opção Super Cache Compression.

4.5. Em Expiry Time & Garbage Collection ajuste o tempo para 1800 segundos.

4.6. Pronto!

Dica 5: Criando cache para o MySQL com o DB Cache Reloaded

Mais uma dica valiosa do Janio da PortoFácil.net é o uso do plugin DB Cache Reloaded para ajudar o seu banco de dados respirar mais aliviado nos horários de pico. Até suas técnicas SEO vão agradecer!

Dica 6: Troque o Apache pelo Nginx

O servidor web Apache sempre tem crise de soluços justamente na hora que os blogs e sites mais precisam dele. Uma solução rápida seria usar o Nginx, o mais rápido, robusto e leve web server disponível hoje no mercado.

Dica 7: Otimizando o arquivo wp-config.php

Apesar de pouco difundido, outra forma de aumentar o desempenho ou a velocidade de carregamento de um blog/site é adicionando as famosas configurações extras no arquivo wp-config.php, pois desta forma as várias requisições que o WordPress faz no banco de dados já ficam pré-carregadas, diminuindo o uso desnecessário dos recursos vitais do sistema.

Para começarmos, abra o seu wp-config.php no editor de sua preferência e adicione os itens:

7.1. Endereço do blog

define('WP_HOME', 'http://dominio.com');

7.2. Endereço do site

define('WP_SITEURL', 'http://dominio.com');

7.3. Caminho direto para o tema

define('TEMPLATEPATH', '/absolute/path/to/wp-content/themes/active-theme');

7.4. Caminho direto para o style.css

define('STYLESHEETPATH', '/absolute/path/to/wp-content/themes/active-theme');

7.5. Configurar número de revisões de artigos para cada post

define('WP_POST_REVISIONS', 3); // 3 é a variável

7.6. Desabilitar a revisão de artigos

define('WP_POST_REVISIONS', false);

6.7. Configurar tempo dos salvamentos automáticos

define('AUTOSAVE_INTERVAL', 300); // em segundos

7.8. Habilitar o cache

define('WP_CACHE', true);
define('ENABLE_CACHE', true);

7.9. Configurar tempo de expiração do cache

define('CACHE_EXPIRATION_TIME', 1800); // em segundos

7.10. Desabilitar o cache

define('WP_CACHE', false);
define('DISABLE_CACHE', true);

Dica 8: Dando poderes ao arquivo .htaccess

O .htaccess, com certeza, é um dos arquivos essenciais para melhorar o desempenho do seu blog/site de forma satisfatória. E se for utilizado junto com todas as dicas presentes neste tutorial (guia ilustrado), você terá o prazer de ver o seu site voando.

8.1. Pré-ativando o cache

# BEGIN Expire headers
  ExpiresActive On
  ExpiresDefault "access plus 1 seconds"
  ExpiresByType image/x-icon "access plus 2592000 seconds"
  ExpiresByType image/jpeg "access plus 2592000 seconds"
  ExpiresByType image/png "access plus 2592000 seconds"
  ExpiresByType image/gif "access plus 2592000 seconds"
  ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
  ExpiresByType text/css "access plus 604800 seconds"
  ExpiresByType text/javascript "access plus 216000 seconds"
  ExpiresByType application/x-javascript "access plus 216000 seconds"
  ExpiresByType text/html "access plus 600 seconds"
  ExpiresByType application/xhtml+xml "access plus 600 seconds"
# END Expire headers

8.2. Ativar compressão GZIP em arquivos de texto, HTML, CSS, JS e PHP

  mod_gzip_on Yes
  mod_gzip_dechunk Yes
  mod_gzip_item_include file \.(html?|txt|css|js|php)$
  mod_gzip_item_include handler ^cgi-script$
  mod_gzip_item_include mime ^text/.*
  mod_gzip_item_include mime ^application/x-javascript.*
  mod_gzip_item_exclude mime ^image/.*
  mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*

8.3. Combinando o cache com a compressão GZIP

# BEGIN Compress text files
	SetOutputFilter DEFLATE
# END Compress text files

# BEGIN Expire headers
  ExpiresActive On
  ExpiresDefault "access plus 1 seconds"
  ExpiresByType image/x-icon "access plus 2592000 seconds"
  ExpiresByType image/jpeg "access plus 2592000 seconds"
  ExpiresByType image/png "access plus 2592000 seconds"
  ExpiresByType image/gif "access plus 2592000 seconds"
  ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
  ExpiresByType text/css "access plus 604800 seconds"
  ExpiresByType text/javascript "access plus 216000 seconds"
  ExpiresByType application/x-javascript "access plus 216000 seconds"
  ExpiresByType text/html "access plus 600 seconds"
  ExpiresByType application/xhtml+xml "access plus 600 seconds"
# END Expire headers

# BEGIN Cache-Control Headers
  Header set Cache-Control "max-age=2592000, public"
  Header set Cache-Control "max-age=604800, public"
  Header set Cache-Control "max-age=216000, private"
  Header set Cache-Control "max-age=600, private, must-revalidate"
# END Cache-Control Headers

# BEGIN Turn ETags Off
  Header unset ETag
  FileETag None
# END Turn ETags Off

# BEGIN Remove Last-Modified Header
  Header unset Last-Modified
# END Remove Last-Modified Header

8.4. Bloqueando Hotlinks e Leechers com mod_rewrite

A dica abaixo é do Gilberto Knuttz do Cybervida e é essencial para aqueles que não aguentam mais serem vítimas de hotlinks e leechers folgados.

RewriteEngine on
# Tem gente que bloqueia o envio do header, de repente é alguém legitimo!
  RewriteCond %{HTTP_REFERER} !^$ [NC]
 
# Liberando os domínios que você permite compartilhar imagens
  RewriteCond %{HTTP_REFERER} !^http://(www.)?SEU_DOMINIO/.*$      [NC]
 
# Vamos deixar que apenas o feedburner do SEU blog veja as imagens
  RewriteCond %{HTTP_REFERER} !^http://(www.)?feeds.feedburner.com/SEU_USUARIO.*$      [NC]
  RewriteCond %{HTTP_REFERER} !^http://(www.)?feedburner.com/SEU_USUARIO.*$      [NC]
 
# Aqui os leitores mais populares de feed - infelizmente nos feeds dos leechers suas imagens aparecerão
  RewriteCond %{HTTP_REFERER} !^http://(www.)?google.com/reader/.*$      [NC]
  RewriteCond %{HTTP_REFERER} !^http://(www.)?e.my.yahoo.com/.*$      [NC]
  RewriteCond %{HTTP_REFERER} !^http://(www.)?bloglines.com.*$      [NC]
  RewriteCond %{HTTP_REFERER} !^http://(www.)?netvibes.com.*$      [NC]
  RewriteCond %{HTTP_REFERER} !^http://(www.)?newsgator.com.*$      [NC]
 
# Edereço da imagem pela qual você quer substituir
  RewriteRule .*.(jpg|jpeg|gif|png|bmp)$ http://ENDEREÇO_COMPLETO_DA_SUA_IMAGEM [R,NC]

8.5. Desabilitar navegação por pastas e diretórios via browsers

# Disable directory browsing
  Options All -Indexes

Dica 9: Otimizando a instalação do WordPress via WP-DBManager (phpMyAdmin)

Outra forma eficaz de melhorar o desempenho do seu banco de dados é fazer a reparação e a otimização de todas as tabelas nele contidas. A seguir vou mostrar como realizar este processo usando o plugin WP-DBManager. Veja os passos:

9.1. Faça download do WP-DBManager e ative-o.
9.2. No menu Database, selecione Repair DB e clique em reparar.
9.3. Selecione agora o menu Optimize DB e clique em otimizar.
9.4. Pronto!

Dica 10: Escolha uma hospedagem decente e competente

Hospedagem tem aos montes por aí. Mas aquela que lhe estende a mão e te dá todo o tipo de suporte necessário, pode contar nos dedos.

Sou suspeito pra falar e indicar, já que sou cliente – e amigo – do Janio Sarmento, mas pra mim a PortoFácil é a mais completa hospedagem de servidores dedicados e virtuais disponível hoje no mercado brasileiro. Outra opção excelente para hospedagem compartilhada é a ViaHospedagem do também amigo Daniel Becher.

9 comentários

  1. Tweets that mention Tutorial WordPress: como otimizar e aumentar o desempenho do seu blog ou site – celsojunior.net — Topsy.com

    Publicado em 14/07/2010 às 13:28 [+]

    [...] This post was mentioned on Twitter by Nick Ellis, Pedro Villalobos, J. Sarmento OFICIAL and others. J. Sarmento OFICIAL said: Lembram quando eu disse que meu tutorial definitivo estava longe de ser definitivo? Então… http://j.mp/bG16KN [...]

  2. Tutorial WordPress: como otimizar e aumentar o desempenho do seu blog ou site

    Publicado em 14/07/2010 às 15:57 [+]

    [...] post: Tutorial WordPress: como otimizar e aumentar o desempenho do seu blog ou site [...]

  3. wp-popular.com » Blog Archive » Tutorial WordPress: como otimizar e aumentar o desempenho do seu blog ou site – celsojunior.net

    Publicado em 14/07/2010 às 21:38 [+]

    [...] Continue reading here: Tutorial WordPress: como otimizar e aumentar o desempenho do seu blog ou site – celsojunior.ne… [...]

  4. Lauro Adriano | ZackShinra

    Publicado em 23/07/2010 às 12:24 [+]

    Muito bom, não deu para fazer todas as dicas pois uso o sistema multi sites do WordPress. Mas deu para implementar muita coisa.
    Obrigado.

  5. Eder

    Publicado em 23/10/2010 às 12:57 [+]

    Olá Celso. Parabéns pelo post. Muito bom. Dei uma reviada nas minhas configuações. Apenas um passo me deixou na dúvida.

    Na configuração do wp-config, você habilitou o cache: (‘WP_CACHE’, true); e apó suma linha desabilitou novamente.

    É isso mesmo?
    Obrigado.

    Um abraço.

  6. celsojunior

    Publicado em 27/10/2010 às 14:51 [+]

    Oi, Eder!

    Ali eu só estava ensinando como habilitar e desabilitar o cache. A maioria das pessoas gostam de trabalhar com cache, mas alguns ainda preferem sem cache.

    Abraço.

  7. Leonardo Rodrigues

    Publicado em 25/05/2011 às 13:31 [+]

    Celso, como gerencio meu site (xhtml+css+jquery) utilizando o wordpress???

  8. Abner SS

    Publicado em 24/12/2011 às 15:55 [+]

    Nossa muito bom me ajudou muito a melhorar a velocidade do meu site!

  9. Sílvio

    Publicado em 05/05/2012 às 17:59 [+]

    Sou leigo em códigos e a dica dos MySQL foi exatamente o que eu precisava para outra necessidade..
    Obrigado a toda a equipe

Compartilhe suas ideias! Deixe um comentário...

Comment moderation is enabled. Your comment may take some time to appear.