Heim > Web-Frontend > js-Tutorial > Hauptteil

Probleme im Zusammenhang mit der Webpack3-Geschwindigkeitsoptimierung in vue-cli

亚连
Freigeben: 2018-06-15 16:44:43
Original
1530 Leute haben es durchsucht

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)

  1. Scope Hoisting von webpack3 aktivieren (die neue Version von vue-cli wurde mit webapck3 konfiguriert und diese Konfiguration wurde standardmäßig aktiviert)

  2. Alias ​​gut nutzen (die neue Version von vue-cli hat dies bereits getan)

  3. Konfigurieren Sie CommonsChunkPlugin zum Extrahieren von öffentlichem Code (die neue Version von vue -cli hat dies bereits getan)

  4. 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

  1. Happypack-Multi-Core-Build-Projekt aktivieren

  2. Quellkartenkonfiguration ändern

  3. Vorkompilierte DllPlugin- und DllReferencePlugin-Bibliotheksdateien aktivieren

  4. Üben

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"
 }]]
}
Nach dem Login kopieren
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)
Nach dem Login kopieren

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')]
}
Nach dem Login kopieren

3 sein. Ändern Sie die Quelle -map-Konfiguration

3.1 Ändern Sie zuerst die Datei /config/index.js

// /config/index.js
dev环境:devtool: 'eval'(最快速度)
prod环境:productionSourceMap: false(关闭source-map)
Nach dem Login kopieren
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_mode
Nach dem Login kopieren

4. 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
   }
  })
 ]
}
Nach dem Login kopieren

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')
})
Nach dem Login kopieren

4.3 in /package Befehl hinzufügen

"dll": "webpack --config ./build/webpack.dll.config.js"
Nach dem Login kopieren

4.4 DLL JS-Einführung in /index.html hinzufügen (muss zuerst eingeführt werden)

<script src="/static/js/vendor.dll.js"></script>
Nach dem Login kopieren

4.5 Build ausführen

npm run dll(这一步会生成build/vendor-manifest.json和static/js/vendor.dll.js)
npm run dev 或 npm run build
Nach dem Login kopieren

Postscript

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

JavaScript-Funktionsprinzip

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage