成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

大廠喜歡問的TreeShaking到底是啥?好在哪呢?五分鐘弄懂!

開發 前端
Tree Shaking中文含義是搖樹,在webpack中指的是打包時把無用的代碼搖掉,以優化打包結果。而webpack5已經自帶了這個功能了,當打包環境為production時,默認開啟tree-shaking功能。

背景

大家平時在查 webpack構建體積優化 ,可能都會查到 tree-shaking 這個東西,很多人看到這個東西,就會把它背下來,用來應付以后面試官可能會問到的情況。

但是,又有多少人去真的了解一下 tree-shaking 呢?自己去實踐一下看 tree-shaking 到底起了哪些作用?對于我們的打包體積的優化又有多少呢?

有啥用?

Tree Shaking中文含義是搖樹,在webpack中指的是打包時把無用的代碼搖掉,以優化打包結果。

而webpack5已經自帶了這個功能了,當打包環境為production時,默認開啟tree-shaking功能。

實踐

前置準備

準備兩個文件main.js、util.js

  • util.js
function a () {
  console.log('a')
}
function b () {
  console.log('b')
}
export default {
  a, b
}
  • main.js
import a from './util'

// 使用a變量,調用文件里面的a函數,不使用b函數
console.log(a.a())
console.log('hello world')

// 不可能執行的代碼
if (false) {
  console.log('haha')
}

// 定義了但是沒用的變量
const m = 1

打包

前面說了webpack5在環境production下打包的話,默認開啟tree-shaking,那我們運行npm run build進行一下打包,看看打包后的代碼長啥樣:

(()=>{"use strict";
const o=function(){console.log("a")};
console.log(o())
console.log("hello world")}
)();

結論:可以看到打包后,把b函數、不可能執行的代碼、定義未用的變量通通都剔除了,這在一個項目中,能減少很多的代碼量,進而減少打包后的文件體積。

sideEffects

副作用

先來講講一個東西——副作用,是什么東西呢?副作用指的是:除了導出成員之外所做的事情,我舉個例子,下面的a.js是沒副作用的,b.js是有副作用的:

  • a.js
function console () {
  console.log('console')
}
export default {
  console
}
  • b.js
function console () {
  console.log('console')
}

// 這個就是副作用,會影響全局的數組
Array.prototype.func = () => {}

export default {
  console
}

有無副作用的判斷,可以決定tree-shaking的優化程度,舉個例子:

  • 我現在引入a.js但是我不用他的console函數,那么在優化階段我完全可以不打包a.js這個文件。
  • 我現在引入b.js但是我不用他的console函數,但是我不可以不打包b.js這個文件,因為他有副作用,不能不打包。

sideEffects的使用

sideEffects可以在package.json中設置:

// 所有文件都有副作用,全都不可 tree-shaking
{
 "sideEffects": true
}
// 沒有文件有副作用,全都可以 tree-shaking
{
 "sideEffects": false
}
// 只有這些文件有副作用,
// 所有其他文件都可以 tree-shaking,
// 但會保留這些文件
{
 "sideEffects": [
  "./src/file1.js",
  "./src/file2.js"
 ]
}

優化體積

當我把sideEffects設置成true之后,整個打包體積增加了100k,說明默認的false還是有用的。

責任編輯:武曉燕 來源: 前端之神
相關推薦

2019-11-04 11:30:51

區塊鏈技術智能

2021-06-06 13:08:22

C#特性Attribute

2021-05-17 20:13:50

數倉操作型數據庫

2022-02-22 13:20:57

RSA算法加密

2025-05-28 00:30:00

MCP智能體Agent

2022-04-10 19:26:07

TypeScript類型語法

2020-04-03 18:46:27

IPv6互聯網IPv4

2022-03-29 09:18:55

區塊鏈

2013-05-29 10:17:56

Hadoop分布式文件系統

2024-02-07 12:35:00

React并發模式concurrent

2024-07-12 15:08:23

Python@wraps函數

2024-06-07 08:19:05

2021-12-16 15:11:59

Facebook天秤幣加密貨幣

2022-09-06 21:38:45

數字人數字孿生

2024-08-26 14:23:56

2021-05-11 07:30:58

JNIJavaAPI

2022-05-04 08:38:32

Netty網絡框架

2021-01-28 17:41:32

Github網站Pull Reques

2024-07-02 11:22:35

2020-05-26 10:42:31

數據庫讀寫分離數據庫架構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久国产 | 久久99久久 | 亚洲国产中文字幕 | 久久激情视频 | 日韩另类 | 欧美成人h版在线观看 | 中国黄色毛片视频 | 国产精品国产三级国产aⅴ中文 | 成人免费久久 | 久久久久久国产精品三区 | 亚洲三区在线 | 欧美理伦片在线播放 | 午夜无码国产理论在线 | 人操人人 | 日韩国产免费观看 | 少妇特黄a一区二区三区88av | 亚洲精品一区二区三区四区高清 | 91电影在线 | 91在线精品一区二区 | 国产yw851.c免费观看网站 | 日韩在线中文 | 国产网站在线 | 亚洲九色 | 久久精品黄色 | 中文字幕精品一区二区三区精品 | 成人av一区二区三区 | 午夜天堂精品久久久久 | 天天搞天天搞 | 日日夜夜草 | 国产在线看片 | 久久亚洲国产 | 国产精品久久久久久久久久久免费看 | 精品久久香蕉国产线看观看亚洲 | 91久久精品国产 | 99av成人精品国语自产拍 | 亚洲成人免费视频在线观看 | 婷婷国产一区 | 国产97久久| 国产色婷婷久久99精品91 | 国产日韩一区 | 久在线观看 |