SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
Melhorando o desempenho
do seu WordPress
WordCamp Porto Alegre 2015
Tiago Hillebrandt
● Lead Developer na Copyblogger Media LLC
● Trabalha diariamente em uma estrutura com mais de 12.000 instalações
WordPress
● Colaborador de diversas comunidades de Software Livre, como Ubuntu,
WP-CLI, Bash, dentre outras
Servidor
● Softwares atualizados
● NGINX (com módulo HTTP/2)
● Compressão gzip
● W3 Total Cache
● CDN
● WordPress Scheduled Events
Servidor: Softwares atualizados
● Mantenha seus softwares atualizados!
● NGINX:
○ Versão nos repositórios do Ubuntu 12.04 LTS: 1.1.19
○ Versão nos repositórios do Ubuntu 14.04 LTS: 1.4.6
○ Mainline version: 1.9.6
● PHP:
○ Versão nos repositórios do Ubuntu 12.04 LTS: 5.3.10
○ Mainline version: 5.6.14
Servidor: NGINX
● Servidor web de alta performance (algoritmo de manipulação de conexões
diferenciado)
● Em conjunto com o FastCGI, é uma excelente opção (senão a melhor) para
execução do WordPress
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
Servidor: NGINX com módulo SPDY HTTP/2
● Suporte adicionado ao NGINX 1.9.5
● Aplicável somente em sites com certificado SSL (HTTPS)
server {
listen 443 ssl http2;
Servidor: Vantagens do HTTP/2
● Protocolo binário (mais compacto e eficiente)
● Conexão multiplexada por domínio
● Cabeçalhos compactados com o formato HPACK (mais efetivo que o gzip)
● Esquema que ajuda os navegadores a priorizarem os "arquivos mais
necessários" (mais efetivo do que o esquema usado no SPDY)
Fonte: NGINX Inc
Servidor: NGINX com módulo HTTP/2
Fonte: NGINX Inc
Servidor: Compressão gzip
● Módulo gzip do NGINX
● Compacta as respostas do servidor, resultando na redução de 50% ou
mais no tamanho da resposta
● Após habilitar, você pode utilizar o GTmetrix para confirmar se a
compressão gzip está funcionando adequadamente: https://gtmetrix.
com/
● Se seu site já está rodando via HTTP/2, não utilize o gzip, uma vez que o
HPACK é mais efetivo
Servidor: Compressão gzip
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_comp_level 3;
gzip_min_length 1000;
gzip_buffers 32 4k; # ( $ getconf PAGESIZE )
gzip_types text/plain text/css text/javascript;
Servidor: W3 Total Cache
● Excelente plugin de cache, disponível no repositório do WordPress
gratuitamente
● Hoje o W3TC é usado em mais de um milhão de instalações WordPress
● Métodos de caching recomendados:
○ Page caching (disk, opcode ou memcached)
○ Browser caching
○ Object caching
Servidor: W3TC Page Cache
● Cache baseado em URLs
● No primeiro acesso a determinada URL, um arquivo estático com o
conteúdo é criado dentro do cache
● Os próximos acessos para mesma URL são carregados do cache,
reduzindo o uso de recursos do PHP e MySQL
● Cache pode ser armazenado em disco ou na memória
Servidor: W3TC Page Cache
● Os métodos OpCode e Memcached tendem a ser mais rápidos, pois o
cache carregará diretamente da memória. Portanto, são uma boa opção
se você dispor de bastante memória para dedicar à eles
● Já os métodos Disk, apesar de serem um pouco mais lentos, podem se
tornar mais viáveis em servidores compartilhados ou VPSs com pouca
memória dispon ́vel, ou ainda caso queira poupar memória para processar
outras informações
● Se ainda assim está na dúvida de qual escolher, você pode testar a
performance do seu site método-por-método
Servidor: W3TC Browser Cache
● É o cache presente nos navegadores web
● No W3TC é poss ́vel determinar, por exemplo, quanto tempo as imagens,
arquivos JS, CSS, HTML, dentre outros, serão cacheadas no navegador do
usuário
● Permite a compressão dos cabeçalhos HTTP via gzip
Servidor: W3TC Object Cache
● O WordPress possui uma classe de Object Cache, no entanto ela não é
persistente
● Em outras palavras, a informação carregada é mantida na memória
somente até o fim da requisição atual
Servidor: W3TC Object Cache
● No W3TC, o Object Cache armazena uma cópia do objeto, seus atributos e
valores em formato JSON
● Além disso, a informação passa a ser mantida de forma permanente, pois
não é perdida ao término da requisição
● É poss ́vel determinar um intervalo para limpeza do cache, bem como uma
lista de objetos que não devem ser cacheados
Servidor: CDN
● Indicado para quem recebe tráfego de diversas localizações
(geograficamente distribu ́do)
● Reduz o uso de largura de banda do servidor onde seu site está
hospedado
● Serviços de CDN recomendados:
○ Amazon CloudFront
■ 2 datacenters no Brasil, custo variável por mês (on-demand)
○ CloudFlare
■ 1 datacenter no Brasil, custo fixo por mês
WordPress Scheduled Events
● São ações programadas para serem executadas automaticamente pelo
WordPress
● Exemplo:
○ Posts agendados
○ Exclusão de transients expirados da wp_options
○ Verificação de updates do WordPress core, temas e plugins
WordPress Scheduled Events
● Por padrão ele rodará apenas se sua página tiver acessos, portanto um
método não muito confiável
● Carrega em todos os acessos ao site, e caso um evento agendado trave o
acesso pode ficar consideravelmente lento
● Pode ser implementado no crontab do seu servidor, um método muito
confiável
WordPress Scheduled Events
● Adicione ao seu wp-config.php:
define( 'DISABLE_WP_CRON', true );
● Adicione ao crontab:
*/10 * * * * www-data wget -o /dev/null -O /dev/null http://dominio.com/wp-cron.php
Desenvolvimento
● WordPress Transients API
● WordPress Options API
Dev: Transients API
● Armazenamento temporário de dados (cache)
● Normalmente usados para fazer cache de resultados de funções PHP e
queries MySQL
● Os transients possuem tempo de expiração, e são carregados
automaticamente pelo WordPress a cada requisição
● Problema comum entre plugins e temas mal codificados: criação de um
número excessivo de transients, ou ainda armazenamento de valores
muito grandes dentro deles
Dev: Transients API
Dever de casa: limpar os transients em seus sites WordPress
Comando SQL:
DELETE FROM wp_options
WHERE option_name REGEXP '^(_site)?_transient';
Ou via WP-CLI:
$ wp transient delete-all
Dev: Options API
● As options são utilizadas para armazenamento permanente de dados
● Quando você cria uma option, você pode definir se ela será carregada
automaticamente ou não por meio do campo autoload
● As autoloaded options são carregadas automaticamente pelo WordPress a
cada requisição
● Temos um problema comum entre plugins e temas mal codificados:
criação de um número excessivo de autoloaded options, ou ainda
armazenamento de valores muito grandes dentro delas
Dev: Options API
● Detectar a quantidade e o tamanho total das autoloaded options:
SELECT COUNT(*) AS total, ROUND(SUM(LENGTH(option_value)) / POWER
(1024, 2), 2) AS tamanho FROM wp_options WHERE autoload='yes';
Dev: Options API - Query 1
● Detectar as options com maior tamanho:
SELECT option_name, ROUND(LENGTH
(option_value) / POWER(1024, 2), 2) AS
tamanho FROM wp_options WHERE
autoload='yes' ORDER BY tamanho DESC
LIMIT 0, 15;
Dev: Options API - Query 2
● Detectar as options com prefixos similares:
SELECT SUBSTRING(option_name, 1, 16) AS prefixo,
COUNT(*) AS total FROM wp_options GROUP BY SUBSTRING
(option_name, 1, 8) ORDER BY total DESC LIMIT 0, 15;
WP-Healthcheck
● Plugin em desenvolvimento, com previsão de lançamento em Novembro
● Versão inicial contará com suporte a três idiomas, incluindo Português do
Brasil
Dúvidas?
Twitter: @tiagoscd
Website: http://tiagohillebrandt.eti.br

Mais conteúdo relacionado

Mais procurados

pfSense - Proxy com arquivo arquivo pac e wpad
pfSense - Proxy com arquivo arquivo pac e wpadpfSense - Proxy com arquivo arquivo pac e wpad
pfSense - Proxy com arquivo arquivo pac e wpadCavalcante Treinamentos
 
Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Felipe Klerk Signorini
 
Tunando sua aplicação LNMP
Tunando sua aplicação LNMPTunando sua aplicação LNMP
Tunando sua aplicação LNMPLeandro Mendes
 
Implementação de Servidor Linux Ubuntu Server
Implementação de Servidor Linux Ubuntu ServerImplementação de Servidor Linux Ubuntu Server
Implementação de Servidor Linux Ubuntu ServerTiago Bezerra Dos Santos
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...Renato Groff
 
TDC2018SP | Trilha Containers - Docker Swarm - Os problemas
TDC2018SP | Trilha Containers - Docker Swarm - Os problemasTDC2018SP | Trilha Containers - Docker Swarm - Os problemas
TDC2018SP | Trilha Containers - Docker Swarm - Os problemastdc-globalcode
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...Renato Groff
 
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...Renato Groff
 
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Renato Groff
 
Estendendo o kubernetes
Estendendo o kubernetesEstendendo o kubernetes
Estendendo o kubernetesRicardo Katz
 
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018Renato Groff
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018Renato Groff
 
Containers PostgreSQL com a Crunchy Container Suite
Containers PostgreSQL com a Crunchy Container SuiteContainers PostgreSQL com a Crunchy Container Suite
Containers PostgreSQL com a Crunchy Container SuiteRoberto Mello
 
Para ontem: carregando sites mais rapidamente
Para ontem: carregando sites mais rapidamentePara ontem: carregando sites mais rapidamente
Para ontem: carregando sites mais rapidamenteThiago Ayub
 
Aumente a velocidade de seu site com o Varnish: Proxy cache para sites com co...
Aumente a velocidade de seu site com o Varnish: Proxy cache para sites com co...Aumente a velocidade de seu site com o Varnish: Proxy cache para sites com co...
Aumente a velocidade de seu site com o Varnish: Proxy cache para sites com co...Marcelo Dieder
 

Mais procurados (19)

pfSense - Proxy com arquivo arquivo pac e wpad
pfSense - Proxy com arquivo arquivo pac e wpadpfSense - Proxy com arquivo arquivo pac e wpad
pfSense - Proxy com arquivo arquivo pac e wpad
 
Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016
 
Tunando sua aplicação LNMP
Tunando sua aplicação LNMPTunando sua aplicação LNMP
Tunando sua aplicação LNMP
 
Implementação de Servidor Linux Ubuntu Server
Implementação de Servidor Linux Ubuntu ServerImplementação de Servidor Linux Ubuntu Server
Implementação de Servidor Linux Ubuntu Server
 
Apache kafka
Apache kafkaApache kafka
Apache kafka
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
 
TDC2018SP | Trilha Containers - Docker Swarm - Os problemas
TDC2018SP | Trilha Containers - Docker Swarm - Os problemasTDC2018SP | Trilha Containers - Docker Swarm - Os problemas
TDC2018SP | Trilha Containers - Docker Swarm - Os problemas
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
 
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...
 
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
 
Estendendo o kubernetes
Estendendo o kubernetesEstendendo o kubernetes
Estendendo o kubernetes
 
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
 
Containers PostgreSQL com a Crunchy Container Suite
Containers PostgreSQL com a Crunchy Container SuiteContainers PostgreSQL com a Crunchy Container Suite
Containers PostgreSQL com a Crunchy Container Suite
 
Memcached
MemcachedMemcached
Memcached
 
Servidor Proxy Squid
Servidor Proxy SquidServidor Proxy Squid
Servidor Proxy Squid
 
Conceitos Basicos e Docker - Java Noroeste
Conceitos Basicos e Docker - Java NoroesteConceitos Basicos e Docker - Java Noroeste
Conceitos Basicos e Docker - Java Noroeste
 
Para ontem: carregando sites mais rapidamente
Para ontem: carregando sites mais rapidamentePara ontem: carregando sites mais rapidamente
Para ontem: carregando sites mais rapidamente
 
Aumente a velocidade de seu site com o Varnish: Proxy cache para sites com co...
Aumente a velocidade de seu site com o Varnish: Proxy cache para sites com co...Aumente a velocidade de seu site com o Varnish: Proxy cache para sites com co...
Aumente a velocidade de seu site com o Varnish: Proxy cache para sites com co...
 

Semelhante a Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]

Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]
Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]
Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]Tiago Hillebrandt
 
Melhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressMelhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressJulian Fernandes
 
Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Marcelo Dieder
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresDouglas V. Pasqua
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 
Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneosFernando Ike
 
Web Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+ApacheWeb Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+ApacheDell Technologies
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo realEvandro Silvestre
 
NGiNX, o motor da sua aplicação web
NGiNX, o motor da sua aplicação webNGiNX, o motor da sua aplicação web
NGiNX, o motor da sua aplicação webernaniaz
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScriptCarlos Santos
 
Faça seu portal voar usando o plone.app.caching
Faça seu portal voar usando o plone.app.cachingFaça seu portal voar usando o plone.app.caching
Faça seu portal voar usando o plone.app.cachingFabiano Weimar
 
Linux Servidor Proxy(squid)
Linux Servidor Proxy(squid)Linux Servidor Proxy(squid)
Linux Servidor Proxy(squid)elliando dias
 
Soluções de Web Caching e Web Acceleration - Domingos Parra Novo
Soluções de Web Caching e Web Acceleration - Domingos Parra NovoSoluções de Web Caching e Web Acceleration - Domingos Parra Novo
Soluções de Web Caching e Web Acceleration - Domingos Parra NovoTchelinux
 
19-Sistemas Distribuidos.pptx
19-Sistemas Distribuidos.pptx19-Sistemas Distribuidos.pptx
19-Sistemas Distribuidos.pptxRoberto Aragy
 
