EinführungDas Zwischenspeichern statischer Ressourcen ist ein Punkt der Front-End-Leistungsoptimierung. Daher wird der Cache im Front-End-Entwicklungsprozess im Allgemeinen maximal genutzt (hier hauptsächlich starkes Zwischenspeichern). Zurück zum Thema dieses Artikels: Wenn Sie in einem mit Webpack erstellten Projekt nicht aufpassen, kann das erstellte Projekt möglicherweise kein statisches Ressourcen-Caching erreichen, selbst wenn der Server eine Cache-Strategie festlegt. Wie kann Webpack also den Effekt der Cache-Nutzung erzielen? Lassen Sie uns weiter unten über dieses Problem sprechen. Unterscheiden Sie zwischen mehreren verschiedenen Hashes Wir alle wissen, dass Webpack verschiedene Hashwerte hat, darunter HashHash bezieht sich auf das gesamte Webpack-Build-Projekt. Der dem Hash entsprechende Wert ist bei jedem Erstellen des Projekts unterschiedlich, auch wenn die Projektdatei nicht „geändert“ wurde. Tatsächlich wurde es geändert, da jedes Mal, wenn Webpack gepackt und kompiliert wird, der Webpack-Laufzeitcode eingefügt wird, was zu Änderungen am gesamten Projekt führt, sodass sich der Hash-Wert jedes Mal ändert. Am Beispiel meines Projektcodes folgt hier ein Vergleich des Codes vor und nach zwei Builds ohne jegliche Änderungen. Es ist ersichtlich, dass sich der Hash der entsprechenden Projektbuilds zweimal geändert hat. Daraus lässt sich schließen, dass mit dieser Methode kein Caching erreicht werden kann, da sich der Hash jedes Mal ändert. chunkhashChunkhash ist, wie der Name schon sagt, mit dem von webpack gepackten Chunk verwandt. Insbesondere analysiert webpack die Abhängigkeiten der Eintragskonfigurationsdatei, erstellt darauf basierend den Eintragsblock und generiert den entsprechenden Hashwert. Verschiedene Chunks haben unterschiedliche Hashwerte. Im Allgemeinen werden in einem Projekt die öffentliche Abhängigkeitsbibliothek und die Programmeintragsdateien isoliert und separat verpackt, und Chunkhash wird zum Generieren von Hash-Werten verwendet. Solange die öffentliche Abhängigkeitsbibliothek unverändert bleibt, ändert sich der entsprechende Chunkhash nicht, wodurch der Zweck des Caching erreicht wird. Im Allgemeinen wird Chunkhash für Webpack-Einträge im Projekt verwendet, was sich speziell im Ausgabekonfigurationselement widerspiegelt: modul.exporte = { Eintrag: { App: './src/main.js', Anbieter: ['reagieren', 'Redux', 'reagieren-dom', 'reagieren-redux', 'reagieren-router-redux'] }, Ausgabe: { Pfad:Pfad.join(__dirname, '/dist/js'), Dateiname: „[name].[chunkhash].js“ } ... } Schließlich lauten die Ergebnisse der Chunkhash-Kompilierung von App und Anbieter wie folgt InhaltshashContenthash stellt den vom Dateiinhalt generierten Hashwert dar. Unterschiedliche Inhalte generieren unterschiedliche Contenthash-Werte. In einem Projekt besteht die übliche Vorgehensweise darin, das CSS im Projekt zur Referenz in entsprechende CSS-Dateien zu extrahieren. Verwenden Sie es beispielsweise in einer Webpack-Konfiguration wie folgt: modul.exporte = { ... Plugins: [ neues ExtractTextPlugin({ Dateiname: 'static/[name]_[chunkhash:7].css', deaktivieren: false, allChunks: wahr }) ... ] Bei der obigen Konfiguration besteht ein Problem, da Chunkhash verwendet wird und Chunkhash mit davon abhängigen Chunks geteilt wird. Im obigen App-Chunk-Beispiel hängt es beispielsweise von einer index.css-Datei ab. Der Hash von index.css folgt dem Chunkhash der App. Solange sich die App-Datei ändert, ändert sich auch ihr Hashwert, selbst wenn sich die index.css-Datei nicht ändert, was zu einem Cache-Fehler führt. Dann können wir den Implementieren des JS-Cache Die Hauptfunktion des Webpack-Plugins Dieses Plug-In ist eine häufig verwendete Optimierungsfunktion in Webpack-Projekten und wird in fast jedem Webpack-Projekt verwendet. Vorteile der Verwendung dieses Plugins:
Wenn das Plug-In im Projekt jedoch falsch geöffnet wird, kann der zweite oben genannte Punkt nicht erreicht werden, da in diesem Fall: Der mit dem öffentlichen Code oder dem Bibliothekscode gepackte Entry Chunk, der nicht geändert wurde, ändert sich mit den Änderungen anderer Geschäftscodes, was dazu führt, dass der Long-Cache-Mechanismus auf der Seite fehlschlägt. Öffnen wir also Falsche Verwendung von CommonsChunkPluginWenn wir die gemeinsamen Bibliotheken unseres Projekts wie React, React-Dom und React-Router vom Geschäftscode isolieren und sie als Vendor-Chunks extrahieren, sieht die Webpack-Konfiguration wie folgt aus: const webpack = erfordern("webpack"); const path = require('Pfad'); modul.exporte = { Eintrag: { App: "./src/main.js", Anbieter: ["reagieren", "reagieren-dom", "redux", "reagieren-redux", "reagieren-router-redux"] }, Ausgabe: { Pfad: Pfad.auflösen(__dirname, 'Ausgabe'), Dateiname: "[name].[chunkhash].js" }, Plugins: [ neues webpack.optimize.CommonsChunkPlugin({Namen: ["Anbieter"]}) ] }; Oben werden einige grundlegende Bibliotheken des Projekts in einem Block namens „Vendor“ und geschäftsbezogene Codes in einem Block namens „App“ gepackt. Die Ergebnisse der Webpack-Verpackung und -Kompilierung sind wie folgt: Nachdem wir den Geschäftscode app.js geändert haben, sind die Ergebnisse der Neukompilierung wie folgt: Es kann festgestellt werden, dass sich unter der Konfiguration von CommonsChunkPlugin, wenn sich die Geschäftscode-App ändert, auch der Bibliothekscode ändert und sich auch der Chunkhash des Anbieters ändert. Auf diese Weise ändert sich der Name der Anbieterreferenz, was dazu führt, dass der lange Cache-Mechanismus im Browser fehlschlägt. Was verursacht das ProblemDie Gründe, warum sich der Anbieter bei jeder Kompilierung von Webpack ändert: Bei jedem Build generiert Webpack Laufzeitcode. Wenn nur eine Datei vorhanden ist, wird der Laufzeitcode direkt in diese Datei eingefügt. Wenn mehrere Dateien vorhanden sind, wird der Laufzeitcode in die gemeinsame Datei extrahiert, d. h. in den Vendor-Chunk, der oben durch CommonsChunkPlugin konfiguriert wurde. Den von webpack bei jeder Kompilierung generierten Laufzeitcode, einschließlich der Definition der globalen webpackJsonp-Methode und der Verwaltung der Modulabhängigkeiten, finden Sie hier>>. Daher werden diese Codes in der CommonsChunkPlugin-Konfiguration von webpack oben bei jeder Kompilierung in den Anbieter gepackt, was dazu führt, dass sich der Chunkhash des Anbieters jedes Mal ändert. Anschließend können wir den Vendor-Block konfigurieren und den gemeinsamen Code, also den Webpack-Laufzeitcode, extrahieren, sodass die grundlegenden Bibliotheksmodule, von denen das Projekt abhängt, von den Geschäftsmodulen isoliert werden können. Da diese Dateien nicht geändert werden, können sie den Effekt eines langen Caches erzielen. Die konkrete Konfiguration ist wie folgt: modul.exporte = { Eintrag: { App: "./app.js", Anbieter: ["reagieren", "reagieren-dom", "redux", "reagieren-redux", "reagieren-router-redux"] }, .... Plugins: [ neues webpack.optimize.CommonsChunkPlugin({Namen: ["Anbieter"]}), neues webpack.optimize.CommonsChunkPlugin({ Name: "Manifest", Brocken: ['Anbieter'] }) ] }; Auf diese Weise ändert sich der Vendor-Block der Basisbibliothek, von der das Projekt abhängt, auch dann nicht, wenn der Code der Geschäftsanwendung geändert wird. Jedes Mal ändert sich lediglich der extrahierte Manifest-Block. Die Größe dieser Datei ist jedoch sehr klein und diese Methode bietet größere Vorteile als die Vendor-Methode. Wie unten dargestellt: Das Ergebnis der Paketkompilierung nach der Änderung des App-Codes ist wie folgt. Sie können sehen, dass sich der Vendor-Chunkhash nicht geändert hat. Beim Konfigurieren von CommonsChunkPlugin in webpack sind einige Dinge zu beachten: 1. Wenn Sie das Ausgabeelement von Webpack konfigurieren, müssen dessen 2. Für 3. Für die extrahierten CSS-Style-Dateien müssen Sie Implementieren von CSS-Caching Webpack implementiert CSS-Caching mithilfe des oben eingeführten Contenthash. Der Hash-Attributwert wird tatsächlich von modul.exporte = { ... Plugins: [ neues ExtractTextPlugin({ Dateiname: 'static/[name]_[contenthash:7].css', deaktivieren: false, allChunks: wahr }) ... ] Implementieren Sie das Caching von Bildern/Schriftarten Bei statischen Ressourcen wie Bildern und Schriftarten wird beim Erstellen und Extrahieren mit webpack tatsächlich modul.exporte = { ... Regeln: ... { Test: /\.(gif|png|jpe?g)(\?\S*)?$/, Lader: require.resolve('URL-Lader'), Optionen: Grenze: 10000, Name: Pfad.posix.join('statisch', '[Name]_[Hash:7].[ext]') } }, Schriftart: Test: /\.otf|ttf|woff2?|eot(\?\S*)?$/, Lader: require.resolve('URL-Lader'), Optionen: Grenze: 10000, Name: Pfad.posix.join('statisch', '[Name]_[Hash:7].[ext]') } } ] } Sie können sehen, dass oben der Hash-Attributwert verwendet wird. Dieser Hash ist nicht der Hash, den Webpack bei jedem Erstellen des Projekts erstellt. Er wird vom Dateilader basierend auf dem Dateiinhalt berechnet. Verwechseln Sie ihn nicht mit dem von Webpack erstellten Hash. siehe 1. Richtiger Weg zum Öffnen des CommonsChunkPlugin von webpack Dies ist das Ende dieses Artikels über die Implementierung des statischen Ressourcen-Cachings mit Webpack. Weitere relevante Inhalte zum statischen Ressourcen-Caching von Webpack finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
Einfache Funktion: Klicken Sie auf das Plug-In-Sy...
Auf HTML-Seiten verfügen visuelle Elemente wie Sc...
Inhaltsverzeichnis Zusammenfassen <Vorlage>...
Problembeschreibung Auf mehreren Rechnern wurden ...
1. Die Rolle der Klammern 1.1 Eckige Klammern [ ]...
Inhaltsverzeichnis 1. Strukturzeichenfolge 2. Tup...
Das Wesen einer flachen Website-Struktur liegt in...
1. Führen Sie die .sh-Datei aus Sie können es dir...
Inhaltsverzeichnis 1. ChildNodes-Attributdurchlau...
Aktivieren Sie den Fernzugriff Aktivieren Sie die...
1. SHOW PROCESSLIST-Befehl SHOW PROCESSLIST zeigt...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis 1. Einleitung 2. Die erste Met...
1. Laut dem Online-Tutorial schlägt die Installat...
Busybox: Ein Schweizer Taschenmesser voller klein...