web-dev-qa-db-fra.com

Mettre en cache un site en mutation

Je gère un site Web dont le contenu statique change au moins 4 fois par semaine et j'essaie de trouver le meilleur arrangement d'en-tête à utiliser.

Actuellement, tous les en-têtes liés à la mise en cache sont utilisés. J'ai le contrôle de cache défini sur must-revalidate avec une valeur super-basse max-age (60 secondes maximum). J'ai également en-tête Etag défini sur une valeur codée d'horodatage qui indique la dernière mise à jour du site Web. la valeur Etag n'est modifiée que lorsque le contenu du site Web est modifié. J'ai également un en-tête modifié en dernier, dont la valeur est équivalente à max-age, mais dans le format de date GMT approprié. Voici un exemple de mes en-têtes:

    HTTP/1.1 200 OK
    Date: Tue, 17 Mar 2015 06:24:14 GMT
    Server: Apache
    Set-Cookie: PHPSESSID=f7cf7d0171b7a7cba54aaddc90c7eabd; path=/;
    Vary: Accept-Encoding
    ETag: "d06a8d9a82809e0f35669ce1fb80dca3"
    Last-Modified: Tue, 17 Mar 2015 04:34:52 GMT
    Cache-control: max-age: 5,must-revalidate
    Expires: Tue, 17 Mar 2015 06:25:14 GMT
    Connection: keep-alive
    Content-Length: 22583
    Content-Type: text/html; charset=UTF-8

Je suis donc curieux de savoir quel est le meilleur moyen de mettre en cache un site qui change entre 3 fois par semaine (lorsqu'un nouveau contenu est ajouté) et 5 fois par jour (lorsque le site Web est en cours de réparation). Au début, je pense que supprimer complètement la ligne de contrôle du cache, mais je ne sais pas comment les mandataires apprécieront cela, et ma configuration actuelle contribue actuellement à mon score de F sur webpagetest.org pour la mise en cache du contenu.

Que suggéreriez-vous le meilleur arrangement de tête que je devrais avoir ou devrais-je laisser tel quel? Des idées?

3
Mike

Lorsque le nouveau contenu est lancé, il peut ne pas être absolument essentiel que les utilisateurs le voient immédiatement . Dans ce cas, vous pouvez assouplir vos contrôles de cache et permettre à votre contenu d'être mis en cache pendant une heure ou deux sans que l'utilisateur ne soit à nouveau validé. En fait, avec "must-revalidate", je ne vois pas l'intérêt de ne pas permettre à vos pages d'être mises en cache pour toujours.

Sinon, vos contrôles de cache me paraissent raisonnables. La suppression de tous les en-têtes de contrôle du cache permettrait de permettre à vos pages d’être mises en cache pour une durée indéterminée - et non comme vous le souhaitez.

2

Sauf si vous avez un niveau de mise en cache sophistiqué, la définition d'une durée de mise en cache courte n'est pas différente de la non mise en cache. Utiliser la mise en cache avec PHP sessions et ne pas varier par cookie est probablement une très mauvaise idée.

La meilleure solution consiste à définir un temps de cache très long et à modifier l'URL lorsque le contenu change. Cela dépend de l’accès que vous avez à votre serveur et de sa nature. Exécuter mod_pagespeed sur apsache est une solution très simple - mais vous devriez avoir un proxy inverse en cache en face.

0
symcbean