REST - The right way
REST - The right wayREST - The right way
REST - The right waysantosluis87
 
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressFerramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressTiago Hillebrandt
 

Semelhante a Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015] (20)

Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]
Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]
Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]
 
Melhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressMelhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPress
 
Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedores
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneos
 
Web seminario varnish
Web seminario varnishWeb seminario varnish
Web seminario varnish
 
Web Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+ApacheWeb Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+Apache
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo real
 
NGiNX, o motor da sua aplicação web
NGiNX, o motor da sua aplicação webNGiNX, o motor da sua aplicação web
NGiNX, o motor da sua aplicação web
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript
 
Faça seu portal voar usando o plone.app.caching
Faça seu portal voar usando o plone.app.cachingFaça seu portal voar usando o plone.app.caching
Faça seu portal voar usando o plone.app.caching
 
Vamos conversar sobre cache
Vamos conversar sobre cacheVamos conversar sobre cache
Vamos conversar sobre cache
 
Linux Servidor Proxy(squid)
Linux Servidor Proxy(squid)Linux Servidor Proxy(squid)
Linux Servidor Proxy(squid)
 
Wordpress
WordpressWordpress
Wordpress
 
Soluções de Web Caching e Web Acceleration - Domingos Parra Novo
Soluções de Web Caching e Web Acceleration - Domingos Parra NovoSoluções de Web Caching e Web Acceleration - Domingos Parra Novo
Soluções de Web Caching e Web Acceleration - Domingos Parra Novo
 
