
Desenvolvi nas últimas semanas o uso de ETag nas páginas e posts do site, gerados dinamicamente por PHP no WordPress. Os arquivos estáticos, como imagens e arquivos JavaScript e CSS já usam o recurso pelo servidor Nginx.
As ETags, também chamadas de Entity Tags (ou tags de entidade), são respostas em cabeçalhos HTTP que identificam uma versão específica de um recurso. Isso melhora o uso de cache e poupa recursos, já que o servidor não precisa enviar o documento inteiro se ele não foi alterado.
O repositório está disponível no meu GitHub. Você pode usar em qualquer tema para WordPress, incluindo o Evolution, ou adaptar o código para outras aplicações em PHP.
Como o script cria a ETag?
Neste site, as ETags são basicamente geradas agrupando duas informações.
Primeiro, o script verifica quando o conteúdo da página foi modificado pela última vez. Esta informação pode ser a data e hora da última edição do post ou da página, ou a data e hora do último comentário na página em questão. A informação mais recente será a considerada.
Em segundo vem o conteúdo da própria página. Um hash é criado com base em todo o HTML gerado ao usuário, usando o recurso de output buffer do PHP.
Qualquer modificação do conteúdo é considerado. Dessa forma, instalação de novos plugins, edições nos menus de navegação e, claro, alterações no post resultarão em uma ETag diferente.
Como o script valida a Entity Tag?
Com a ETag criada, o script checa primeiramente se o usuário não está logado no painel administrativo do WordPress. Isso é necessário para evitar que a página fique gravada em cache durante a visualização de mudanças no conteúdo, como edição de páginas, posts e códigos PHP.
O script então verifica se o cabeçalho ETag em cache é igual ao que foi gerado na requisição, usando tanto validadores fracos e fortes.
Se os dados atendem a todos os requisitos, o script retorna o código de resposta HTTP 304 Not Modified (não modificado). Portanto, o browser mostrará ao usuário a versão em cache da página, salvando assim tráfego de rede e otimizando o carregamento.