精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美日韩一区二区三区四区| 亚洲一区国产| 6080国产精品一区二区| www.一区二区.com| 成人在线视频一区二区三区| 老熟妇一区二区| 四虎影视国产精品| 亚洲永久精品国产| 免费亚洲精品视频| 国产男女无套免费网站| 亚洲欧美久久| 久久亚洲成人精品| 91av在线免费| 国产精久久一区二区| 欧美性生交大片免费| 三年中国中文在线观看免费播放| 天天色综合av| 国产一区二区三区不卡在线观看| 97在线观看免费高清| 欧美人与禽zoz0善交| 精品福利一区| 6080日韩午夜伦伦午夜伦| www.爱色av.com| 成人黄视频在线观看| 久久精品人人做人人综合| 91夜夜揉人人捏人人添红杏| 黄色在线免费观看| 国产精品v日韩精品v欧美精品网站| 亚洲人免费视频| 国产伦精品一区二区三区妓女下载| 欧美成人精品三级网站| 天天亚洲美女在线视频| 国产精品自拍合集| 国产在线高潮| 日本一区二区三级电影在线观看| 国产私拍一区| 亚洲美女性生活| 久久er精品视频| 国产精品精品国产| 日本熟女毛茸茸| 日韩一级在线| 91sa在线看| 日本中文字幕免费| 亚洲福利免费| 欧美精品www在线观看| 69夜色精品国产69乱| 日韩国产一区二区| 亚洲新声在线观看| 免费在线观看污| 色噜噜狠狠一区二区三区狼国成人 | 日韩精品中文字幕一区二区 | 91久久久久久久久久久久| 裸体素人女欧美日韩| 欧美在线亚洲在线| 成人毛片在线播放| 久久伊人亚洲| 国产精品精品国产| 亚洲字幕av一区二区三区四区| 老司机午夜精品视频| 国产成人av网| 亚洲av综合一区| 免费成人在线影院| 国产精品一区二区女厕厕| 中文字幕一区2区3区| 日韩av高清在线观看| 国产98色在线| 中文字幕乱伦视频| 美女精品一区二区| 91九色国产社区在线观看| 国产三级漂亮女教师| 国产麻豆视频精品| 国产精品sss| 视频在线观看你懂的| 91日韩精品一区| 日韩欧美精品一区二区三区经典| 1769在线观看| 一区二区三区91| 女人天堂av手机在线| 日韩毛片免费观看| 欧美精品18+| 中国男女全黄大片| 少妇精品久久久一区二区| 日韩一区二区福利| 久久久久久久久久久久国产| av不卡免费看| 国产精品免费看久久久香蕉| 99久久国产热无码精品免费| 成人av网站在线观看免费| 精品福利影视| 91欧美在线视频| 一区二区三区高清在线| 成年人黄色片视频| 91成人短视频在线观看| 日韩高清av在线| 亚洲级视频在线观看免费1级| 欧美aⅴ在线观看| 久久精品超碰| 亚洲高清久久久久久| 级毛片内射视频| 欧美+亚洲+精品+三区| 欧美亚洲日本网站| aaaa一级片| 国产喂奶挤奶一区二区三区| 永久免费网站视频在线观看| 欧美自拍电影| 精品国产制服丝袜高跟| 超薄肉色丝袜一二三| 国色天香一区二区| 国产欧美一区二区三区久久人妖| 亚洲第九十九页| 中文字幕乱码一区二区免费| 九一国产精品视频| 电影中文字幕一区二区| 亚洲欧美综合另类中字| 黄网站免费在线| 国产一区二区三区综合| 日韩高清国产精品| segui88久久综合9999| 8x福利精品第一导航| 色哟哟精品观看| 亚洲二区视频| 97久久精品午夜一区二区| a视频网址在线观看| 欧美视频在线观看免费| 亚洲精品无码一区二区| 亚欧美无遮挡hd高清在线视频| 国产成人综合亚洲| 三级理论午夜在线观看| 亚洲图片有声小说| 中文字幕avav| 91欧美在线| 国产日韩欧美成人| 国产一级在线| 日韩欧美在线网址| 国产精品无码电影| 亚洲人成久久| 国产一区二区三区四区五区在线 | 一区二区三区在线免费看 | 天堂av中文在线观看| 精品少妇一区二区三区视频免付费 | 素人一区二区三区| 精品亚洲aⅴ在线观看| 日韩手机在线观看| 成人性视频网站| 五月天激情图片| а天堂中文最新一区二区三区| 怡红院精品视频| 中文字幕乱码无码人妻系列蜜桃| www精品美女久久久tv| 成人在线免费观看av| 久久动漫网址| 2018日韩中文字幕| 欧美一区二区少妇| 色婷婷狠狠综合| 先锋影音av在线| 男男视频亚洲欧美| 一本久久a久久精品vr综合| av成人亚洲| 久久久精品国产| www.97超碰| 亚洲成人综合视频| 亚洲国产精品成人综合久久久| 日韩亚洲精品在线| 欧美一进一出视频| 99久久综合国产精品二区| 俺去亚洲欧洲欧美日韩| av av片在线看| 亚洲成人www| 日本xxx在线播放| 免费在线成人网| 亚洲欧美精品| 一区二区三区四区高清视频| 国产+人+亚洲| 岛国在线视频| 91精品国产色综合久久不卡电影| 久久精品久久国产| 91浏览器在线视频| 羞羞的视频在线| 欧美性色综合| 欧美极品视频一区二区三区| 免费日韩成人| 久久久久久久久久久网站| 欧美视频综合| 91精品一区二区三区久久久久久 | 真实乱视频国产免费观看 | 欧美午夜激情视频| 视色,视色影院,视色影库,视色网| 国产农村妇女精品一区| 肉肉av福利一精品导航| 亚洲一区二区三区精品动漫| 66精品视频在线观看| 欧日韩不卡在线视频| 成人在线网址| 亚洲男人天堂2019| 国产乱码精品一区二区| 懂色av中文一区二区三区天美 | 亚洲柠檬福利资源导航| 艳妇乳肉豪妇荡乳xxx| 日本成人超碰在线观看| 丝袜人妻一区二区三区| 久久密一区二区三区| 国产亚洲精品久久飘花| 欧美黄页免费| 欧美亚洲日本黄色| 欧美性爽视频| 日韩中文字幕在线免费观看| 无码国产精品一区二区免费16 | 亚洲欧美日韩动漫| 欧美一区二区黄| 中文字幕在线日本| 亚洲图片有声小说| 91视频综合网| 欧美高清在线视频| 日本黄色特级片| 粉嫩在线一区二区三区视频| 超碰超碰在线观看| 美女尤物久久精品| 成人性生活视频免费看| 综合在线视频| 亚洲一区二区三区乱码| 性欧美lx╳lx╳| 国产精品国产三级国产专区53| 精品三级在线| 国产精品高精视频免费| 色吧亚洲日本| 国语自产精品视频在线看| 麻豆网站在线免费观看| 一区二区三区回区在观看免费视频| 乱色精品无码一区二区国产盗| 欧美精品少妇一区二区三区| 中文字幕 欧美激情| 色香蕉久久蜜桃| 亚洲天堂一区在线| 精品久久久国产| 日本一区二区欧美| 亚洲一区二区三区四区在线免费观看| 日韩三级久久久| 中文字幕在线观看一区| 亚洲毛片亚洲毛片亚洲毛片| 国产欧美视频在线观看| 制服 丝袜 综合 日韩 欧美| 久久午夜色播影院免费高清 | 久久久久久一区二区三区| 黄网站视频在线观看| 中国china体内裑精亚洲片| 国产亚洲依依| 国产亚洲精品久久久优势| 精品亚洲综合| 国产一区二区欧美日韩| 成人免费视频| 日韩亚洲欧美成人| 超碰在线caoporn| 欧美激情免费视频| 黄视频在线免费看| 97在线视频观看| 亚洲精品一区| 国产成人在线一区| 日本午夜精品久久久久| 国产啪精品视频网站| 爱情电影网av一区二区| 高清不卡一区二区三区| 国产福利资源一区| 欧美日韩精品综合| 欧美肉体xxxx裸体137大胆| 亚洲美女搞黄| 国产一区二区中文| 成年人视频观看| 人人爽香蕉精品| 日本成人xxx| 不卡视频免费播放| 中国女人特级毛片| **性色生活片久久毛片| 欧美黄色免费观看| 狠狠久久五月精品中文字幕| 国产午夜无码视频在线观看| 欧美日韩国产综合视频在线观看 | av在线日韩| 亚洲综合成人婷婷小说| 欧美福利在线播放网址导航| 日本不卡高清视频一区| 亚洲国产一区二区三区在线播放| 免费不卡av在线| 日本午夜一本久久久综合| 樱花草www在线| 99精品国产一区二区三区不卡| 五月天综合视频| 亚洲欧美日韩国产一区二区三区| 国产一级一级片| 在线看国产一区| 国产成人手机在线| 影音先锋日韩有码| av蜜臀在线| 国产区亚洲区欧美区| 白嫩白嫩国产精品| 亚洲精品免费在线看| 在线观看日韩av电影| 日日干夜夜操s8| 99热99精品| 欧美卡一卡二卡三| 在线国产电影不卡| 色丁香婷婷综合久久| 久久精品久久久久久| 日本不卡1234视频| 亚洲综合日韩在线| 亚洲国产av一区| 99国产一区二区三精品乱码| 欧美一区二区三区粗大| 婷婷综合五月天| 国产哺乳奶水91在线播放| 亚洲视频自拍偷拍| 多野结衣av一区| caoporn国产精品免费公开| 狠狠操综合网| 久久久久久久久久久免费视频| 国产黄色精品网站| 91久久久久久久久久久久久久| 日韩欧美中文字幕在线观看| 丰满大乳国产精品| 久久精品这里热有精品| 成人免费网站www网站高清| 国产伦精品一区二区三区免| 希岛爱理av一区二区三区| 天天操天天摸天天爽| 91丨porny丨最新| 久久久久久久极品| 亚洲电影免费观看高清完整版在线 | 成人国产精品一区二区免费麻豆| 久久国产精品-国产精品| 欧美另类综合| 波多野结衣网页| 亚洲男同1069视频| 夜夜狠狠擅视频| 少妇av一区二区三区| 日韩高清不卡| 日韩欧美电影一区二区| 狂野欧美一区| xxxxx在线观看| 91福利视频网站| 国产二区在线播放| 国产精品免费在线免费| 精品视频99| 性chinese极品按摩| 欧美国产日韩在线观看| 国产精品成人久久久| 国产一区二区欧美日韩| 国产精品第一| 一本久道久久综合| 国产一区二区三区黄视频| 欧美丰满艳妇bbwbbw| 日韩精品一区二区三区视频播放 | 欧美日韩三级电影在线| 在线观看免费看片| 亚洲一区二区三区四区不卡| www.午夜激情| 国内精品一区二区三区| 另类在线视频| 国产精品wwwww| 久久久99精品免费观看| 在线播放成人av| 欧美成人久久久| 操欧美女人视频| 精品www久久久久奶水| 中文字幕不卡在线播放| 国产精品嫩草影院精东| 久久久久久这里只有精品| 红杏一区二区三区| www.国产区| 亚洲视频一二区| 人妻无码一区二区三区久久99| 91av视频在线| 成人3d精品动漫精品一二三| 亚洲欧美日本一区二区三区| 亚洲一区二区四区蜜桃| 青青草免费在线| 成人免费网站在线| 136国产福利精品导航网址| 69精品无码成人久久久久久| 91精品国产色综合久久ai换脸 | 男人久久精品| 成人精品久久一区二区三区| 黄色在线成人| 欧美人与性囗牲恔配| 日韩午夜小视频| 大胆人体一区| 日本a级片在线观看| 久久影院午夜片一区| 一级黄色短视频| 午夜精品福利视频| 青青草成人影院| 美女扒开腿免费视频| 欧美在线影院一区二区| 欧洲在线视频| 亚洲视频sss| www.欧美日韩国产在线| 亚洲天堂2021av| 国内精品久久影院| 91成人观看| 中文字幕 自拍| 日韩精品中文字幕一区 | 欧美性猛片aaaaaaa做受|