SlideShare una empresa de Scribd logo
1 de 39
Descargar para leer sin conexión
Melhorando o desempenho
do seu WordPress
WordCamp São Paulo 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
● SSL: HTTP/2, cache de sessão e OCSP Stapling
● Compressão gzip
● Redirecionamento www/non-www
● W3 Total Cache
● CDN
● WordPress Cron
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.7
● PHP:
○ Versão nos repositórios do Ubuntu 12.04 LTS: 5.3.10
○ Mainline version: 5.6.15
● MySQL, OpenSSL, etc
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;
}
NGINX SSL: Módulo SPDY HTTP/2
● Suporte adicionado ao NGINX 1.9.5
● Aplicável somente em sites com certificado SSL
server {
listen 443 ssl http2;
NGINX SSL: 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
NGINX SSL: HTTP/2 Inside
Fonte: NGINX Inc
HTTP 1.x vs HTTP/2
Fonte: NGINX Inc
NGINX SSL: Cache de Sessão
● Faz o cache dos parâmetros da sessão SSL para reusá-los, evitando assim
o handshake a cada requisição
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
● Cada megabyte pode armazenar até 4.000 sessões, portanto sites com
muito tráfego devem utilizar um valor maior
NGINX SSL: OCSP Stapling
● Melhora a performance em conexões SSL (reduz aproximadamente 500ms)
● Consiste em evitar a verificação do status do certificado (OCSP) junto ao
servidor da Autoridade Certificadora (CA)
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/ca-certs.pem;
● Adicionar somente se os intermediários não estiverem combinados dentro do
certificado carregado na diretiva ssl_certificate
NGINX SSL: OCSP Stapling
● Após implementar, não esqueça de testar:
$ echo | openssl s_client -connect wordpress.org:443 -status 2>
/dev/null | grep -A17 'OCSP response'
OCSP response:
======================================
OCSP Response Data:
OCSP Response Status: successful (0x0)
...
NGINX: 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
NGINX: 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;
NGINX: Redirecionamento www/non-www
● Ao criar qualquer site, é importante definir se ele utilizará ou não o www
como prefixo
● Após essa definição, devemos implementar algumas regras no servidor
web para aprimorar a performance do site
● Muito importante para SEO, uma vez que evita que URLs diferentes sejam
indexadas para o mesmo conteúdo
NGINX: Redirecionamento www/non-www
● Exemplo de redirecionamento que poderia ser otimizado:
NGINX: Redirecionamento www/non-www
# força todos as requisições non-www para www
if ($host !~ "^www.") { return 301 $scheme://www.$host$request_uri; }
# força todas as requisições www para non-www
if ($host ~ "^www.") { return 301 $scheme://dominio.com$request_uri; }
● Você pode substituir a variável $scheme por um esquema fixo (http ou https) se
desejar
NGINX: Redirecionamento www/non-www
● Para evitar redirect loops, não esqueça de também atualizar as opções siteurl
e a home do seu WordPress
● Via WP-CLI:
$ wp option update siteurl "https://www.dominio.com"
$ wp option update home "https://www.dominio.com"
NGINX: Redirecionamentos
E lembre-se:
● Evite plugins de redirecionamento
● Adicione seus redirects diretamente no servidor web
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 e
demais arquivos estáticos (JS, CSS, HTML, dentre outros) serão
cacheados 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 Cron
● Exemplo:
○ Posts agendados
○ Exclusão de transients expirados da wp_options
○ Verificação de updates do WordPress core, temas e plugins
WordPress Cron
● 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 Cron
● 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
● Pingdom Speed Test
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;
Pingdom Speed Test
● Detecta o tempo de resolução do DNS, Time to First Byte (TTFB),
carregamento e tamanho de recursos da página
● http://tools.pingdom.com/fpt/
WP-Healthcheck
● Plugin em desenvolvimento, com previsão de lançamento em dezembro
● Versão inicial contará com suporte a três idiomas, incluindo Português do
Brasil
Dúvidas?
Twitter: @tiagoscd
Website: http://tiagohillebrandt.eti.br

Más contenido relacionado

La actualidad más candente

Traduções no WordPress
Traduções no WordPressTraduções no WordPress
Traduções no WordPressBreno Alves
 
Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...
Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...
Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...WordCamp Floripa
 
Walker Leite apresenta usando o WordPress como backend de aplicação
Walker Leite apresenta usando o WordPress como backend de aplicaçãoWalker Leite apresenta usando o WordPress como backend de aplicação
Walker Leite apresenta usando o WordPress como backend de aplicaçãoWordCamp Floripa
 
Iniciando com Yeoman, Grunt e Bower
Iniciando com Yeoman, Grunt e BowerIniciando com Yeoman, Grunt e Bower
Iniciando com Yeoman, Grunt e BowerMateus Padua
 
Os camaradas Grunt e Bower
Os camaradas Grunt e BowerOs camaradas Grunt e Bower
Os camaradas Grunt e BowerA2 Comunicação
 
Por que jenkins se posso usar deployer php
Por que jenkins se posso usar deployer php Por que jenkins se posso usar deployer php
Por que jenkins se posso usar deployer php Michael Douglas
 
Implementando APIs multiplataforma com ASP.NET Core 2.0 - Nerdzão Day #3 - No...
Implementando APIs multiplataforma com ASP.NET Core 2.0 - Nerdzão Day #3 - No...Implementando APIs multiplataforma com ASP.NET Core 2.0 - Nerdzão Day #3 - No...
Implementando APIs multiplataforma com ASP.NET Core 2.0 - Nerdzão Day #3 - No...Renato Groff
 
Php além do LAMP
Php além do LAMPPhp além do LAMP
Php além do LAMPThiago Paes
 
Ionic Framework - Parte 1 - Iniciando um Projeto mais Robusto
Ionic Framework - Parte 1 - Iniciando um Projeto mais RobustoIonic Framework - Parte 1 - Iniciando um Projeto mais Robusto
Ionic Framework - Parte 1 - Iniciando um Projeto mais RobustoAlamo Saravali
 
Usando PushWoosh com Ionic Framework
Usando PushWoosh com Ionic FrameworkUsando PushWoosh com Ionic Framework
Usando PushWoosh com Ionic FrameworkEmerson Thompson
 
PHP Conference 2016
PHP Conference 2016PHP Conference 2016
PHP Conference 2016Edison Costa
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019Renato Groff
 
Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB
Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDBFlask Full Stack - Desenvolvendo um CMS com Flask e MongoDB
Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDBBruno Rocha
 
Apresentação wild fly-semrevisao
Apresentação wild fly-semrevisaoApresentação wild fly-semrevisao
Apresentação wild fly-semrevisaoRogerio Fontes
 

La actualidad más candente (20)

Traduções no WordPress
Traduções no WordPressTraduções no WordPress
Traduções no WordPress
 
Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...
Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...
Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...
 
Walker Leite apresenta usando o WordPress como backend de aplicação
Walker Leite apresenta usando o WordPress como backend de aplicaçãoWalker Leite apresenta usando o WordPress como backend de aplicação
Walker Leite apresenta usando o WordPress como backend de aplicação
 
Iniciando com Yeoman, Grunt e Bower
Iniciando com Yeoman, Grunt e BowerIniciando com Yeoman, Grunt e Bower
Iniciando com Yeoman, Grunt e Bower
 
Ionic workshop
Ionic workshopIonic workshop
Ionic workshop
 
Os camaradas Grunt e Bower
Os camaradas Grunt e BowerOs camaradas Grunt e Bower
Os camaradas Grunt e Bower
 
PHP com Docker
PHP com DockerPHP com Docker
PHP com Docker
 
Por que jenkins se posso usar deployer php
Por que jenkins se posso usar deployer php Por que jenkins se posso usar deployer php
Por que jenkins se posso usar deployer php
 
WP Composer
WP ComposerWP Composer
WP Composer
 
Mean Stack
Mean StackMean Stack
Mean Stack
 
Implementando APIs multiplataforma com ASP.NET Core 2.0 - Nerdzão Day #3 - No...
Implementando APIs multiplataforma com ASP.NET Core 2.0 - Nerdzão Day #3 - No...Implementando APIs multiplataforma com ASP.NET Core 2.0 - Nerdzão Day #3 - No...
Implementando APIs multiplataforma com ASP.NET Core 2.0 - Nerdzão Day #3 - No...
 
Php além do LAMP
Php além do LAMPPhp além do LAMP
Php além do LAMP
 
Ionic Framework - Parte 1 - Iniciando um Projeto mais Robusto
Ionic Framework - Parte 1 - Iniciando um Projeto mais RobustoIonic Framework - Parte 1 - Iniciando um Projeto mais Robusto
Ionic Framework - Parte 1 - Iniciando um Projeto mais Robusto
 
Usando PushWoosh com Ionic Framework
Usando PushWoosh com Ionic FrameworkUsando PushWoosh com Ionic Framework
Usando PushWoosh com Ionic Framework
 
PHP Conference 2016
PHP Conference 2016PHP Conference 2016
PHP Conference 2016
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
 
Webpack
Webpack Webpack
Webpack
 
Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB
Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDBFlask Full Stack - Desenvolvendo um CMS com Flask e MongoDB
Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB
 
Alagoas Dev Day
Alagoas Dev DayAlagoas Dev Day
Alagoas Dev Day
 
Apresentação wild fly-semrevisao
Apresentação wild fly-semrevisaoApresentação wild fly-semrevisao
Apresentação wild fly-semrevisao
 

Destacado

Projetando para WordPress
Projetando para WordPressProjetando para WordPress
Projetando para WordPressHaste Design
 
Como manter o WordPress seguro
Como manter o WordPress seguroComo manter o WordPress seguro
Como manter o WordPress seguroRudá Almeida
 
WP WEEKEND 2015 - O word press é seguro. Inseguro é você.
WP WEEKEND 2015 - O word press é seguro. Inseguro é você. WP WEEKEND 2015 - O word press é seguro. Inseguro é você.
WP WEEKEND 2015 - O word press é seguro. Inseguro é você. Rodrigo Toshiaki Horie
 
Palestra - WordCamp Belo Horizonte 2015 - WordCamp Belo Horizonte 2015 - Hack...
Palestra - WordCamp Belo Horizonte 2015 - WordCamp Belo Horizonte 2015 - Hack...Palestra - WordCamp Belo Horizonte 2015 - WordCamp Belo Horizonte 2015 - Hack...
Palestra - WordCamp Belo Horizonte 2015 - WordCamp Belo Horizonte 2015 - Hack...As Zone
 
Curso online wordpress aula 1
Curso online wordpress aula 1Curso online wordpress aula 1
Curso online wordpress aula 1Vasco Marques
 
WordPress para Gestores de Conteúdo - WordCamp BH 2015
WordPress para Gestores de Conteúdo - WordCamp BH 2015WordPress para Gestores de Conteúdo - WordCamp BH 2015
WordPress para Gestores de Conteúdo - WordCamp BH 2015Nauweb
 
Design para WordPress- Anyssa Ferreira - WordCamp BH 2015
Design para WordPress-  Anyssa Ferreira - WordCamp BH 2015Design para WordPress-  Anyssa Ferreira - WordCamp BH 2015
Design para WordPress- Anyssa Ferreira - WordCamp BH 2015Anyssa Ferreira
 
KFIE Innovator Bios
KFIE Innovator BiosKFIE Innovator Bios
KFIE Innovator BiosGiselle Aris
 
Database automated build and test - SQL In The City Cambridge
Database automated build and test - SQL In The City CambridgeDatabase automated build and test - SQL In The City Cambridge
Database automated build and test - SQL In The City CambridgeRed Gate Software
 
Del embarazo al nacimiento
Del embarazo al nacimientoDel embarazo al nacimiento
Del embarazo al nacimientosherazade0884
 
Social Media for Artists
Social Media for ArtistsSocial Media for Artists
Social Media for ArtistsSOMArts
 
Cultura de Métricas para SEO (UaiSEO)
Cultura de Métricas para SEO (UaiSEO)Cultura de Métricas para SEO (UaiSEO)
Cultura de Métricas para SEO (UaiSEO)Leonardo Naressi
 
Gost r standards 2324
Gost r standards 2324Gost r standards 2324
Gost r standards 2324Quinn Kane
 
Xo Overview Jason 7.21.11
Xo Overview Jason 7.21.11Xo Overview Jason 7.21.11
Xo Overview Jason 7.21.11jjmickelson
 
Silvana la bestia
Silvana la bestiaSilvana la bestia
Silvana la bestiaSivaeli-54
 
Communication Online
Communication OnlineCommunication Online
Communication Onlinekraemera
 
The Comeback of the Watch
The Comeback of the WatchThe Comeback of the Watch
The Comeback of the WatchNick Decrock
 

Destacado (20)

Projetando para WordPress
Projetando para WordPressProjetando para WordPress
Projetando para WordPress
 
Como manter o WordPress seguro
Como manter o WordPress seguroComo manter o WordPress seguro
Como manter o WordPress seguro
 
Conhecendo o Wordpress
Conhecendo o WordpressConhecendo o Wordpress
Conhecendo o Wordpress
 
WP WEEKEND 2015 - O word press é seguro. Inseguro é você.
WP WEEKEND 2015 - O word press é seguro. Inseguro é você. WP WEEKEND 2015 - O word press é seguro. Inseguro é você.
WP WEEKEND 2015 - O word press é seguro. Inseguro é você.
 
Palestra - WordCamp Belo Horizonte 2015 - WordCamp Belo Horizonte 2015 - Hack...
Palestra - WordCamp Belo Horizonte 2015 - WordCamp Belo Horizonte 2015 - Hack...Palestra - WordCamp Belo Horizonte 2015 - WordCamp Belo Horizonte 2015 - Hack...
Palestra - WordCamp Belo Horizonte 2015 - WordCamp Belo Horizonte 2015 - Hack...
 
Curso online wordpress aula 1
Curso online wordpress aula 1Curso online wordpress aula 1
Curso online wordpress aula 1
 
WordPress para Gestores de Conteúdo - WordCamp BH 2015
WordPress para Gestores de Conteúdo - WordCamp BH 2015WordPress para Gestores de Conteúdo - WordCamp BH 2015
WordPress para Gestores de Conteúdo - WordCamp BH 2015
 
Design para WordPress- Anyssa Ferreira - WordCamp BH 2015
Design para WordPress-  Anyssa Ferreira - WordCamp BH 2015Design para WordPress-  Anyssa Ferreira - WordCamp BH 2015
Design para WordPress- Anyssa Ferreira - WordCamp BH 2015
 
Libres en cristo 3
Libres en cristo 3Libres en cristo 3
Libres en cristo 3
 
KFIE Innovator Bios
KFIE Innovator BiosKFIE Innovator Bios
KFIE Innovator Bios
 
Database automated build and test - SQL In The City Cambridge
Database automated build and test - SQL In The City CambridgeDatabase automated build and test - SQL In The City Cambridge
Database automated build and test - SQL In The City Cambridge
 
Del embarazo al nacimiento
Del embarazo al nacimientoDel embarazo al nacimiento
Del embarazo al nacimiento
 
Social Media for Artists
Social Media for ArtistsSocial Media for Artists
Social Media for Artists
 
Neem je mee
Neem je meeNeem je mee
Neem je mee
 
Cultura de Métricas para SEO (UaiSEO)
Cultura de Métricas para SEO (UaiSEO)Cultura de Métricas para SEO (UaiSEO)
Cultura de Métricas para SEO (UaiSEO)
 
Gost r standards 2324
Gost r standards 2324Gost r standards 2324
Gost r standards 2324
 
Xo Overview Jason 7.21.11
Xo Overview Jason 7.21.11Xo Overview Jason 7.21.11
Xo Overview Jason 7.21.11
 
Silvana la bestia
Silvana la bestiaSilvana la bestia
Silvana la bestia
 
Communication Online
Communication OnlineCommunication Online
Communication Online
 
The Comeback of the Watch
The Comeback of the WatchThe Comeback of the Watch
The Comeback of the Watch
 

Similar a Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]

Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]
Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]
Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 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
 
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
 
Drupal Camp campinas 2016 - Funcionamento básico das camadas de cache
Drupal Camp campinas 2016 - Funcionamento básico das camadas de cacheDrupal Camp campinas 2016 - Funcionamento básico das camadas de cache
Drupal Camp campinas 2016 - Funcionamento básico das camadas de cacheLeonardo Torati
 
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
 
Linux Servidor Proxy(squid)
Linux Servidor Proxy(squid)Linux Servidor Proxy(squid)
Linux Servidor Proxy(squid)elliando dias
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo realEvandro Silvestre
 
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
 
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
 
REST - The right way
REST - The right wayREST - The right way
REST - The right waysantosluis87
 
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
 
19-Sistemas Distribuidos.pptx
19-Sistemas Distribuidos.pptx19-Sistemas Distribuidos.pptx
19-Sistemas Distribuidos.pptxRoberto Aragy
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScriptCarlos Santos
 
Apresentação zend framework 2 parte 1
Apresentação zend framework 2   parte 1 Apresentação zend framework 2   parte 1
Apresentação zend framework 2 parte 1 Edgar Dantas
 
Escalabilidade e alta disponibilidade no php com nginx
Escalabilidade e alta disponibilidade no php com nginxEscalabilidade e alta disponibilidade no php com nginx
Escalabilidade e alta disponibilidade no php com nginxSaveincloud
 

Similar a Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015] (20)

Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]
Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]
Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]
 
Melhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressMelhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPress
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedores
 
Drupal Camp campinas 2016 - Funcionamento básico das camadas de cache
Drupal Camp campinas 2016 - Funcionamento básico das camadas de cacheDrupal Camp campinas 2016 - Funcionamento básico das camadas de cache
Drupal Camp campinas 2016 - Funcionamento básico das camadas de cache
 
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?
 
Linux Servidor Proxy(squid)
Linux Servidor Proxy(squid)Linux Servidor Proxy(squid)
Linux Servidor Proxy(squid)
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo real
 
Vamos conversar sobre cache
Vamos conversar sobre cacheVamos conversar sobre cache
Vamos conversar sobre cache
 
Web seminario varnish
Web seminario varnishWeb seminario varnish
Web seminario varnish
 
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 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
 
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
 
REST - The right way
REST - The right wayREST - The right way
REST - The right way
 
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
 
19-Sistemas Distribuidos.pptx
19-Sistemas Distribuidos.pptx19-Sistemas Distribuidos.pptx
19-Sistemas Distribuidos.pptx
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript
 
Apresentação zend framework 2 parte 1
Apresentação zend framework 2   parte 1 Apresentação zend framework 2   parte 1
Apresentação zend framework 2 parte 1
 
