優化webpack4配置,加快頁面訪問時間


一、問題

  在測試環境打開項目代碼只需要1s左右,但在正式環境則要12s左右才能打開頁面,這么慢才響應真的讓人很惱火,雖然網絡肯定有很大原因,但前端代碼加載也是着實要優化才行。

  我看了一下瀏覽器開發者工具,發現前端把整個項目的代碼文件都加載了,我也是醉了(因為這個項目我只是接手同事的),最大問題就是在這里了。

  

  代碼優化固然很重要,但耗時很久,只能優化webpack打包代碼了。

二、解決過程

  在這個項目里,我沒看到webpack的配置文件,只能通過改 vue.config.js 文件,詳細的參數可以在網上找。

1、刪除map文件

  這個雖然對訪問頁面沒有很大的效果,查了一下,打包的時候有這個文件是存在安全隱患的,然后就果然設置參數刪除掉。

productionSourceMap: false,  // 不生成map文件,減輕文件大小

  參數是在 vue.config.js 文件設置的,打包構建后,構建的文件夾壓縮包大小減少了一半

2、異步加載組件

  我看到同事很多組件都是用input同步加載的,這樣感覺也會拖延時間,所以統一改成了異步加載組件

 // 同步加載
import Information from '@/components/rfmModel/basicInformation.vue'; // 異步加載
const Information= () => import('@/components/rfmModel/basicInformation.vue');

3、開啟gzip壓縮

  打包的時候壓縮可以減少體積。

(1)安裝

npm install compression-webpack-plugin -D

(2)在vue.config.js中有個 configureWebpack 參數,在 configureWebpack 返回的對象中,對象屬性 plugins 數組 添加插件

const CompressionWebpackPlugin = require("compression-webpack-plugin");
 1 configureWebpack: (config) => {  2     return {  3  plugins: [  4             new CompressionWebpackPlugin({  5                 test: /\.js$|\.html$|\.css/, //匹配文件名
 6                 threshold: 9040,  //對超過9040KB的文件進行壓縮
 7                 // deleteOriginalAssets: false //是否刪除源文件
 8  }),  9  ], 10  } 11 },

4、按需引入

  lodash-webpack-plugin與babel-plugin-lodash結合使用,但配置完這個,我上面的問題還是沒有解決。

(1)安裝

npm i -S lodash-webpack-plugin babel-plugin-lodash

(2)配置

var LodashModuleReplacementPlugin = require('lodash-webpack-plugin')
configureWebpack: (config) => { return { plugins: [ new LodashModuleReplacementPlugin(), ], } }

至於babel-plugin-lodash,我看到項目文檔導出來的webpack配置是已經配好了,查了一下,有兩種配置方法:

①.babelrc中配置 “plugins”: [“transform-runtime”,“transform-vue-jsx”,“lodash”]

②在rules配置

1 { 2       test: /\.(js|jsx)$/, 3       loader: 'babel-loader', 4       exclude: /node_modules/, 5       include: [resolve('src'), resolve('test')] 6       options: {plugins: ['lodash']} 7 } 8         

5、切割代碼,合並共用模塊

  webpack4已經廢棄了CommonsChunksplugin,改用了splitChunks。這個我也不是很了解,具體參數可查看官網。

 1 configureWebpack: (config) => {  2  optimization: {  3  splitChunks: {  4  cacheGroups: {  5  vendor: {  6                         priority: 10, //添加權重
 7                         test: /node_modules/, //把這個目錄下符合下面幾個條件的庫抽離出來
 8                         name: "vendor",  9                         enforce: true
10  }, 11  common: { 12                         //公共的模塊
13                         chunks: 'all', 14                         minChunks: 2 // 拆分前必須共享模塊的最小塊數
15  } 16  }, 17                 chunks:"all", 18                 minSize: 400000
19  } 20  }, 21  } 22 },

6、html-webpack-plugin

  這個是解決我上面加載全部代碼文件的問題,查了一下,它的主要作用:

①為html文件中引入的外部資源如scriptlink動態添加每次compile后的hash,防止引用緩存的外部文件問題

②可以生成創建html入口文件,比如單頁面可以生成一個html文件入口,配置Nhtml-webpack-plugin可以生成N個頁面入口

  似乎與我上面的問題一點關系也沒有,但它解決了我的苦惱,天啊,這是為什么啊!!!

(1)安裝

npm i -S html-webpack-plugin

(2)配置

let HtmlWebpackPlugin = require('html-webpack-plugin');
 1 configureWebpack: (config) => {  2     return {  3  plugins: [  4             new HtmlWebpackPlugin({  5                 template: './public/index.html',  6                 hash: true, // 是否為所有注入的靜態資源添加webpack每次編譯產生的唯一hash值
 7                 inject: true // 向template或者templateContent中注入所有靜態資源,不同的配置值注入的位置不經相同
 8  })  9  ], 10  } 11 },

之前都沒試過親自配置webpack,花了好長時間,也才了好多坑,繼續努力。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM