Y no sólo porque lo diga Yahoo! sino porque te ahorrán tiempo y dinero. Harán que tu servidor sea capaz de procesar más peticiones y que estas sean más rápidas.
Últimamente y a medida que mis sitios web están ganando en visitas, estoy muy interesado en el tema de la optimización de los proyectos web y poco a poco, voy incorporando varias técnicas que incorporo en la fase final del desarrollo.Una de ellas es la de añadir ETag para los proyectos web que generan contenido dinámico.
La mayorÃa de los sitios web con contenido dinámico no están continuamente cambiando el contenido, sino que éste es modificado en momentos muy puntuales. Todo el tiempo entre un cambio y otro, el contenido es el mismo y sin embargo, hacemos que el servidor vuelva a generarlo y a enviarlo al servidor como si fuera completamente nuevo.
Las ETags son unos identificadores que se envÃan al navegador para identificar el «estado» de una página dinámica o de un archivo estático. Son fácilmente configurables en Apache para los archivos estáticos, pero pocas veces son usadas cuando el contenido es generado a partir de fuentes dinámicas.
Imaginemos el caso de este blog. Cada página es modificada únicamente cuando yo hago algún cambio desde el panel de control o cuando alguien deja/modifica un comentario. El resto del tiempo, el contenido de las páginas no varÃa.PodrÃamos por tanto identificar a cada página por su URL (p.ej.  «/2008/10/03/en-espana-se-vende-menos-que-se-compra/» ) y por la fecha en que fué actualizada. Si unimos ambas cosas, podrÃamos obtener un identificador único. Por ejemplo:
$etag = md5 ($_SERVER['REQUEST_URI'] . $last_modification_time);
Esa serÃa por lo tanto su Etag. Â Y podrÃamos enviarla al navegador de la siguiente forma:
header("Etag: $etag");
El navegador, cada vez que pida esa página, enviará un header especial «If-None-Match» preguntando si es la misma página que ya le fué enviada la última vez. Con lo que antes de generar la página, podrÃamos comprobar:
if (trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag) {
header("HTTP/1.1 304 Not Modified");
exit;
}
De esta forma, informarÃamos al navegador de que la página no ha cambiado y por lo tanto no tendrÃamos necesidad de volver a generarla ni de enviarla por la red. Asà ahorrarÃamos tiempo de proceso en el servidor (carga) y ancho de banda, además de ofrecer una mejor experiencia al usuario.
Por supuesto esta no es una solución válida para cualquier proyecto o situación ( en algunas puede ser incluso contraproducente ), pero si que supone una mejora en una gran parte de los desarrollos. Al menos asà ha sido para mà ;)
En el Zend Framework también tenemos ya una propuesta para usarlas.