web-dev-qa-db-fra.com

Comment forcer la suppression des données de cache / navigateur dans le navigateur?

Scénario: J'ai mis à jour un ancien Joomla! site web de la version 2.5 à la dernière version de Joomla !. Après cela, le site de mon point de vue a l’air qui convient. Si j'essaie d'accéder au site depuis un autre ordinateur ayant déjà accédé au site avant la mise à niveau, le code CSS semble être obsolète.

Solution: Pour résoudre ce problème, j'efface le cache et les données de navigation via le navigateur. Les problèmes sont résolus.

Mesures de prévention: J'ai examiné mes composants personnalisés et je n'ai pas de mécanisme de sauvegarde en cache, alors je devinez il s’agit d’un problème lié au navigateur. La question est, comment puis-je éviter que cela se produise à l'avenir?

Raisonnement: Si mes précédents utilisateurs accèdent au site, tout aura l'air mauvais et je ne peux pas m'attendre à ce qu'ils sachent qu'ils doivent actualiser leur cache.

Recherche:

J'ai examiné la gestion des versions de Joomla ( https://www.joomlart.com/tutorials/joomla-tutorials/tutorial-how-to-enable-content-versioning-in-joomla-site )

J'ai examiné l'effacement du cache ( https://forum.joomla.org/viewtopic.php?t=949662 )

Rien ne semble être une solution concrète.

S'il existe une "meilleure pratique" pour ce type de situation, veuillez en faire part, je serais ravi de tout apprendre à ce sujet.

4
Nick

J'ai fait face au même problème plusieurs fois. Entre-temps, j'ai appris que l'on peut forcer le navigateur à vider son cache uniquement par chargement des actifs de gestion de versions. Vous devez donc rechercher où votre modèle charge ses fichiers CSS et ajouter à la fin de la commande de chargement un type de chaîne de contrôle de version, comme "? V = xxx". Une fois que le navigateur a mis en cache la chaîne de version précédente, vous pouvez facilement le forcer à recharger cet actif en changeant simplement le numéro de version en le augmentant.

Ce n’est que la "meilleure pratique" que je connaisse. Jusqu'à présent, aucun plug-in système ne permet d'automatiser cette procédure. Vous devrez donc le faire manuellement en modifiant le fichier .php du modèle correspondant, qui charge ses ressources (généralement une sorte d'index.php).

La même astuce peut également être utilisée pour recharger des fichiers .js, mais ils ne font pas partie de votre question et de votre préoccupation.

4
Mikan

Vous pouvez utiliser mediaVersion. Il y a plusieurs façons de le faire. Regardez dans ces 2:

Ajouter manuellement la version aux fichiers chargés: $v = JFactory::getDocument()->getMediaVersion()

JHtml versioning des fichiers chargés:

// Add script
JHtml::_('script', 'xxx.js', array('version' => 'auto'));
// Add Stylesheets
JHtml::_('stylesheet', 'xxx.css', array('version' => 'auto'));
3
Alexandr

Le seul moyen d'éliminer de manière fiable le cache des navigateurs clients consiste à modifier le nom de l'actif en question. obliger tous les navigateurs à le télécharger.

1
Seth Warburton

Vous pouvez utiliser JCH Optimize pour combiner et optimiser la livraison de tous les fichiers de script - CSS et Java. Chaque fichier combiné reçoit un nouveau nom lorsque vous effacez le cache du plug-in.

J'utilise toujours la version PRO, qui est extrêmement efficace et vaut tout l'argent.

1
KlintWeb

Ajoutez l'horodatage du fichier en tant que paramètre afin que le fichier ne soit pas mis en cache.

$mtime = filemtime('/path/to/script/script.js');
JFactory::getDocument()->addScript('/url/of/script/script.js?t='.$mtime);
1
Nagarjun