Lorsque vous utilisez Spring Boot + Freemarker pour développer des projets Web, certains fichiers statiques sont relativement importants, et s'ils sont accessibles sur un PC, la vitesse sera beaucoup plus lente lors de l'accès sur un téléphone mobile, surtout lors de l'utilisation du trafic, et il consommera beaucoup de trafic.
En attrapant la demande, vous pouvez constater que chaque fois que vous entrez une page, vous devez charger un fichier statique. Si une entreprise qui n'est pas à court d'argent peut placer le fichier statique sur un CDN pour accélérer l'accès ou utiliser Nginx pour mettre en cache des fichiers statiques.
Aujourd'hui, je vous présenterai une autre méthode d'optimisation du cache. Grâce au mécanisme de cache de Spring, les fichiers statiques sont mis en cache. Pour configurer le cache de fichier statique dans Spring Boot, il vous suffit d'ajouter la configuration suivante au fichier de configuration:
# Temps de cache de ressources, unité secondes spring.resources.cache-period = 604800 # activer la compression gzip spring.resources.chain.gzipped = true # activer le cache Spring.resources.chain.cache = false
Vous pouvez vous référer à la documentation pour la configuration: Spring Resources Gestion Section de https://docs.spring.io/spring-boot/docs/1.5.4.release/reference/htmlsingle/
Après avoir ajouté la configuration du cache, après avoir accédé à la page, les ressources statiques chargées seront mises en cache. Au cours de la deuxième visite, nous ne demanderons plus le téléchargement. En attrapant le paquet, nous pouvons voir qu'il a en effet été mis en cache.
Dans la colonne de taille, il y a du cache de mémoire. La ressource est mise en cache dans la mémoire du navigateur, et certains fichiers sont mis en cache sur le disque, c'est-à-dire à partir du cache de disque.
Le but de l'optimisation est d'atteindre, mais il y a un petit problème qui n'a pas été résolu, c'est-à-dire si mon fichier de ressources change, tel que le fichier CSS est modifié, et lorsque mon serveur le publie, il y aura toujours un cache sur l'utilisateur.
Le meilleur effet est lorsque le fichier change ou lorsque le programme du serveur redémarre, la demande de l'utilisateur doit télécharger les dernières ressources sur le serveur. Lorsqu'il n'y a pas de redémarrage, utilisez le contenu mis en cache, afin que l'utilisateur puisse voir le dernier contenu immédiatement après le changement.
Nous pouvons utiliser le numéro de version pour résoudre ce problème, qui est d'ajouter un numéro de version après la ressource statique, et de modifier le numéro de version lorsque la ressource change, il n'y aura donc pas de problème.
Comment l'utiliser est comme suit:
<link rel = "Stylesheet" href = "css / main-pp.css? version = $ {version!}" rel = "externe nofollow" />L'utilisation est très simple, la clé est d'où vient la valeur de la version?
Nous pouvons définir cette valeur via le code avant de démarrer:
System.SetProperty ("version", version);Cette valeur peut être transmise par les args de la méthode principale et transmise dynamiquement au programme dans le script qui démarre le projet. Le script de démarrage peut obtenir la valeur MD5 du pot de programme comme numéro de version. De cette façon, lorsque le programme serveur redémarre, le numéro de version change et le cache devient invalide.
Ensuite, obtenez cette valeur dans le filtre et définissez-la sur la demande et vous pouvez l'utiliser dans chaque page.
String version = System.getProperty ("version"); req.setAttribute ("version", version == null? "1.0.0": version);En plus de cette méthode de passage des paramètres, vous pouvez également utiliser des plugins emballés personnalisés pour remplacer la version par du contenu spécifique lors de l'emballage.
La méthode ci-dessus consiste à contrôler les modifications de fichiers en générant vous-même une version. En fait, Spring MVC a fourni la fonction de gestion de version des fichiers statiques. Il y a deux façons. L'une consiste à générer le numéro de version via MD5 de la ressource. Si le contenu du fichier change, MD5 changera certainement également. Une autre façon consiste à préfixer la ressource avec un numéro de version.
Md5
Ajoutez la configuration suivante au fichier Propriétés:
printemps.resources.chain.strategy.content.enabled = truspring.resources.chain.strategy.content.paths = / **
Traitement de l'ajout d'URL:
@ControlleRAdvicePublic Class ContropleConFig {@Autowired ResourceUrlProvider ResourceUrlProvider; @ModelAtTribute ("URLS") Public ResourceUrlProvider URLS () {return this.resourceUrlProvider; }}L'utilisation de la page est la suivante:
La copie de code est la suivante:
<link rel = "Stylesheet" type = "text / css" href = "$ {urls.getforlookuppath ('/ css / main-pp.css')}" rel = "externe nofollow">
Après la compilation, il deviendra le contenu suivant:
La copie de code est la suivante:
<link rel = "stylesheet" type = "text / css" href = "/ css / main-app-4v371326bb93ce4b611853a309b69b33.css" rel = "external nofollow">
Numéro de version
Ajoutez la configuration suivante au fichier Propriétés:
printemps.resources.chain.strategy.fixed.enabled = truspring.resources.chain.strategy.fixed.paths = / js / **, / v1.0.0 / ** printemps.resources.chain.strategy.fixed.version = v1.0.0
L'utilisation de la page est la suivante:
<script type = "text / javascript" src = "$ {urls.getforlookuppath ('/ js / main.js')}"> </ script>Après la compilation, il deviendra le contenu suivant:
<script type = "text / javascript" src = "/ v1.0.0 / js / main.js"> </ script>
Quelle que soit la méthode que vous utilisez, vous pouvez réaliser l'effet et la charge de travail ne sera pas trop grande. L'optimisation sera infinie et vous aurez terminé.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.