@Artemus24
a écrit :
merci pour tes conseils !
C’est avec plaisir que je le fais.
a écrit :
Mais cela s'acquière par l'expérience, et en ce domaine, je ne suis pas le seul à en manquer.
mais ça c'est certain, j’ai 12 ans d’expérience dans le développement web et j’en apprends encore, ça évolue très vite… c’est parfois difficile de trouver le temps pour tout suivre.
a écrit :
Sinon, pour ton problème, comment penses-tu solutionner le rafraichissement de ton site web sur les navigateurs des internautes ?
Il y a méprise… moi je n’ai pas de problème
.
Mais en résumé, voila ce que je fais quand je le peux :
Pour les fichiers statiques (css, javascript, voir images)
J’évite les adresses du genre :
<script src="/scripts/mon-script.js?20120426"></script>
afin de profiter de la mise en cache des proxy.
Je préfère donc :
Soit changer directement le nom du fichier dans la page… c’est pas un travail enorme mais faut également renomer le fichier physique, supprimer l’ancien etc.
<script src="/scripts/mon-script-20120426.js"></script>
Soit utiliser une adresse du genre
<script src="/scripts/version2/mon-script.js"></script>
et changer le numéro de version lorsque le script est modifié.
Si on veut éviter d’avoir à changer le nom physique du fichier et de supprimer l'ancien, on peut mettre en place une réécriture d’url comme par exemple :
RewriteRule ^/scripts/version([0-9]*)/(.*)$ /scripts/$2
BoilerPlate par exemple, regénère un nouveau nom de fichier script et remplace les références qu'il trouve dans les pages… mais effectivement les scripts de pré-traitement d'un site ne sont pas à la porté de tout le monde, faut un minimum d’expérience.
Pour les pages web dynamiques
Je ne force rien, je prends en compte… c’est là la grosse différence.
Je ne passe pas par une directive apache pour gérer les entêtes mais je le fais en PHP par exemple, justement pour faire du cas par cas.
Prennons un exemple concret, j’ai encore la plume légère ce soir
Admettons que tu génères avec PHP une page d’accueil un peu lourde parce qu’il y a beaucoup d’informations dedans et que tu veuilles gérer le cache du navigateur en fonction de la date de dernière modification de ta page.
À l’aide de PHP et de la variable $_SERVER, tu peux écouter les entêtes indiqués par le navigateur et répondre en fonction.
Par exemple voici le début de ta page fictive :
<?php
/*
La tu dois avoir un petit traitement de ton cru pour récupérer la date de dernière modification que tu as peut-être enregitrée dans une table de la base ou en RAM ou dans un fichier, etc.
*/
$lastModificationDate = ''; // Tu enregistres ta date dans cette variable
/*
si le navigateur a déjà visité la page et l’a en cache, il va indiquer dans cet entête la date du document qui lui avait été indiquée par le serveur
*/
$navigatorPageCacheDate = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false;
/*
Si la date de modification du document en cache sur le navigateur est la même que celle de dernière modification des informations alors on envoie juste un code 304 et on stop le script : de cette façon, il n'y a que les entetes qui sont envoyés. Le contenu de la page n’est ni généré (soulagement du serveur) ni envoyé (soulagement de la bande passante).
*/
if ($navigatorPageCacheDate == $lastModificationDate) {
header('HTTP/1.0 304 Not Modified');
exit();
}
/*
Sinon, ça veut dire que soit le navigateur n’a jamais visité la page ou que sa version n’est plus bonne dans ce cas, on indique dans l’entête la nouvelle date et on fait tout le gros traitement : recherche des infos dans la base de données, construction de la page et le contenu sera ensuite envoyé au navigateur.
*/
header('Last-Modified: ' . $lastModificationDate);
// Suite de ton traitement PHP :
// L'appel aux fonctions
// Les grosses requètes SQL ...
// La construction de la page ...
// etc.
?>
Bon ce code n’est pas testé, c’est pour donnée une idée. D’ailleurs il vaudrait mieux en faire une fonction (attention, les dates des entetes sont dans un format particulier) et il y en a d’autres entêtes que tu peux utiliser (pour utiliser des numéros de version à la place de dates de dernières modifications par exemple).
Modifié par Jules-F (26 Apr 2012 - 21:31)