Performance em sites Joomla
Por
Nicholas K. Dionysopoulos
Em 5 partes:
Origiais em inglês
https://www.dionysopoulos.me/joomla-performance-tuning-i-start-at-the-beginning.html
https://www.dionysopoulos.me/joomla-performance-tuning-ii-basic-settings.html
https://www.dionysopoulos.me/joomla-performance-tuning-iii-static-media-optimization.html
https://www.dionysopoulos.me/joomla-performance-tuning-iv-site-building-calisthenics.html
https://www.dionysopoulos.me/joomla-performance-tuning-v-content-quality.html
Segunda parte
Na primeira parte desta série (https://www.dionysopoulos.me/joomla-performance-tuning-i-start-at-the-beginning.html) descrevi por que ajustar o desempenho do seu site é algo que você deve fazer por razões filosóficas e práticas, bem como por onde começar. Essa postagem foi necessariamente um pouco genérica. Na segunda parte desta série, esta, mergulharemos em algumas das coisas básicas que você pode fazer no Joomla para desbloquear uma quantidade razoável de desempenho.
Configurações básicas do sistema
Ao criar um site, muitas vezes ficamos tão envolvidos no design e na funcionalidade que esquecemos que algumas configurações do sistema muito básicas e bastante simples podem ter um impacto enorme no desempenho de nossos sites. Alguns ajustes simples na Configuração Global antes de entregar o site e algumas verificações simples no servidor podem fazer toda a diferença do mundo.
Cache
A maior parte do tempo gasto no servidor de um site tem a ver com a construção da página que será exibida ao visitante. Joomla, ao contrário do WordPress, possui um sistema de cache integrado. Eu sinto que as pessoas não dão crédito suficiente porque estavam acostumadas com a experiência de cache abaixo da média no Joomla 1.0 a 2.5. Isso foi há 10 a 15 anos.
Vá para a configuração global do seu site e defina o cache como "ON - Progressive Caching". A opção de cache progressivo é a melhor forma de cache integrado do Joomla, garantindo que todos os elementos da sua página sejam armazenados em cache. Quando uma solicitação chega, a página é unida a partir do conteúdo em cache sempre que possível. Isso pode até funcionar para mitigar parte do desempenho perdido em um template pré-construído. Definitivamente, isso ajudará a tornar suas páginas públicas sem login mais rápidas - exatamente o que é mais relevante para a classificação do seu site no mecanismo de pesquisa.
Quanto ao back-end de cache, descobri que o cache de arquivos em um host decente é semelhante ou melhor em desempenho do que o memcached ou o Redis. Heresia, eu ouço você dizer. E eu concordo, até certo ponto. Se você tiver um site realmente grande ou extremamente ocupado, faz sentido usar um servidor memcached ou Redis dedicado. Será mais rápido. Provavelmente, se você está lendo isso, você não tem, de fato, esse tipo de site e está pensando em acelerar um site muito mais para pedestres. Até mesmo o site da minha empresa se enquadra na categoria “mais pedestre” e estamos recebendo um número saudável de dezenas de milhares de visitantes únicos mensais. Isso deve lhe dar uma ideia da escala do site que se beneficiaria com o cache que não é de arquivo.
Compressão do HTML
Se houvesse um concurso para a opção mais negligenciada no Joomla, a compressão de páginas Gzip venceria sem dúvida. Se você ainda não fez isso, vá em frente e ative-o.
Esta opção garante que o conteúdo HTML enviado pelo seu site ao navegador seja compactado usando o algoritmo GZip (também chamado de “deflate”). Isso reduz substancialmente o tamanho total dos dados transferidos para o cliente. A quantidade de tempo economizado na transferência de dados tem um impacto significativo no desempenho do seu site.
Compressão do JavaScript e do CSS
Por mais tentado que você esteja, não use o recurso do seu template ou componente para enviar versões GZipadas de arquivos JavaScript e CSS, nem deve ceder à tentação de usar um plug-in de terceiros para GZipar esses arquivos. Todos esses recursos funcionam empregando um script PHP diretamente acessível pela web, o que é ruim tanto para a segurança quanto para o desempenho do seu site. Esses scripts raramente executam qualquer tipo de controle de acesso, geralmente permitindo que um invasor acesse arquivos que não deveria acessar diretamente. Às vezes até mídia não estática. Ai. No que diz respeito ao desempenho, o tempo mínimo economizado na transmissão de um arquivo menor é perdido pelo tempo gasto pelo servidor web para iniciar um novo thread PHP, ler o arquivo, compactá-lo e então começar a transferir os dados compactados para o navegador.
Eu recomendo fortemente fazer isso através do seu próprio servidor web. Se você estiver usando o Apache, poderá adicionar o seguinte ao seu arquivo .htaccess:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain text/xml text/css application/xml application/xhtml+xml application/rss+xml application/javascript application/x-javascript image/svg+xml
</IfModule>
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_keep_workfiles No
mod_gzip_can_negotiate Yes
mod_gzip_add_header_count Yes
mod_gzip_send_vary Yes
mod_gzip_min_http 1000
mod_gzip_minimum_file_size 300
mod_gzip_maximum_file_size 512000
mod_gzip_maximum_inmem_size 60000
mod_gzip_handle_methods GET
mod_gzip_item_include file \.(html?|txt|css|js|php|pl|xml|rb|py|svg|scgz)$
mod_gzip_item_include mime ^text/plain$
mod_gzip_item_include mime ^text/xml$
mod_gzip_item_include mime ^text/css$
mod_gzip_item_include mime ^application/xml$
mod_gzip_item_include mime ^application/xhtml+xml$
mod_gzip_item_include mime ^application/rss+xml$
mod_gzip_item_include mime ^application/javascript$
mod_gzip_item_include mime ^application/x-javascript$
mod_gzip_item_include mime ^image/svg+xml$
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include handler ^server-status$
mod_gzip_item_include handler ^server-info$
mod_gzip_item_include handler ^application/x-httpd-php
mod_gzip_item_exclude mime ^image/.*
</IfModule>
Seu servidor web é muito mais rápido na compactação de arquivos de mídia estáticos e pode manter os arquivos compactados armazenados em cache na memória para uma entrega mais rápida na próxima vez.
Cache de mídia estática
Reduzir o tamanho da mídia estática com compactação é metade da batalha e é importante principalmente para visitantes de primeira viagem. Quando alguém volta ao seu site, faz sentido que o navegador forneça mídia estática do cache do navegador, sem atingir a rede. Se estiver usando Apache, você pode usar o seguinte código em seu arquivo .htaccess:
<IfModule mod_expires.c>
# Enable expiration control
ExpiresActive On
# CSS and JS expiration:
ExpiresByType text/css "now plus 1 year"
ExpiresByType application/javascript "now plus 1 year"
ExpiresByType application/x-javascript "now plus 1 year"
# Image files expiration: 1 month after request
ExpiresByType image/bmp "now plus 1 year"
ExpiresByType image/gif "now plus 1 year"
ExpiresByType image/jpeg "now plus 1 month"
ExpiresByType image/jp2 "now plus 1 month"
ExpiresByType image/pipeg "now plus 1 month"
ExpiresByType image/png "now plus 1 month"
ExpiresByType image/svg+xml "now plus 1 month"
ExpiresByType image/tiff "now plus 1 month"
ExpiresByType image/vnd.microsoft.icon "now plus 1 month"
ExpiresByType image/x-icon "now plus 1 month"
ExpiresByType image/ico "now plus 1 month"
ExpiresByType image/icon "now plus 1 month"
ExpiresByType image/webp "now plus 1 month"
ExpiresByType text/ico "now plus 1 month"
ExpiresByType application/ico "now plus 1 month"
ExpiresByType image/vnd.wap.wbmp "now plus 1 month"
ExpiresByType application/vnd.wap.wbxml "now plus 1 month"
ExpiresByType application/smil "now plus 1 month"
# Font files expiration: 1 week after request
ExpiresByType application/vnd.ms-fontobject "now plus 1 week"
ExpiresByType application/x-font-ttf "now plus 1 week"
ExpiresByType application/x-font-opentype "now plus 1 week"
ExpiresByType application/x-font-woff "now plus 1 week"
ExpiresByType font/woff2 "now plus 1 week"
ExpiresByType image/svg+xml "now plus 1 week"
# Audio files expiration: 1 month after request
ExpiresByType audio/ogg "now plus 1 month"
ExpiresByType application/ogg "now plus 1 month"
ExpiresByType audio/basic "now plus 1 month"
ExpiresByType audio/mid "now plus 1 month"
ExpiresByType audio/midi "now plus 1 month"
ExpiresByType audio/mpeg "now plus 1 month"
ExpiresByType audio/mp3 "now plus 1 month"
ExpiresByType audio/x-aiff "now plus 1 month"
ExpiresByType audio/x-mpegurl "now plus 1 month"
ExpiresByType audio/x-pn-realaudio "now plus 1 month"
ExpiresByType audio/x-wav "now plus 1 month"
# Movie files expiration: 1 month after request
ExpiresByType application/x-shockwave-flash "now plus 1 month"
ExpiresByType x-world/x-vrml "now plus 1 month"
ExpiresByType video/x-msvideo "now plus 1 month"
ExpiresByType video/mpeg "now plus 1 month"
ExpiresByType video/mp4 "now plus 1 month"
ExpiresByType video/quicktime "now plus 1 month"
ExpiresByType video/x-la-asf "now plus 1 month"
ExpiresByType video/x-ms-asf "now plus 1 month"
</IfModule>
HTTPS e HSTS
Há um equívoco comum de que o HTTPS tem algo a ver com a segurança do seu site, é caro, é lento e você realmente não precisa dele, a menos que esteja fazendo comércio eletrônico ou algo assim. Outro equívoco é que isso torna seu site mais lento.
Esses mitos se originaram no final da década de 1990. Há mais de duas décadas, eles são patentemente falsos.
HTTPS é praticamente obrigatório atualmente. Se você não usar HTTPS, seu site aparecerá com um sinal vermelho informando que é inseguro, assustando os visitantes. Será penalizado pelos motores de busca. Você deve usar HTTPS apenas para corrigir esses dois problemas. Você nem precisa quebrar o cofrinho. Os certificados TLS agora são gratuitos graças ao Let's Encrypt. A maioria dos painéis de controle de hospedagem se integra ao Let's Encrypt, o que significa que você pode literalmente ter seu painel de controle de hospedagem em questão e instalar um certificado TLS gratuito e renová-lo automaticamente. Não há manutenção de sua parte. HTTPS também é super rápido, já que qualquer CPU moderna, lançada nos últimos dez anos, possui aceleração de hardware para as operações criptográficas que utiliza.
Enquanto estiver fazendo isso, lembre-se de definir Forçar HTTPS para site inteiro em sua configuração global. Isso garante que seu site Joomla sempre será entregue via HTTPS, tornando os logins mais seguros no processo. Depois de fazer isso e confirmar que o HTTPS funciona bem com o seu site, adicione o seguinte ao seu .htaccess:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000" env=HTTPS
</IfModule>
Isso habilita um recurso chamado HSTS (HTTP Strict Transport Security). Resumindo, ele diz ao seu navegador para nunca tentar se conectar à versão HTTP do seu site, independentemente do que o visitante solicitar. Como isso acontece no navegador, um visitante que digitar seu nome de domínio na barra de endereço sem o prefixo https://, ou clicar em um link com o prefixo http://, sempre chegará à versão HTTPS do seu site sem ter que para primeiro visitar a versão HTTP simples e ser redirecionado pelo Joomla. Isto é muito mais rápido, especialmente em conexões de alta latência, como Internet móvel ou via satélite.
Uma otimização adicional que você pode fazer é enviar seu site para a lista de pré-carregamento HSTS. Embora o HSTS só funcione após a primeira vez que alguém visita seu site, ter seu site na lista de pré-carregamento do HSTS significa que o navegador sabe que seu site está usando HSTS antes da primeira vez que o visitante o visita. Portanto, o navegador nunca tentará carregá-lo por HTTP simples. Novamente, isso economiza tempo para conexões de alta latência, fáceis e gratuitas. O que há para não amar nisso?
Envio de servidor HTTP/2
O motivo oculto para usar HTTPS é que ele nos permite usar HTTP/2. Esta é uma versão mais recente do protocolo HTTP que só funciona em HTTPS, usa cabeçalhos binários e oferece suporte a alguns recursos importantes que aumentam o desempenho do site.
Isso é algo que seu host precisa habilitar em seu servidor. Se você não tiver certeza se sim, acesse https://http2.pro/ e teste a versão HTTPS do seu site. Se disser que HTTP/2 não é compatível, entre em contato com seu host e peça para ativá-lo.
Um dos benefícios do HTTP/2 é que ele suporta push de servidor. Basicamente, seu site pode dizer ao navegador "Ei, percebi que você é novo aqui. Aqui estão alguns arquivos CSS, JavaScript e de imagem que você definitivamente precisará para renderizar esta página. De nada". Ao fazer com que o servidor anexe os arquivos necessários à resposta HTML inicial, o navegador não precisa fazer solicitações separadas para eles. Isso economiza tempo para o navegador enviar uma solicitação ao servidor e esperar que o servidor a processe e comece a enviar dados. Isto é extremamente importante em dois casos. Primeiro, quando o navegador está muito distante do servidor, por ex. o visitante está nos EUA, mas o servidor está em Frankfurt. O tempo de ida e volta, neste caso, é determinado pela velocidade da luz, que é uma constante em nosso universo; você não pode fazer isso ir mais rápido! O outro caso é quando temos alta latência, como Internet móvel ou via satélite. Mesmo em conexões com fio regulares, ele pode economizar centenas a milhares de milissegundos.
Embora o Joomla não tenha suporte integrado para HTTP/2 Server Push (ainda?), você sempre pode usar o plugin Server - HTTP/2 Push de Michael Richy. Lembre-se de que o HTTP/2 Push só acontece na primeira vez que um visitante solicita um recurso durante a sessão do usuário. Ao testá-lo em seu site, lembre-se de não apenas limpar o cache do navegador, mas também os cookies enviados pelo seu site para redefinir a sessão.
Contiua em
https://www.dionysopoulos.me/joomla-performance-tuning-iii-static-media-optimization.html