Invalidation du cache navigateur automatique
- Role : tous
- Page(s) / Url(s) : *.js / *.css
- Comportement attendu : Les utilisateurs ne devraient pas avoir à se soucier du cache
- Comportement actuel (si besoin) : Souvent on doit indiquer à des utilisateurs de rafraichir sans cache (CTRL+F5) suite à une mise en production
- Proposition technique :
Contraintes
- Ne pas ajouter de lourdeur de type compilation d'asset
- Faire un système robuste (en cas de panne le pire cas doit être le comportement actuel i.e pas de gestion du cache navigateur)
- Faire un système n’alourdissant pas l’exécution LabNbook
Proposition
- Un script, appelé par
refresh.sh
(donc au git pull en prod) calcul pour chaque fichierjs
etcss
depublic/
etnode_modules/
un hash (md5
suffit) et met à jour un indexjson
- Au démarrage de l'application (traitement d'une requête), ce json est chargé dans une variable de configuration
- La fonction
\App\Helper::loadAssset
, qui est utilisée pour charger tous nosjs
/css
, suffixe tous les fichiers présents dans l'index par?hash=$hash
.
Avantages
Ce système ne rajoute aucune complexité et peut être implémentée de façon robuste (voir plus bas)
Problèmes possibles
- Index corrompu : format json non valide : doit être traité au chargement de la config (étape 2.), initialiser l'index à
[]
- Index incomplet : Si un fichier ne figure pas l'index, dans l'étape 3 on peut mettre
$hash
à la chaine vide ou à la date courante - Hash corrompu : Si un hash est mauvais dans l'index, cela n'aura pas d'impact, le fichier se chargera bien, au pire on invalidera des caches navigateurs pour rien