Magento 1 – Cache

Cache é algo que invariavelmente temos que pensar sempre quando vamos começar uma nova loja com Magento.

Dependendo da complexidade do projeto, temos que nos atentar com diversos tipos: cache a nível de servidor (Apache, Nginx), do browser (cache de assets js, css, imagens), de banco de dados, a nível de hardware

OK, sou um desenvolvedor Magento e entendo que o controle de cache é vital para a performance, redução de custos com tráfego, dentre outras inúmeras qualidades.

Mas e quando o cache começa a atrapalhar não só a visualização das mudanças de código em etapa de desenvolvimento, mas também em produção, em uma loja funcional?

Cenário 1

* Acabo de instalar um módulo de checkout em uma página na minha loja para fazer um teste A/B de conversão com o checkout atual.
* Instalação: ok
* Erros 5xx: ok
* Página de checkout: cadê o módulo?

Cenário 2

Os clientes da loja estão insatisfeitos com o tamanho do produto quando visualizados em tablets.

* Media-query para tablets: ok
* Exibição do produto em ambiente local: ok

Subo as alterações para o ambiente de produção e na mesma hora aviso o dono da loja que a adequação foi realizada. Pego um dos tablets da empresa e acesso alguns produtos: nenhuma alteração.

Estes cenários não tão fictícios são naturais no dia a dia do nosso ator, o pobre desenvolvedor, e a causa deles é o vilão da história: o cache. Sabe qual o enredo dessa novela?

                                                  Mas… No meu computador funciona!

No computador do desenvolvedor do módulo do cenário 1 e no servidor de milhares de lojas que usam este módulo, funciona perfeitamente.

No do nosso ator, não. Já no Cenário 2, no computador de nosso ator funciona! Mas em produção, nem sinal de existência de qualquer mudança…

Para quem já tem alguma experiência com esse tipo de problema a solução é simples: limpar o cache.

Solução para Cache Server-Side

No Cenário 1, podemos ter alguma incompatibilidade entre o módulo novo e sua loja. Mas, na maioria dos casos, o erro está no cache server-side, controlado pelo Magento.

Na maioria das vezes resolver essa inconveniência é simples, bastando excluir todo o conteúdo da pasta var/cache ou atualizando-o via painel administrativo, em sistema > gerenciar cache

Na imagem acima, o cache está desabilitado por se tratar de uma loja em ambiente de teste. Apesar da alta frequência de erros atrelados ao cache do Magento ao incluir novos módulos e outros códigos em sua loja, não há como negligenciar o uso desse tipo de cache em ambiente de produção pois, como já citado neste artigo, os benefícios são inúmeros.

Caso a limpeza de cache não produza o resultado esperado — como no caso do Cenário 1, o aparecimento do “checkout de uma página“ — você deve empregar alguns métodos de debug (var_dump, logs…) e torcer para que o módulo de terceiros instalado esteja bem documentado e codificado.

Caso queira se aprofundar nos estudos sobre caching…

Ou até instalar um módulo de controle de cache e tentar entender como funciona…

Solução para Cache de Browser

Você limpa o cache do Magento, atualiza a página e… Nada.

Como descrito no Cenário 2, você provavelmente se deparou com uma situação de cache de browser.

Há alguns workarounds que você pode utilizar para testar se o problema está relacionado com esse tipo de cache ou não:

* CTRL + F5 para atualizar a página sem preservar o cache

* Abra uma aba anônima em seu navegador e carregue a mesma página

* Abra a ferramenta Google Chrome Developer Tools ou a correspondente a seu browser de preferência, selecione a opção de desabilitar cache e recarregue a página

Achou pouco? Abaixo você encontra mais de uma dezena de maneiras de fazer a mesma operação.

Limpar o cache é fácil… mas pedir para cada usuário de sua loja fazer o mesmo é um tanto quanto inviável, não?

Para tirar essa responsabilidade do usuário e deixar esse controle na programação da loja, usa-se uma técnica amada e odiada por muitos: query strings.

Ao colocar uma query string com um timestamp, por exemplo, no final do caminho do seu asset, forçará o browser a recarregar aquele arquivo em específico

Então toda vez que eu realizar alguma alteração de CSS ou javascript em minha loja, devo acrescentar ou alterar uma query string ao linká-los em meu html? Sim.

É válido ressaltar que há maneiras mais inteligentes do que mudar manualmente as query strings no próprio HTML, o que evitaria commits “sujos”, com alteração de parâmetro a cada vez que for mudar um asset

* No Magento você pode criar uma variável de configuração no painel administrativo que será concatenada em formato de query string em seu asset

* Em shell script, você pode pegar a timestamp atual, abrir o arquivo, concatenar o timestamp sempre quando realizar um commit, por exemplo

Entretanto, alguns gurus da área de performance Web dizem que a prática não é tão boa assim.

Cabe a você, desenvolvedor, decidir se deve ou não usá-la.

Com certeza existem mais inúmeras maneiras de invalidar temporariamente seu cache.

Este artigo se propôs a exemplificar algumas estratégias básicas e provocar o interesse do leitor em buscar novas formas de oferecer conteúdo atualizado e rápido em sua loja.

Se você se interessou, agora é sua vez de pesquisar sobre CDNs, Caching na AWS, cache da CPU, .htaccess, dentre outros.

Deixe nos comentários as estratégias de cache que você utiliza em sua loja Magento!

Obrigado pela atenção.

2017-11-16T16:59:49+00:00

RECEBA DICAS VALIOSAS NO SEU EMAIL

x