19-Sistemas Distribuidos.pptx
19-Sistemas Distribuidos.pptx19-Sistemas Distribuidos.pptx
19-Sistemas Distribuidos.pptx
 
REST - The right way
REST - The right wayREST - The right way
REST - The right way
 
Python CGI
Python CGIPython CGI
Python CGI
 
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressFerramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
 

Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]

  • 1. Melhorando o desempenho do seu WordPress WordCamp Porto Alegre 2015
  • 2. Tiago Hillebrandt ● Lead Developer na Copyblogger Media LLC ● Trabalha diariamente em uma estrutura com mais de 12.000 instalações WordPress ● Colaborador de diversas comunidades de Software Livre, como Ubuntu, WP-CLI, Bash, dentre outras
  • 3. Servidor ● Softwares atualizados ● NGINX (com módulo HTTP/2) ● Compressão gzip ● W3 Total Cache ● CDN ● WordPress Scheduled Events
  • 4. Servidor: Softwares atualizados ● Mantenha seus softwares atualizados! ● NGINX: ○ Versão nos repositórios do Ubuntu 12.04 LTS: 1.1.19 ○ Versão nos repositórios do Ubuntu 14.04 LTS: 1.4.6 ○ Mainline version: 1.9.6 ● PHP: ○ Versão nos repositórios do Ubuntu 12.04 LTS: 5.3.10 ○ Mainline version: 5.6.14
  • 5. Servidor: NGINX ● Servidor web de alta performance (algoritmo de manipulação de conexões diferenciado) ● Em conjunto com o FastCGI, é uma excelente opção (senão a melhor) para execução do WordPress location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php5-fpm.sock; }
  • 6. Servidor: NGINX com módulo SPDY HTTP/2 ● Suporte adicionado ao NGINX 1.9.5 ● Aplicável somente em sites com certificado SSL (HTTPS) server { listen 443 ssl http2;
  • 7. Servidor: Vantagens do HTTP/2 ● Protocolo binário (mais compacto e eficiente) ● Conexão multiplexada por domínio ● Cabeçalhos compactados com o formato HPACK (mais efetivo que o gzip) ● Esquema que ajuda os navegadores a priorizarem os "arquivos mais necessários" (mais efetivo do que o esquema usado no SPDY) Fonte: NGINX Inc
  • 8. Servidor: NGINX com módulo HTTP/2 Fonte: NGINX Inc
  • 9. Servidor: Compressão gzip ● Módulo gzip do NGINX ● Compacta as respostas do servidor, resultando na redução de 50% ou mais no tamanho da resposta ● Após habilitar, você pode utilizar o GTmetrix para confirmar se a compressão gzip está funcionando adequadamente: https://gtmetrix. com/ ● Se seu site já está rodando via HTTP/2, não utilize o gzip, uma vez que o HPACK é mais efetivo
  • 10. Servidor: Compressão gzip gzip on; gzip_disable "msie6"; gzip_vary on; gzip_comp_level 3; gzip_min_length 1000; gzip_buffers 32 4k; # ( $ getconf PAGESIZE ) gzip_types text/plain text/css text/javascript;
  • 11. Servidor: W3 Total Cache ● Excelente plugin de cache, disponível no repositório do WordPress gratuitamente ● Hoje o W3TC é usado em mais de um milhão de instalações WordPress ● Métodos de caching recomendados: ○ Page caching (disk, opcode ou memcached) ○ Browser caching ○ Object caching
  • 12. Servidor: W3TC Page Cache ● Cache baseado em URLs ● No primeiro acesso a determinada URL, um arquivo estático com o conteúdo é criado dentro do cache ● Os próximos acessos para mesma URL são carregados do cache, reduzindo o uso de recursos do PHP e MySQL ● Cache pode ser armazenado em disco ou na memória
  • 13. Servidor: W3TC Page Cache ● Os métodos OpCode e Memcached tendem a ser mais rápidos, pois o cache carregará diretamente da memória. Portanto, são uma boa opção se você dispor de bastante memória para dedicar à eles ● Já os métodos Disk, apesar de serem um pouco mais lentos, podem se tornar mais viáveis em servidores compartilhados ou VPSs com pouca memória dispon ́vel, ou ainda caso queira poupar memória para processar outras informações ● Se ainda assim está na dúvida de qual escolher, você pode testar a performance do seu site método-por-método
  • 14. Servidor: W3TC Browser Cache ● É o cache presente nos navegadores web ● No W3TC é poss ́vel determinar, por exemplo, quanto tempo as imagens, arquivos JS, CSS, HTML, dentre outros, serão cacheadas no navegador do usuário ● Permite a compressão dos cabeçalhos HTTP via gzip
  • 15. Servidor: W3TC Object Cache ● O WordPress possui uma classe de Object Cache, no entanto ela não é persistente ● Em outras palavras, a informação carregada é mantida na memória somente até o fim da requisição atual
  • 16. Servidor: W3TC Object Cache ● No W3TC, o Object Cache armazena uma cópia do objeto, seus atributos e valores em formato JSON ● Além disso, a informação passa a ser mantida de forma permanente, pois não é perdida ao término da requisição ● É poss ́vel determinar um intervalo para limpeza do cache, bem como uma lista de objetos que não devem ser cacheados
  • 17. Servidor: CDN ● Indicado para quem recebe tráfego de diversas localizações (geograficamente distribu ́do) ● Reduz o uso de largura de banda do servidor onde seu site está hospedado ● Serviços de CDN recomendados: ○ Amazon CloudFront ■ 2 datacenters no Brasil, custo variável por mês (on-demand) ○ CloudFlare ■ 1 datacenter no Brasil, custo fixo por mês
  • 18. WordPress Scheduled Events ● São ações programadas para serem executadas automaticamente pelo WordPress ● Exemplo: ○ Posts agendados ○ Exclusão de transients expirados da wp_options ○ Verificação de updates do WordPress core, temas e plugins
  • 19. WordPress Scheduled Events ● Por padrão ele rodará apenas se sua página tiver acessos, portanto um método não muito confiável ● Carrega em todos os acessos ao site, e caso um evento agendado trave o acesso pode ficar consideravelmente lento ● Pode ser implementado no crontab do seu servidor, um método muito confiável
  • 20. WordPress Scheduled Events ● Adicione ao seu wp-config.php: define( 'DISABLE_WP_CRON', true ); ● Adicione ao crontab: */10 * * * * www-data wget -o /dev/null -O /dev/null http://dominio.com/wp-cron.php
  • 21. Desenvolvimento ● WordPress Transients API ● WordPress Options API
  • 22. Dev: Transients API ● Armazenamento temporário de dados (cache) ● Normalmente usados para fazer cache de resultados de funções PHP e queries MySQL ● Os transients possuem tempo de expiração, e são carregados automaticamente pelo WordPress a cada requisição ● Problema comum entre plugins e temas mal codificados: criação de um número excessivo de transients, ou ainda armazenamento de valores muito grandes dentro deles
  • 23. Dev: Transients API Dever de casa: limpar os transients em seus sites WordPress Comando SQL: DELETE FROM wp_options WHERE option_name REGEXP '^(_site)?_transient'; Ou via WP-CLI: $ wp transient delete-all
  • 24. Dev: Options API ● As options são utilizadas para armazenamento permanente de dados ● Quando você cria uma option, você pode definir se ela será carregada automaticamente ou não por meio do campo autoload ● As autoloaded options são carregadas automaticamente pelo WordPress a cada requisição ● Temos um problema comum entre plugins e temas mal codificados: criação de um número excessivo de autoloaded options, ou ainda armazenamento de valores muito grandes dentro delas
  • 25. Dev: Options API ● Detectar a quantidade e o tamanho total das autoloaded options: SELECT COUNT(*) AS total, ROUND(SUM(LENGTH(option_value)) / POWER (1024, 2), 2) AS tamanho FROM wp_options WHERE autoload='yes';
  • 26. Dev: Options API - Query 1 ● Detectar as options com maior tamanho: SELECT option_name, ROUND(LENGTH (option_value) / POWER(1024, 2), 2) AS tamanho FROM wp_options WHERE autoload='yes' ORDER BY tamanho DESC LIMIT 0, 15;
  • 27. Dev: Options API - Query 2 ● Detectar as options com prefixos similares: SELECT SUBSTRING(option_name, 1, 16) AS prefixo, COUNT(*) AS total FROM wp_options GROUP BY SUBSTRING (option_name, 1, 8) ORDER BY total DESC LIMIT 0, 15;
  • 28. WP-Healthcheck ● Plugin em desenvolvimento, com previsão de lançamento em Novembro ● Versão inicial contará com suporte a três idiomas, incluindo Português do Brasil