Heim > Artikel > Web-Frontend > Probleme im Zusammenhang mit der Webpack3-Geschwindigkeitsoptimierung in vue-cli
Dieser Artikel stellt hauptsächlich die detaillierte Erklärung des Webpack3-Aufbaus und der umfassenden Beschleunigungsoptimierung vor. Jetzt teile ich ihn mit Ihnen und gebe Ihnen eine Referenz.
Vorwort
Mit der Globalisierung von Vue wurden verschiedene Vue-Komponenten-Frameworks immer perfekter, von der frühen Element-UI über Vux, Iview bis hin zu immer hochwertigeren Projekten Vue für die Front-End-Konstruktion ist bereits eine technische, modulare und agile Sache.
Darunter glaube ich, dass viele Leute die offizielle Vue-CLI-Initialisierungsprojektvorlage wählen und dann einen Drittanbieter zum Entwickeln und Erstellen einführen werden Ich persönlich kann diesen Ansatz nur wärmstens empfehlen. Allerdings ist die von vue-cli initialisierte Projektvorlage schließlich für alle Entwickler gedacht und es wird gewisse Kompromisse hinsichtlich der Kompatibilität geben. Ich glaube, viele Leute haben nach verschiedenen Artikeln zur Webpack-Build-Optimierung gesucht, aber viele davon sind entweder zu alt oder nicht streng
Dieser Artikel hofft, ein Gleichgewicht zwischen zeitaufwändiger Optimierung und Verbesserung der Build-Leistung zu finden, d. h. Verbringen Sie möglichst wenig Zeit, nehmen Sie nur minimale Änderungen an der offiziellen Vorlage vor und erzielen Sie die maximale Verbesserung der Build-Leistung
Ideen
Frühe Versionen von vue-cli und webpack2 waren Im Internet verbreitete sich die folgende optimierte Konfiguration, aber tatsächlich müssen die neuen Versionen von vue-cli und webpack3 nicht mehr ParallelUglifyPlugin verwenden, um UglifyPlugin zu ersetzen (die neue Version von UglifyPlugin unterstützt und ermöglicht bereits standardmäßig die parallele Multithread-Konstruktion, also Dieser Schritt ist nicht erforderlich)
Scope Hoisting von webpack3 aktivieren (die neue Version von vue-cli wurde mit webapck3 konfiguriert und diese Konfiguration wurde standardmäßig aktiviert)
Alias gut nutzen (die neue Version von vue-cli hat dies bereits getan)
Konfigurieren Sie CommonsChunkPlugin zum Extrahieren von öffentlichem Code (die neue Version von vue -cli hat dies bereits getan)
Für die neue Version von vue-cli und webpack3 kann die folgende einfache Konfiguration die Build-Geschwindigkeit nach der Optimierung um mindestens das Zweifache erhöhen
Referenz auf Anfrage
Happypack-Multi-Core-Build-Projekt aktivieren
Quellkartenkonfiguration ändern
Vorkompilierte DllPlugin- und DllReferencePlugin-Bibliotheksdateien aktivieren
Referenz auf Anfrage
1.1 Fast alle Komponenten-Frameworks von Drittanbietern bieten eine On-Demand-Referenzmethode für Komponenten, am Beispiel von iview. Mithilfe des Plug-Ins babel-plugin-import können Komponenten geladen werden Sie müssen nur die .babelrc-Datei npm install babel-plugin-import --save-dev
// .babelrc
{
"plugins": [["import", {
"libraryName": "iview",
"libraryDirectory": "src/components"
}]]
}
1.2 ändern und dies dann bei Bedarf tun. Durch die Einführung von Komponenten kann die Größe reduziert werden
import { Button } from 'iview' Vue.component('Table', Table)2. Aktivieren Sie das Happypack-Multi-Core-Build-Projekt
Ändern Sie nach der Installation von Happypack /build/webpack.base.conf.js. Die Datei kann npm install happypack --save-dev
// /build/webpack.base.conf.js
const HappyPack = require('happypack')
const os = require('os')
const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length })
// 增加HappyPack插件
plugins: [
new HappyPack({
id: 'happy-babel-js',
loaders: ['babel-loader?cacheDirectory=true'],
threadPool: happyThreadPool,
})
]
// 修改引入loader
{
test: /\.js$/,
// loader: 'babel-loader',
loader: 'happypack/loader?id=happy-babel-js', // 增加新的HappyPack构建loader
include: [resolve('src'), resolve('test')]
}
3.1 Ändern Sie zuerst die Datei /config/index.js // /config/index.js
dev环境:devtool: 'eval'(最快速度)
prod环境:productionSourceMap: false(关闭source-map)
3.2 Ändern Sie dann die Datei /src/main.js und deaktivieren Sie die Debugging-Informationen der Produktionsumgebung
// /src/main.js const isDebug_mode = process.env.NODE_ENV !== 'production' Vue.config.debug = isDebug_mode Vue.config.devtools = isDebug_mode Vue.config.productionTip = isDebug_mode4. Aktivieren Sie die vorkompilierten Bibliotheksdateien DllPlugin und DllReferencePlugin
Dies ist der komplizierteste und effektivste Schritt. Der offensichtliche Schritt besteht darin, die Bibliothek eines Drittanbieters zu kompilieren und zu packen Dateien müssen nicht einmal separat kompiliert und für nachfolgende Builds gepackt werden 4.1 Fügen Sie die Datei build/webpack.dll.config.js hinzu und fügen Sie sie hinzu. Konfigurieren Sie Module, die eine separate DLL erfordern
const path = require("path") const webpack = require("webpack") module.exports = { // 你想要打包的模块的数组 entry: { vendor: ['vue/dist/vue.esm.js', 'axios', 'vue-router', 'iview'] }, output: { path: path.join(__dirname, '../static/js'), // 打包后文件输出的位置 filename: '[name].dll.js', library: '[name]_library' }, plugins: [ new webpack.DllPlugin({ path: path.join(__dirname, '.', '[name]-manifest.json'), name: '[name]_library', context: __dirname }), // 压缩打包的文件 new webpack.optimize.UglifyJsPlugin({ compress: { warnings: false } }) ] }
4.2 Fügen Sie die folgenden Plug-Ins in build/webpack.dev.conf.js und build/webpack.prod.conf.js hinzu
new webpack.DllReferencePlugin({ context: __dirname, manifest: require('./vendor-manifest.json') })
4.3 in /package Befehl hinzufügen
"dll": "webpack --config ./build/webpack.dll.config.js"
4.4 DLL JS-Einführung in /index.html hinzufügen (muss zuerst eingeführt werden)
<script src="/static/js/vendor.dll.js"></script>
4.5 Build ausführen
npm run dll(这一步会生成build/vendor-manifest.json和static/js/vendor.dll.js) npm run dev 或 npm run buildPostscript
Nachdem die oben genannten vier Hauptschritte abgeschlossen sind, haben wir die Optimierung und Verbesserung der Vue-CLI-Vorlagenprojektkonstruktion abgeschlossen. Obwohl es immer noch nicht einfach zu sein scheint, ist dies bereits die einfachste Optimierung wurde entwickelt, weil ich der Meinung bin, dass zu viel optimierte Konfiguration von geringer Bedeutung ist, aber zu viel Redundanz und Komplexität in das Projekt mit sich bringt Der Konstruktionseffekt des tatsächlichen Tests der oben genannten Konfiguration wurde gegenüber dem reduziert ursprünglich 13 Sekunden bis etwa 6 Sekunden, und die Hot-Bereitstellung dauert sogar Millisekunden
Das Wichtigste ist, dass die einfachste Konfiguration auch verwendet werden kann, nachdem vue-cli und Webpack in Zukunft auf neue Versionen aktualisiert wurden Es ist einfach, es neu zu konfigurieren und zu verwenden. Die Wiederherstellung der Konfiguration dauert nur etwa 5 Minuten. Wenn Sie 5 Minuten für die Änderung der Konfiguration aufwenden, kann dies die Geschwindigkeit jedes Builds um mehr als das Zweifache erhöhen Ist es ein bisschen klein? Aufgeregt :)
Lassen Sie mich hier noch ein paar Worte sagen. Tatsächlich ist das Upgrade von Webpack2 auf Webpack3 für mich ziemlich enttäuschend, da es das Problem der übermäßig komplexen Konfiguration immer noch nicht löst. Da das Ziel darin besteht, dass das Produkt, das alle Webprojekte auf der ganzen Welt dominiert, mehr aus der Perspektive der Benutzerfreundlichkeit/Menschlichkeit betrachtet werden sollte
Jedes Mal, wenn ich mir die verschiedenen .babelrc, .postcssrc.js im Webpack ansehe Projekt ... Es gibt auch verschiedene .conf-Dateien und sogar verschiedene Haupt-, Index- und App-Dateien. Ich kann nicht anders, als mich darüber zu beschweren, warum sich die Front-End-Konstruktion in einem guten Projekt so entwickelt hat Sind mehrere Konfigurationsdateien wirklich notwendig? Ich dachte ursprünglich, dass webpack3 das alles einfacher machen würde, aber das war nicht der Fall. Da es jedoch vorerst keine Möglichkeit gibt, dies zu ändern, können wir die Prinzipien so gut wie möglich verstehen und unser Bestes geben, um sie zu vereinfachen. optimieren
Das Obige habe ich für Sie zusammengestellt und hoffe, dass es Ihnen in Zukunft hilfreich sein wird.
Verwandte Artikel:
Verwenden Sie die benutzerdefinierte js-Trimmfunktion, um Leerzeichen an beiden Enden zu entfernen
Alle auswählen und Auswahl in Vue umkehren
Detaillierte Erklärung der Verwendung von Jest zum Testen nativer React-Komponenten
Alle Implementierungen auswählen Daten in Vue-Bindung und -Erfassung
Zeit-Plugin in Mint-UI verwenden und Auswahlwert erhalten
VUE2 realisiert sekundäre Provinz- und Stadtverknüpfung Auswahl
Das obige ist der detaillierte Inhalt vonProbleme im Zusammenhang mit der Webpack3-Geschwindigkeitsoptimierung in vue-cli. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!