web-dev-qa-db-fra.com

Comment ajuster ma mise en cache HTTP pour optimiser les performances de livraison des pages?

J'ai lu un article sur la mise en cache à l'adresse http://vadmyst.blogspot.ca/2005/09/server-side-etag-vs-cache-control-max.html et j'utilise actuellement les deux. cache-control, expires et validation du type Etag sur mon site Web.

L'article stipule que je devrais combiner le contrôle du cache et Etag pour de meilleures performances et il a été mentionné précédemment qu'ils utilisaient 3600 pour max-age sur leur serveur.

Étant donné que mon site est mis à jour au moins une fois par jour (et parfois plusieurs fois par jour si le contenu est supprimé) et que de nombreux visiteurs sur mon site sont des étudiants dont la moitié sont probablement en état d'ébriété, je ne les vois pas être assez patients pour attendre une heure. pendant que le navigateur fournit du contenu obsolète à l'utilisateur.

D'un autre côté, l'article indique également (et je suis d'accord) que si j'utilise uniquement Etag et qu'aucun cache-contrôle/expire, les demandes sont toujours adressées au serveur et, en fonction de l'état d'actualisation des données résultantes, un statut HTTP 304 est renvoyé ou un statut HTTP 200 est renvoyé avec le contenu. Le problème avec cette idée est qu’environ 500 octets de bande passante sont utilisés par requête uniquement pour envoyer/recevoir des en-têtes avec des retours chariot attachés. La page réelle sur mon site Web en moyenne compressé est d'environ 4000 octets.

Étant donné que j'utilise un serveur Web Apache qui ne prend pas en charge HTTP 2.0, je pense que la seule solution consiste à rechercher un nombre magique à utiliser pour la valeur max-age du contrôle de cache.

Si je choisis un nombre trop élevé, les étudiants impatients qui manquent de connaissances en informatique et qui visitent le site risquent de ne pas savoir utiliser la fonction d'actualisation et/ou d'effacer le cache pour ensuite me dire que mon site Web ne fonctionne pas.

Si je choisis un nombre trop bas, le nombre de requêtes adressées au serveur sera plus important car le cache du navigateur local expirera et les seules personnes qui bénéficieront d'un cache trop faible sont les visiteurs super-impatients.

Alors, quel serait le meilleur moyen de régler ce problème? Devrais-je abandonner le contrôle du cache/expirer et simplement utiliser Etag sans me soucier de l'utilisation de la bande passante? ou devrais-je utiliser cache-control/Expires? Et si j'utilise cache-control/Expires, à quoi doit correspondre max-age? Je veux suivre les normes et rendre tous les visiteurs heureux en même temps.

1
Mike

Il n’existe pas de solution unique pour la mise en cache HTTP. La bonne solution pour vous dépend de votre site et de la nature de votre trafic. Par exemple. la plupart de vos demandes proviennent-elles de visiteurs assidus, ou les gens visitent-ils votre site une fois pour ne jamais revenir? Si ce sont des visiteurs assidus, à quelle fréquence visitent-ils? Sont-ils susceptibles de vérifier régulièrement quelque chose de nouveau (comme les visiteurs peuvent être sur un site de nouvelles)?

Pour les pages HTML du moins, il s’agit généralement d’un compromis entre des pages toujours à jour et des pages optimisées pour la mise en cache: vous devez décider quel est le bon point de cette échelle pour votre site. Si la majorité de votre trafic est constituée d'étudiants impatients à la recherche du dernier contenu, personnellement, je laisserais tomber max-age et laisserais simplement ETags faire leur travail. 500 octets ne semblent pas préoccupants, sauf si votre site reçoit un trafic extrêmement intense.

Pour les actifs statiques, c'est une autre histoire, car vous pouvez définir des en-têtes d'expiration (ou max-age) plus longs, mais modifier les URL lorsque les actifs eux-mêmes changent.

1
Tim Fountain