精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官:說說你是如何利用Webpack來優化前端性能的?

開發 前端
一般項目在完成后,會通過webpack進行打包,利用webpack對前端項目性能優化是一個十分重要的環節。

[[398017]]

本文轉載自微信公眾號「JS每日一題」,作者灰灰。轉載本文請聯系JS每日一題公眾號。

一、背景

隨著前端的項目逐漸擴大,必然會帶來的一個問題就是性能

尤其在大型復雜的項目中,前端業務可能因為一個小小的數據依賴,導致整個頁面卡頓甚至奔潰

一般項目在完成后,會通過webpack進行打包,利用webpack對前端項目性能優化是一個十分重要的環節

二、如何優化

通過webpack優化前端的手段有:

  • JS代碼壓縮
  • CSS代碼壓縮
  • Html文件代碼壓縮
  • 文件大小壓縮
  • 圖片壓縮
  • Tree Shaking
  • 代碼分離
  • 內聯 chunk

JS代碼壓縮

terser是一個JavaScript的解釋、絞肉機、壓縮機的工具集,可以幫助我們壓縮、丑化我們的代碼,讓bundle更小

在production模式下,webpack 默認就是使用 TerserPlugin 來處理我們的代碼的。如果想要自定義配置它,配置方法如下:

  1. const TerserPlugin = require('terser-webpack-plugin'
  2. module.exports = { 
  3.     ... 
  4.     optimization: { 
  5.         minimize: true
  6.         minimizer: [ 
  7.             new TerserPlugin({ 
  8.                 parallel: true // 電腦cpu核數-1 
  9.             }) 
  10.         ] 
  11.     } 

屬性介紹如下:

  • extractComments:默認值為true,表示會將注釋抽取到一個單獨的文件中,開發階段,我們可設置為 false ,不保留注釋
  • parallel:使用多進程并發運行提高構建的速度,默認值是true,并發運行的默認數量:os.cpus().length - 1
  • terserOptions:設置我們的terser相關的配置:
  • compress:設置壓縮相關的選項,mangle:設置丑化相關的選項,可以直接設置為true
  • mangle:設置丑化相關的選項,可以直接設置為true
  • toplevel:底層變量是否進行轉換
  • keep_classnames:保留類的名稱
  • keep_fnames:保留函數的名稱

CSS代碼壓縮

CSS壓縮通常是去除無用的空格等,因為很難去修改選擇器、屬性的名稱、值等

CSS的壓縮我們可以使用另外一個插件:css-minimizer-webpack-plugin

  1. npm install css-minimizer-webpack-plugin -D 

配置方法如下:

  1. const CssMinimizerPlugin = require('css-minimizer-webpack-plugin'
  2. module.exports = { 
  3.     // ... 
  4.     optimization: { 
  5.         minimize: true
  6.         minimizer: [ 
  7.             new CssMinimizerPlugin({ 
  8.                 parallel: true 
  9.             }) 
  10.         ] 
  11.     } 

Html文件代碼壓縮

使用HtmlWebpackPlugin插件來生成HTML的模板時候,通過配置屬性minify進行html優化

  1. module.exports = { 
  2.     ... 
  3.     plugin:[ 
  4.         new HtmlwebpackPlugin({ 
  5.             ... 
  6.             minify:{ 
  7.                 minifyCSS:false, // 是否壓縮css 
  8.                 collapseWhitespace:false, // 是否折疊空格 
  9.                 removeComments:true // 是否移除注釋 
  10.             } 
  11.         }) 
  12.     ] 

設置了minify,實際會使用另一個插件html-minifier-terser

文件大小壓縮

對文件的大小進行壓縮,減少http傳輸過程中寬帶的損耗

  1. npm install compression-webpack-plugin -D 
  1. new ComepressionPlugin({ 
  2.     test:/\.(css|js)$/,  // 哪些文件需要壓縮 
  3.     threshold:500, // 設置文件多大開始壓縮 
  4.     minRatio:0.7, // 至少壓縮的比例 
  5.     algorithm:"gzip", // 采用的壓縮算法 
  6. }) 

圖片壓縮

一般來說在打包之后,一些圖片文件的大小是遠遠要比 js 或者 css 文件要來的大,所以圖片壓縮較為重要

配置方法如下:

  1. module: { 
  2.   rules: [ 
  3.     { 
  4.       test: /\.(png|jpg|gif)$/, 
  5.       use: [ 
  6.         { 
  7.           loader: 'file-loader'
  8.           options: { 
  9.             name'[name]_[hash].[ext]'
  10.             outputPath: 'images/'
  11.           } 
  12.         }, 
  13.         { 
  14.           loader: 'image-webpack-loader'
  15.           options: { 
  16.             // 壓縮 jpeg 的配置 
  17.             mozjpeg: { 
  18.               progressive: true
  19.               quality: 65 
  20.             }, 
  21.             // 使用 imagemin**-optipng 壓縮 png,enable: false 為關閉 
  22.             optipng: { 
  23.               enabled: false
  24.             }, 
  25.             // 使用 imagemin-pngquant 壓縮 png 
  26.             pngquant: { 
  27.               quality: '65-90'
  28.               speed: 4 
  29.             }, 
  30.             // 壓縮 gif 的配置 
  31.             gifsicle: { 
  32.               interlaced: false
  33.             }, 
  34.             // 開啟 webp,會把 jpg 和 png 圖片壓縮為 webp 格式 
  35.             webp: { 
  36.               quality: 75 
  37.             } 
  38.           } 
  39.         } 
  40.       ] 
  41.     }, 
  42.   ] 
  43. }  

Tree Shaking

Tree Shaking 是一個術語,在計算機中表示消除死代碼,依賴于ES Module的靜態語法分析(不執行任何的代碼,可以明確知道模塊的依賴關系)

在webpack實現Trss shaking有兩種不同的方案:

  • usedExports:通過標記某些函數是否被使用,之后通過Terser來進行優化的
  • sideEffects:跳過整個模塊/文件,直接查看該文件是否有副作用

兩種不同的配置方案, 有不同的效果

usedExports

配置方法也很簡單,只需要將usedExports設為true

  1. module.exports = { 
  2.     ... 
  3.     optimization:{ 
  4.         usedExports 
  5.     } 

使用之后,沒被用上的代碼在webpack打包中會加入unused harmony export mul注釋,用來告知 Terser 在優化時,可以刪除掉這段代碼

如下面sum函數沒被用到,webpack打包會添加注釋,terser在優化時,則將該函數去掉

sideEffects

sideEffects用于告知webpack compiler哪些模塊時有副作用,配置方法是在package.json中設置sideEffects屬性

如果sideEffects設置為false,就是告知webpack可以安全的刪除未用到的exports

如果有些文件需要保留,可以設置為數組的形式

  1. "sideEffecis":[ 
  2.     "./src/util/format.js"
  3.     "*.css" // 所有的css文件 

上述都是關于javascript的tree shaking,css同樣也能夠實現tree shaking

css tree shaking

css進行tree shaking優化可以安裝PurgeCss插件

  1. npm install purgecss-plugin-webpack -D 
  1. const PurgeCssPlugin = require('purgecss-webpack-plugin'
  2. module.exports = { 
  3.     ... 
  4.     plugins:[ 
  5.         new PurgeCssPlugin({ 
  6.             path:glob.sync(`${path.resolve('./src')}/**/*`), {nodir:true}// src里面的所有文件 
  7.             satelist:function(){ 
  8.                 return { 
  9.                     standard:["html"
  10.                 } 
  11.             } 
  12.         }) 
  13.     ] 

paths:表示要檢測哪些目錄下的內容需要被分析,配合使用glob

默認情況下,Purgecss會將我們的html標簽的樣式移除掉,如果我們希望保留,可以添加一個safelist的屬性

代碼分離

將代碼分離到不同的bundle中,之后我們可以按需加載,或者并行加載這些文件

默認情況下,所有的JavaScript代碼(業務代碼、第三方依賴、暫時沒有用到的模塊)在首頁全部都加載,就會影響首頁的加載速度

代碼分離可以分出出更小的bundle,以及控制資源加載優先級,提供代碼的加載性能

這里通過splitChunksPlugin來實現,該插件webpack已經默認安裝和集成,只需要配置即可

默認配置中,chunks僅僅針對于異步(async)請求,我們可以設置為initial或者all

  1. module.exports = { 
  2.     ... 
  3.     optimization:{ 
  4.         splitChunks:{ 
  5.             chunks:"all" 
  6.         } 
  7.     } 

splitChunks主要屬性有如下:

  • Chunks,對同步代碼還是異步代碼進行處理
  • minSize:拆分包的大小, 至少為minSize,如何包的大小不超過minSize,這個包不會拆分
  • maxSize:將大于maxSize的包,拆分為不小于minSize的包
  • minChunks:被引入的次數,默認是1

內聯chunk

可以通過InlineChunkHtmlPlugin插件將一些chunk的模塊內聯到html,如runtime的代碼(對模塊進行解析、加載、模塊信息相關的代碼),代碼量并不大,但是必須加載的

  1. const InlineChunkHtmlPlugin = require('react-dev-utils/InlineChunkHtmlPlugin'
  2. const HtmlWebpackPlugin = require('html-webpack-plugin'
  3. module.exports = { 
  4.     ... 
  5.     plugin:[ 
  6.         new InlineChunkHtmlPlugin(HtmlWebpackPlugin,[/runtime.+\.js/] 

三、總結

關于webpack對前端性能的優化,可以通過文件體積大小入手,其次還可通過分包的形式、減少http請求次數等方式,實現對前端性能的優化

參考文獻

https://zhuanlan.zhihu.com/p/139498741

 

https://vue3js.cn/interview/

 

責任編輯:武曉燕 來源: JS每日一題
相關推薦

2023-12-19 09:24:22

LinuxBIOSUEFI

2021-08-02 08:34:20

React性能優化

2021-08-03 07:51:43

React項目面試

2021-05-06 14:34:12

Webpack熱更新程序

2021-08-09 07:47:40

Git面試版本

2021-11-25 10:18:42

RESTfulJava互聯網

2015-08-13 10:29:12

面試面試官

2025-02-12 08:43:06

2020-06-12 15:50:56

options前端服務器

2020-12-01 08:47:36

Java異常開發

2021-11-09 14:08:45

DockerDockerfileJava

2025-04-01 00:00:00

項目CRUD單例模式

2024-05-11 15:11:44

系統軟件部署

2021-11-02 22:04:58

模式

2020-08-17 07:40:19

消息隊列

2021-05-20 08:34:03

CDN原理網絡

2021-04-19 18:56:58

大數字符串運算

2021-09-29 07:24:20

場景數據

2024-11-19 15:13:02

2023-12-27 18:16:39

MVCC隔離級別幻讀
點贊
收藏

51CTO技術棧公眾號

一区二区三区精品久久久| 国产一区二区精品在线观看| 亚洲天堂网在线观看| 手机在线看福利| 里番在线观看网站| 国产不卡在线播放| 日本成人黄色片| 天堂网中文在线观看| 亚洲亚洲一区二区三区| 色婷婷激情久久| 性生活免费观看视频| 四虎影院在线播放| 国产精品自在欧美一区| 茄子视频成人在线| 久草视频免费在线播放| 国产精品羞羞答答在线观看| 日韩欧美在线观看一区二区三区| 欧美激情 国产精品| 丝袜美腿美女被狂躁在线观看| 成人午夜碰碰视频| 国产一区二区丝袜| 精品免费囯产一区二区三区| 综合激情婷婷| 中文字幕自拍vr一区二区三区| 亚洲熟女乱综合一区二区三区| 欧美黄色网络| 欧美性猛交xxxx免费看漫画 | 欧美综合激情网| 亚洲精品91在线| 伊色综合久久之综合久久| 欧美日韩在线三级| 成人在线免费观看av| www.欧美日本韩国| 欧美经典一区二区| 久久偷看各类wc女厕嘘嘘偷窃 | 久久99精品久久久久久久久久| 亚洲一区二区色| 噜噜噜91成人网| 久久免费成人精品视频| 青春草免费视频| 91精品高清| 色妞色视频一区二区三区四区| theav精尽人亡av| silk一区二区三区精品视频| 91精品国产综合久久国产大片| 国产区二区三区| 美女18一级毛片一品久道久久综合| 亚洲主播在线观看| 日韩中文在线字幕| 成人日批视频| 中文字幕视频一区二区三区久| 性欧美精品一区二区三区在线播放| 午夜国产在线观看| 成人av影院在线| 成人女人免费毛片| 精品国产亚洲AV| 国产另类ts人妖一区二区| 91精品国产自产在线老师啪| 在线观看中文字幕av| 日本成人在线视频网站| 国产福利精品av综合导导航| 成人毛片一区二区三区| 日韩黄色小视频| 国产精品成人一区二区| 中国女人一级一次看片| 日韩电影在线一区二区| 国产精品永久在线| 91精品视频免费在线观看| 久久国产精品99久久人人澡| 成人国产精品久久久久久亚洲| 在线视频 91| 久久国产精品99精品国产| 国产在线高清精品| 999久久久久久| 国产成人av在线影院| 国产精品麻豆免费版| 日批免费在线观看| 久久亚洲精华国产精华液| 麻豆成人在线播放| 成人免费在线视频网| 国产精品久久久久久久久免费桃花| 在线视频欧美一区| 色女人在线视频| 欧美日韩国产精品一区二区不卡中文 | www国产黄色| 日韩免费小视频| 91精品国产手机| 中文字幕 日本| 狠狠操综合网| 久久97精品久久久久久久不卡 | 色偷偷久久一区二区三区| 无码内射中文字幕岛国片| 欧美黄页免费| 欧美精品一区二区三区四区 | 成人免费小视频| 成人国产在线看| 亚洲欧洲自拍| 制服丝袜亚洲色图| 捆绑裸体绳奴bdsm亚洲| 日韩高清欧美| 国语自产精品视频在线看一大j8 | 超碰在线观看97| 青青免费在线视频| 亚洲久草在线视频| 成人羞羞国产免费网站| 欧美日韩午夜电影网| 日韩精品免费在线视频| 日韩激情综合网| 国产亚洲毛片在线| 91夜夜揉人人捏人人添红杏| 亚州视频一区二区三区| 亚洲美女视频一区| 999精品网站| 亚洲日本va| 日韩中文理论片| 特黄视频免费看| 国产乱码一区二区三区| 神马影院午夜我不卡| 污的网站在线观看| 欧美丰满高潮xxxx喷水动漫| 黄色a一级视频| 欧美视频日韩| 国产精品自拍网| 亚洲av片一区二区三区| 一区二区三区中文免费| 免费成年人高清视频| 网友自拍一区| 欧美激情奇米色| 97caocao| 国产视频一区二区三区在线观看| 波多野结衣av一区二区全免费观看| 国产69精品久久久久按摩| 日韩电影中文字幕在线| av资源吧首页| 国产乱码精品一区二区三区av| 亚洲欧美日产图| 国产成人精品123区免费视频| 亚洲精品xxx| 精品少妇久久久久久888优播| 久久99精品国产.久久久久久| 日韩中文一区二区三区| 国产网红女主播精品视频| 欧美一区二区三区在线看| 污污视频网站在线免费观看| 久久综合婷婷| 噜噜噜噜噜久久久久久91| 国产精品电影| 亚洲精品美女免费| 日韩黄色一级大片| 99re这里只有精品6| 亚洲中文字幕无码av永久| 日韩第一区第二区| 欧美巨乳美女视频| 国产成人自拍一区| 午夜av一区二区| 亚洲av片不卡无码久久| 亚洲片区在线| 激情小说综合区| 天堂av中文在线观看| 日韩电影中文字幕av| 成人毛片在线播放| 国产三级三级三级精品8ⅰ区| www.亚洲天堂网| 九色精品91| 日韩美女福利视频| eeuss影院在线观看| 欧美日韩国产乱码电影| 国产日韩欧美在线观看视频| 国产精品主播直播| 欧美日韩福利在线| 亚洲尤物av| 国产美女直播视频一区| 成人国产免费电影| 欧美成人一区二区三区在线观看| 久青草免费视频| ww久久中文字幕| 中文字幕有码av| 欧美.www| 久久艳妇乳肉豪妇荡乳av| 日本欧美不卡| 久久国产精品影视| 外国精品视频在线观看| 欧美亚洲愉拍一区二区| 亚洲一级生活片| 91原创在线视频| the porn av| 欧美精品成人| 欧美一级二级三级九九九| 欧美与亚洲与日本直播| 不卡中文字幕av| 少妇人妻精品一区二区三区| 日本韩国一区二区| 91免费公开视频| 成人免费看的视频| 欧美国产日韩在线播放| 911久久香蕉国产线看观看| 国产精品视频入口| 91天天综合| 久久久亚洲国产天美传媒修理工| 黄色片在线播放| 欧美成人福利视频| 成人黄色免费网| 亚洲成人综合在线| 男女全黄做爰文章| av亚洲精华国产精华精| 亚洲精品综合在线观看| 亚洲精品偷拍| 国产又粗又爽又黄的视频| 日韩大胆成人| 亚洲va欧美va在线观看| 性欧美1819sex性高清| 欧美成人黄色小视频| 免费国产在线观看| 精品国产成人系列| 国产精品天天操| 欧美性猛交xxx| 九九免费精品视频| 国产精品久久久久久久久免费相片| 日本黄色录像片| 激情综合五月婷婷| 日本999视频| 99成人在线| 国产精品无码电影在线观看| 大片网站久久| 久久一区二区三区欧美亚洲| 国产成人一二片| 成人网在线免费观看| 欧美va视频| 欧美专区日韩视频| 97在线超碰| 欧美高清视频免费观看| 免费av在线| 中文字幕亚洲字幕| 国产玉足榨精视频在线观看| 日韩精品免费综合视频在线播放| 成人免费视频国产免费麻豆| 91麻豆精品久久久久蜜臀| 中文天堂在线资源| 色欲综合视频天天天| 亚洲一区欧美在线| 亚洲一区二区视频在线观看| 91杏吧porn蝌蚪| 最新热久久免费视频| 久久国产高清视频| 国产精品免费av| 国产又粗又长又硬| 国产精品国产三级国产aⅴ原创| 国产一二三四五区| 国产无一区二区| 免费看污片的网站| 国产日韩欧美高清在线| 久久久久久久毛片| 亚洲国产电影在线观看| 影音先锋男人在线| 国产女主播在线一区二区| 免费在线观看a视频| 国产三级久久久| 天堂资源在线视频| 中文字幕一区二区三区不卡 | 欧美成年人视频在线观看| 蜜臀av性久久久久蜜臀aⅴ | 一区二区三区三区在线| 欧美疯狂party性派对| 自拍视频一区二区三区| 天堂美国久久| 久久久99精品视频| 一区视频在线| 日本久久久精品视频| 日韩和的一区二区| 狠狠躁狠狠躁视频专区| 精彩视频一区二区| 无套白嫩进入乌克兰美女| 国产精品1区2区| 捆绑裸体绳奴bdsm亚洲| 国产日韩欧美精品综合| 91麻豆免费视频网站| 亚洲国产日韩一级| 五月婷婷六月婷婷| 欧美精品一卡两卡| 蜜桃视频久久一区免费观看入口| 亚洲国产一区自拍| 阿v免费在线观看| 久久的精品视频| а√在线中文在线新版| 国产成人在线一区| 91麻豆精品| 黑人中文字幕一区二区三区| 国产毛片一区二区三区| 国产又大又长又粗又黄| 在线日韩中文| 九九视频精品在线观看| 国产精品主播直播| 久久久久久久久久久久| 亚洲天堂免费看| aaa人片在线| 4438x成人网最大色成网站| 免费观看的毛片| 深夜福利亚洲导航| 欧美gv在线观看| 成人免费观看网址| 日韩精品社区| 日韩欧美视频免费在线观看| 亚洲中午字幕| 人妻巨大乳一二三区| 国产亚洲美州欧州综合国| 国产大学生自拍| 欧美性猛交xxxx黑人交| 韩国av在线免费观看| 深夜福利国产精品| 91精品论坛| 高清国产在线一区| 欧美韩国日本在线观看| 116极品美女午夜一级| 国产成人综合在线观看| 我不卡一区二区| 午夜一区二区三区视频| 国产乱码精品一区二区| 亚洲天堂免费在线| 蜜臀久久精品| 成人在线看片| 91超碰成人| xx欧美撒尿嘘撒尿xx| 91污在线观看| 精品少妇theporn| 欧美一区二区三区日韩| av播放在线观看| 欧美在线视频一二三| 成人搞黄视频| 大胆欧美熟妇xx| 国产一区二区免费在线| 五月婷婷六月香| 91国偷自产一区二区三区观看| 全国男人的天堂网| 欧美日韩成人在线视频| 亚洲日日夜夜| 亚洲精品视频一二三| 久久国产日韩| 自拍偷拍中文字幕| 福利视频第一区| 四虎永久在线精品免费网址| 欧美裸体xxxx极品少妇| 亚洲一区二区三区久久久| 日韩在线第一区| 日本系列欧美系列| 国产调教在线观看| 91极品视觉盛宴| 黄色在线免费观看大全| 国产成人精品综合| 欧美美乳视频| 好男人www社区| 国产丝袜欧美中文另类| 在线永久看片免费的视频| 亚洲精品日韩丝袜精品| 亚洲欧美小说色综合小说一区| 久久99欧美| 久久久成人网| 男人天堂av电影| 在线观看一区二区视频| 成人高清免费观看mv| 国产精品白嫩美女在线观看 | 亚洲 欧洲 日韩| 国内精品视频666| 朝桐光av在线| 日韩精品在线一区二区| 黄色在线看片| 久久精品日韩精品| 视频在线观看一区二区三区| 免费福利视频网站| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 中文字幕日本在线观看| 亚洲sss综合天堂久久| 欧美成人一品| 精品国产av色一区二区深夜久久| 欧美日韩色婷婷| 9i精品一二三区| 91色琪琪电影亚洲精品久久| 欧美日韩p片| 我和岳m愉情xxxⅹ视频| 欧美日韩一区在线观看| 99自拍视频在线观看| 九九99玖玖| 日韩黄色片在线观看| 国产极品国产极品| 亚洲精品国产精品乱码不99按摩| 欧美性猛交xxx高清大费中文| 亚洲 国产 日韩 综合一区| 国产乱子伦一区二区三区国色天香| 国产大片aaa| 伊人激情综合网| 97人人澡人人爽91综合色| 国产亚洲精品网站| 亚洲日本va午夜在线影院| 天堂在线观看视频| 国产精品青草久久久久福利99| 欧美久久一区| 四虎国产精品成人免费入口| 欧美一区二区三区在线观看视频| av日韩亚洲| 亚洲一区 在线播放| 久久久精品影视|