Bei der Verwendung von Spring Boot + Freemarker zur Entwicklung von Webprojekten sind einige statische Dateien relativ groß, und wenn sie auf einem PC zugegriffen werden, ist die Geschwindigkeit beim Zugriff auf ein Mobiltelefon viel langsamer, insbesondere bei der Verwendung des Datenverkehrs und es wird viel Verkehr verbrauchen.
Wenn Sie die Anfrage erfassen, können Sie feststellen, dass Sie jedes Mal, wenn Sie eine Seite eingeben, eine statische Datei laden müssen. Wenn ein Unternehmen, das nicht zu wenig Geld ist, die statische Datei auf einem CDN platzieren kann, um den Zugriff zu beschleunigen, oder NGINX verwenden, um statische Dateien zu speichern.
Heute werde ich Ihnen eine andere Cache -Optimierungsmethode vorstellen. Durch den Cache -Mechanismus von Spring werden statische Dateien zwischengespeichert. Um den statischen Datei -Cache im Spring -Start zu konfigurieren, müssen Sie der Konfigurationsdatei nur die folgende Konfiguration hinzufügen:
# Ressourcen-Cache-Zeit, Einheit Sekunden Spring.resources.cache-period = 604800 # Aktivieren Sie die Gzip-Komprimierung Spring.Resources.Chain.gzipped = True # Cache Spring aktivieren.Resources.Chain.cache = false
Sie können sich auf die Dokumentation für die Konfiguration beziehen: Abschnitt zur Bearbeitung von Springressourcen von https://docs.spring.io/spring-boot/docs/1.5.4.release/reference/htmlsingle/
Nach dem Hinzufügen der Cache -Konfiguration werden nach dem Zugriff auf die Seite die geladenen statischen Ressourcen zwischengespeichert. Während des zweiten Besuchs werden wir den Download nicht mehr erneut anfordern. Durch das Fangen des Pakets können wir sehen, dass es tatsächlich zwischengespeichert wurde.
In der Spalte Größe gibt es aus Speichercache. Die Ressource wird im Speicher des Browsers zwischengespeichert, und einige Dateien werden auf der Festplatte zwischengespeichert, dh vom Festplattencache.
Der Zweck der Optimierung ist zu erreichen, aber es gibt ein kleines Problem, das nicht gelöst wurde. Wenn sich meine Ressourcendatei ändert, wie z.
Der beste Effekt ist, wenn sich die Datei ändert oder das Serverprogramm neu startet, die Anfrage des Benutzers die neuesten Ressourcen auf dem Server herunterladen muss. Wenn Sie keinen Neustart gibt, verwenden Sie den zwischengespeicherten Inhalt, damit der Benutzer den neuesten Inhalt unmittelbar nach der Änderung sehen kann.
Wir können die Versionsnummer verwenden, um dieses Problem zu lösen, nämlich eine Versionsnummer nach der statischen Ressource hinzuzufügen und die Versionsnummer zu ändern, wenn sich die Ressourcen ändert. Es wird also kein Problem geben.
Wie man es benutzt, ist wie folgt:
<link rel = "stylesheet" href = "css /main-App.css? Version = $ {Version!}" rel = "externer nofollow" />Die Verwendung ist sehr einfach, der Schlüssel ist, woher kommt der Versionswert?
Wir können diesen Wert über den Code einstellen, bevor wir beginnen:
System.SetProperty ("Version", Version);Dieser Wert kann über die Argumente der Hauptmethode übergeben und dynamisch an das Programm in dem Skript übergeben, das das Projekt startet. Das Startskript kann den MD5 -Wert des Programms als Versionsnummer erhalten. Auf diese Weise ändert sich die Versionsnummer, wenn das Serverprogramm neu gestartet wird und der Cache ungültig wird.
Nehmen Sie diesen Wert dann im Filter und setzen Sie ihn auf die Anforderung und Sie können ihn auf jeder Seite verwenden.
String Version = System.getProperty ("Version"); req.setAttribute ("Version", Version == NULL? "1.0.0": Version);Zusätzlich zu dieser Methode zum Übergeben von Parametern können Sie benutzerdefinierte gepackte Plugins verwenden, um die Version durch spezifische Inhalte bei der Verpackung zu ersetzen.
Die obige Methode besteht darin, Dateiänderungen zu steuern, indem Sie die Version selbst generieren. Tatsächlich hat Spring MVC die Versionsverwaltungsfunktion statischer Dateien bereitgestellt. Es gibt zwei Möglichkeiten. Man soll die Versionsnummer über MD5 der Ressource generieren. Wenn sich der Dateiinhalt ändert, wird sich MD5 definitiv auch ändern. Eine andere Möglichkeit besteht darin, die Ressource mit einer Versionsnummer zu präfixen.
MD5
Fügen Sie der Eigenschaftendatei die folgende Konfiguration hinzu:
Spring.Resources.Chain.Strategy.Content.Enabled = treespring.resources.chain.strategy.Content.Paths =/**
Verarbeitung des Hinzufügens von URL:
@ControllerAdvicePublic Class ControllerConfig {@autowired ResourceUrlProvider ResourceUrlProvider; @ModelAttribute ("urls") public ressourceURLProvider urls () {return this.resourceURLProvider; }}Die Verwendung der Seite ist wie folgt:
Die Codekopie lautet wie folgt:
<link rel = "stylesheet" type = "text/css" href = "$ {urls.getforlookuppath ('/css/main-App.css')}" rel = "external nofollow">
Nach der Zusammenstellung wird es zum folgenden Inhalt:
Die Codekopie lautet wie folgt:
<link rel = "styleSheet" type = "text/css" href = "/css/main-app-4v371326bb93ce4b611853a309b69b33.css" rel = "externer Nofollow">
Versionsnummer
Fügen Sie der Eigenschaftendatei die folgende Konfiguration hinzu:
spring.resources.chain.strategy.fixed.enabled = treespring.resources.chain.strategy.fixed.paths =/js/**,/v1.0.0/** spring.resources.chain.strategy.fixed.version = v1.0.0
Die Verwendung der Seite ist wie folgt:
<script type = "text/javaScript" src = "$ {urls.getforlookuppath ('/js/main.js')}"> </script>Nach der Zusammenstellung wird es zum folgenden Inhalt:
<script type = "text/javaScript" src = "/v1.0.0/js/main.js"> </script>
Unabhängig davon, welche Methode Sie verwenden, können Sie den Effekt erzielen und die Arbeitsbelastung ist nicht zu groß. Die Optimierung wird endlos sein und Sie werden durchgeführt.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.