Quando usar e não usar ETags


9

Eu estava olhando nosso site no WebPageTest.org e uma das recomendações para acelerar o site é:

Os cabeçalhos ETag geralmente não devem ser usados, a menos que você tenha um motivo explícito para precisar deles

Eu queria saber o que isso significa. Isso significa que o conteúdo estático que você sabe que não será alterado não deve tê-los ou significa que o conteúdo que você sabe que estará mudando regularmente não deve tê-los ou significa que você não deve usá-los geralmente, a menos que tenha um necessidade específica.

Se for o último, quando é o momento certo para usá-los? Obrigado por qualquer ajuda.

Respostas:


8

ETags são uma alternativa para (mas podem ser usadas em combinação com) "Last-Modified-Time" para determinar a validação do cache.

O cliente pode enviar uma pré-condição, como se-corresponde ou se-nenhum-corresponde com base no ETag. Isso não é apenas para solicitações GET (que é o que o webpagetest.org faz), você pode usar a "atualização oportunista" para que uma solicitação PUT tenha uma pré-condição e não executará a operação de atualização se o recurso tiver sido atualizado desde que o ETag foi adquirido pela última vez.

Simplificando: você pressiona editar em uma página do seu CMS, seu amigo pressiona a tecla editar em uma página do seu CMS, seu amigo executa a edição e pressiona salvar e, finalmente, pressiona o botão salvar - sem um cabeçalho HTTP ETag ou Content-MD5 que você precisaria Para reinventar a roda para evitar que ocorram problemas (como limpar as alterações de seus amigos), a solução já faz parte do protocolo HTTP e, portanto, faz sentido usá-la.

Geralmente, eu concordo com a AOL (que administra o webpagetest.org) em seus conselhos "tamanho único" - é melhor não entupir os cabeçalhos HTTP com strings criptográficas (ETags geralmente não são bonitas ou legíveis por humanos) quando um segundo de diferença ( que o horário da última modificação pode detectar) fará o trabalho em questão.

Se uma página estiver sendo atualizada várias vezes por segundo e você precisar absolutamente da versão mais precisa mais recente a ser exibida, convém experimentar outras soluções que não sejam HTTP GETs ou apenas usar ETags.

Tenha cuidado para que suas ETags não incluam informações do sistema de arquivos, da configuração do servidor, etc. (como inodes padrão no Apache), caso contrário, você terá problemas quando houver dois servidores (as ETags de cada um não corresponderão).


Isso está ok. Há um exemplo do qual não tenho certeza: se você possui várias versões de conteúdo em um URI (como as versões para celular ou Internet Explorer), ETags podem ser usadas para pesquisar em TODAS as versões por uma correspondência (daí é chamado se- nenhuma correspondência, se não houver correspondência) - dependendo de quem você perguntar, há respostas diferentes (como não há um URI permanente para várias representações, etc.).
Metalshark 11/11/10

7

Parafraseando a excelente avaliação de Coding Horror do plug-in YSlow Firebug (que parece que o WebPageTest.org está usando como base para sua avaliação):

"O Yahoo é um dos sites mais movimentados do mundo - seus problemas provavelmente não são seus."

Se você não está lidando com milhões de exclusivos em toda a sua rede com balanceamento de carga todos os dias, há uma boa chance de que as sugestões fornecidas não sejam todas as escolhas certas ao otimizar seu site.


Agradeço o comentário, mas você está errado. Steve Sounders explica aqui: stevesouders.com/blog/2010/09/07/webpagetest-org-and-page-speed (Ele é um grande defensor de melhorias úteis - ou seja, não apenas melhorias que funcionarão para o Google.) Nosso site é definitivamente grande o suficiente para sentir um aumento de velocidade com essas melhorias (e já o tem).
Django Reinhardt

2
A extensão yslow firebug agora inclui um teste para sites menores, que é muito mais realista para a maioria dos sites.
John Conde

11
@Django Reinhardt - I reformulado minha resposta, é verdade que muitos ! Das sugestões são válidos para qualquer site, mas ETags em particular é porque contencioso, em Y 's caso, os conflitos de recursos com balanceamento de carga
danlefree

O link que você forneceu tinha um link para a descrição do ETags do Yahoo ( developer.yahoo.com/performance/rules.html#etags ), que responde muito bem às minhas perguntas. (Sim, provavelmente seria melhor não servirmos ETags.) Obrigado.
Django Reinhardt

11
@ Django: Se você tem vários servidores, ETags pode ser um problema. No entanto, desde que o mesmo arquivo sempre retorne o mesmo ETag, tudo ficará bem. Veja também: webmasters.stackexchange.com/questions/1459/…
DisgruntledGoat
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.