8768 sujets

Développement web côté serveur, CMS

Bonjour,

quelques questions sur la mise en cache et le développement.
J'ai récemment développé un site. Vu que j'apprends en construisant et que je ne suis pas un pro qui peut livrer un travail en quatre jours, j'ai expérimenté, ajouté ou changé du code et des images pendant au moins deux mois. Alors que le site était déjà en ligne et fonctionnel, j'y ai apporté soit des nouveautés dans le code, soit des améliorations. À chaque fois que je testais le site sur un mobile, je devais vider le cache de cet appareil, continuellement. Sur Firefox, j'ai un module qui permet de le faire en un clic.
La question que je me pose, c'est que se passe-t-il chez les visiteurs qui ignorent ces ajustements continus. Si leur cache n'est pas à jour, chez eux, c'est la cata. Sur mon htaccess, tout est réglé sur des longues durées de cache, sauf les fichiers html et css, qui sont sur 7200 secondes et qui sont ceux qui bougent toujours pendant la phase de construction.

Faut-il attendre d'avoir terminé un site pour le mettre en ligne ? Ce serait la fin de l'expérimentation pour nous, les amateurs. Ou faut-il mettre le htaccess sur de très faibles valeurs, avant d'avoir terminé ?

Comment font les professionnels qui livrent un site à des clients ? Le font-ils quand tout est terminé et ne bougera plus ?
Modifié par Bongota (28 Oct 2021 - 17:51)
Salut

Enfaite y'a deux trucs :

Soit tu géres pas le cache au niveau du code et effectivement tu dois des fois forcer le refraichissement du cache sur le navigateur.

Soit tu gères ton cache avec du code php etc... et là tu n'a pas besoin de forcer ton cache.

Par exemple, ajouter un version à tes fichiers css dans l'url permettrait de rafraichir le css à chaque fois. ou alors mettre en cache des parties du php permettrant également d'aller chercher les bonnes données si le cache est différents des données réels.

http://sdz.tdct.org/sdz/comprendre-et-utiliser-un-systeme-de-cache-php.html
Merci pour la réponse, mais je ne suis pas sous php et je ne maîtrise pas du tout cette technique (et je n'ai pas la nécessité de l'installer).
Tous les sites de vente de produits qui les changent régulièrement presque chaque semaine, utilisent alors php ? Il n'y a pas d'autres solutions, mis à part mettre de très faibles durées sur htaccess, tant que le site n'est pas finalisé ?
si tu n'utilise pas de php sur un site de vente tu utilise quel autre langage serveur ?
n'importe quel langage serveur utilise son propre gestionnaire de cache qu'on peut nous mêmes utilisé dans nos dev.
Mon site n'est pas un site de vente, je le mentionnais pour exemple, mais c'est vrai qu'un site de vente doit utiliser php.
Mon hébergement est sous Apache et je peux faire ce que je veux avec le htaccess.
Lien très intéressant. On voit, au fur à à mesure des années, que les solutions proposées sont abandonnées les unes après les autres. Il semble même que Google déconseille d'utiliser JavaScript pour agir sur le cache.
Sur le site que tu m'a donné, l'avant dernier post date de 2009 ! Idem pour ici :
https://stackoverflow.com/questions/1917586/http-cache-check-with-the-server-always-sending-if-modified-since/1917827#1917827
Il y a aussi cette page, très complète : https://www.mnot.net/cache_docs/index.fr.html
Tout ça est bien complexe. Le mieux est peut-être de mettre le html, css et JavaScript à une très faible valeur sur le htaccess et augmenter quand le site est terminé.
N'empêche, on ne sait jamais ce que fait le visiteur avec son navigateur. Chez moi, le cache est vidé à chaque fermeture de Firefox, ainsi que l'effacement de tous les cookies.
Comme tout le monde, j'ai le même problème.
Ce problème est très vicieux car
1) il ne respecte pas les règles initiales du Web, selon lesquelles les navigateurs devaient s'assurer que la version en cache est bien la bonne en dialoguant avec le serveur.
En raison de la surcharge d'échanges sur le réseau cette règle a été abandonnée par tous les navigateurs depuis longtemps. Des choses qui marchaient sans problème en 2000 ne marchaient plus en 2010.
2) ceux qui on le plus d'inconvénients à cause ce comportement sont les utilisateurs les plus réguliers du site: ils ont plus de probabilité d'avoir un fichier en cache, et l'utilisation fréquente fait que quand le cache est plein ces fichiers ne sont pas récupérés.

Je me souviens d'une personne qui m'a envoyé une photo pour remplacer la sienne sur le site. La photo était bien changée, mais avec le cache elle voyait toujours l'ancienne des mois plus tard car le nom de la photo est gérée par programme à partir de l'identifiant de la personne dans la base de données des abonnés. J'ai résolu ce problème en PHP.

Pour un autre site dans lequel le propriétaire ne tient pas à ce que ses pages HTML soient déroutées vers PHP, j'ai fait la chose suivante:
chaque fois que l'utilisateur modifie un fichier, un programme retrouve toutes les occurrences d'appel à ce fichier et modifie l'appel.
Par exemple si le fichier truc.js est modifié le 29 octobre 2021 à 12h59, les appels sont modifiés en

<script src="truc.js?202110291259"</script>


ça marche très bien mais.... le programme qui fait les modifications est écrit en PHP Smiley ohwell
Il doit être possible de faire ça automatiquement sur la version du site qui est sur ton ordinateur par un jeu de macros dans l'éditeur de texte que tu utilises.

Rien de plus simple à proposer.

Bon courage!
Modifié par PapyJP (29 Oct 2021 - 13:11)
Heureux ceux qui ne se posent pas de questions à ce sujet.
La mise en cache a une grande influence sur les performances et les tests en ligne le font savoir rapidement. Beaucoup n'attachent pas trop d'importance à ça, du moment que ça fonctionne, mais la consommation de bande passante est aussi un problème écologique.

Avec le plugins Wordpress Rocket, il suffit de cliquer sur le bouton “Clear Cache”, d'après la doc. Le problème de la mise à jour du site serait réglée, alors ? Mais ce n'est pas automatique, le gestionnaire du site doit le faire, chaque fois qu'il engage des modifications. Ou alors, j'ai zapé une chose à ce sujet.
après, il faut savoir que tu ne peux pas réellement "forcer le navigateur à vider son cache" que ce ce soit en js ou htaccess.

le mieux est d'utilisé des version comme je t'ai dis et comme papy te la montrer pour son js.

exemple :
?ver=1.1"

<link href="assets/css/style.css?ver=1.1" rel="stylesheet" type="text/css" />
Bonjour,
En complément des réponses pertinentes déjà apportées, tu peux également ajouter un entête HTTP ETag avec une valeur calculée à partir du Hash du contenu de la page (ex. SHA256 ou autre).
Exemple en PHP :
header('Etag:"' . hash('sha256',$content,FALSE) . '"',true);

La variable $content stockant le contenu de la page HTML est obtenue en utilisant une sérialisation dans un flux :
ob_start();
try
{
        ... (instructions / echo)
}
finally
{
        // Récupération du contenu du flux HTML
        $content = trim(ob_get_contents());
        ob_end_clean();
}

C'est la structure que j'utilise dans mon générateur et elle semble donner de bons résultats, que je sois en développement ou en production. Parfois certains utilisateurs ont tout de même remonté un défaut de rafraîchissement probablement dû au fait que chaque navigateur gère ceci un peu à sa sauce.
Je précise que le générateur gère automatiquement la CSP et ajoute aux balises <style> et <script> contenues dans le document un attribut HTML @nonce. De ce fait, chaque page ayant une valeur différente générée par le serveur le contenu de l'ETag sera forcément différent en sortie.
Pour limiter, voire éviter, le problème le générateur met en place des instruction "nocache" lorsqu'il est paramétré pour l'environnement DEV et cache (si je le lui demande) lorsqu'il est en environnement PROD et sérialise les fichiers qui seront transférés par FTP vers l'hébergeur.
Cordialement.
Merci pour les infos,
en attendant de tester les différentes propositions, j'ai revu le fichier htaccess, expire et autres commandes et j'y ai trouvé des valeurs pas normales, que j'avais négligées.
Le sujet reste d'actualité.