Escalabilidade e alta disponibilidade no php com nginx
Escalabilidade e alta disponibilidade no php com nginxEscalabilidade e alta disponibilidade no php com nginx
Escalabilidade e alta disponibilidade no php com nginx
 
TDC - Da presença online ao Cloud Computing
TDC - Da presença online ao Cloud ComputingTDC - Da presença online ao Cloud Computing
TDC - Da presença online ao Cloud Computing
 

Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]

  • 1. Melhorando o desempenho do seu WordPress WordCamp São Paulo 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 ● SSL: HTTP/2, cache de sessão e OCSP Stapling ● Compressão gzip ● Redirecionamento www/non-www ● W3 Total Cache ● CDN ● WordPress Cron
  • 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.7 ● PHP: ○ Versão nos repositórios do Ubuntu 12.04 LTS: 5.3.10 ○ Mainline version: 5.6.15 ● MySQL, OpenSSL, etc
  • 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. NGINX SSL: Módulo SPDY HTTP/2 ● Suporte adicionado ao NGINX 1.9.5 ● Aplicável somente em sites com certificado SSL server { listen 443 ssl http2;
  • 7. NGINX SSL: 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. NGINX SSL: HTTP/2 Inside Fonte: NGINX Inc
  • 9. HTTP 1.x vs HTTP/2 Fonte: NGINX Inc
  • 10. NGINX SSL: Cache de Sessão ● Faz o cache dos parâmetros da sessão SSL para reusá-los, evitando assim o handshake a cada requisição ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ● Cada megabyte pode armazenar até 4.000 sessões, portanto sites com muito tráfego devem utilizar um valor maior
  • 11. NGINX SSL: OCSP Stapling ● Melhora a performance em conexões SSL (reduz aproximadamente 500ms) ● Consiste em evitar a verificação do status do certificado (OCSP) junto ao servidor da Autoridade Certificadora (CA) ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /path/to/ca-certs.pem; ● Adicionar somente se os intermediários não estiverem combinados dentro do certificado carregado na diretiva ssl_certificate
  • 12. NGINX SSL: OCSP Stapling ● Após implementar, não esqueça de testar: $ echo | openssl s_client -connect wordpress.org:443 -status 2> /dev/null | grep -A17 'OCSP response' OCSP response: ====================================== OCSP Response Data: OCSP Response Status: successful (0x0) ...
  • 13. NGINX: 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
  • 14. NGINX: 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;
  • 15. NGINX: Redirecionamento www/non-www ● Ao criar qualquer site, é importante definir se ele utilizará ou não o www como prefixo ● Após essa definição, devemos implementar algumas regras no servidor web para aprimorar a performance do site ● Muito importante para SEO, uma vez que evita que URLs diferentes sejam indexadas para o mesmo conteúdo
  • 16. NGINX: Redirecionamento www/non-www ● Exemplo de redirecionamento que poderia ser otimizado:
  • 17. NGINX: Redirecionamento www/non-www # força todos as requisições non-www para www if ($host !~ "^www.") { return 301 $scheme://www.$host$request_uri; } # força todas as requisições www para non-www if ($host ~ "^www.") { return 301 $scheme://dominio.com$request_uri; } ● Você pode substituir a variável $scheme por um esquema fixo (http ou https) se desejar
  • 18. NGINX: Redirecionamento www/non-www ● Para evitar redirect loops, não esqueça de também atualizar as opções siteurl e a home do seu WordPress ● Via WP-CLI: $ wp option update siteurl "https://www.dominio.com" $ wp option update home "https://www.dominio.com"
  • 19. NGINX: Redirecionamentos E lembre-se: ● Evite plugins de redirecionamento ● Adicione seus redirects diretamente no servidor web
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. Servidor: W3TC Browser Cache ● É o cache presente nos navegadores web ● No W3TC é poss ́vel determinar, por exemplo, quanto tempo as imagens e demais arquivos estáticos (JS, CSS, HTML, dentre outros) serão cacheados no navegador do usuário ● Permite a compressão dos cabeçalhos HTTP via gzip
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. WordPress Scheduled Events ● São ações programadas para serem executadas automaticamente pelo WordPress Cron ● Exemplo: ○ Posts agendados ○ Exclusão de transients expirados da wp_options ○ Verificação de updates do WordPress core, temas e plugins
  • 28. WordPress Cron ● 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
  • 29. WordPress Cron ● 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
  • 30. Desenvolvimento ● WordPress Transients API ● WordPress Options API ● Pingdom Speed Test
  • 31. 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
  • 32. 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
  • 33. 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
  • 34. 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';
  • 35. 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;
  • 36. 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;
  • 37. Pingdom Speed Test ● Detecta o tempo de resolução do DNS, Time to First Byte (TTFB), carregamento e tamanho de recursos da página ● http://tools.pingdom.com/fpt/
  • 38. WP-Healthcheck ● Plugin em desenvolvimento, com previsão de lançamento em dezembro ● Versão inicial contará com suporte a três idiomas, incluindo Português do Brasil