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

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

開(kāi)發(fā) 前端
Tree Shaking中文含義是搖樹(shù),在webpack中指的是打包時(shí)把無(wú)用的代碼搖掉,以優(yōu)化打包結(jié)果。而webpack5已經(jīng)自帶了這個(gè)功能了,當(dāng)打包環(huán)境為production時(shí),默認(rèn)開(kāi)啟tree-shaking功能。

背景

大家平時(shí)在查 webpack構(gòu)建體積優(yōu)化 ,可能都會(huì)查到 tree-shaking 這個(gè)東西,很多人看到這個(gè)東西,就會(huì)把它背下來(lái),用來(lái)應(yīng)付以后面試官可能會(huì)問(wèn)到的情況。

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

有啥用?

Tree Shaking中文含義是搖樹(shù),在webpack中指的是打包時(shí)把無(wú)用的代碼搖掉,以優(yōu)化打包結(jié)果。

而webpack5已經(jīng)自帶了這個(gè)功能了,當(dāng)打包環(huán)境為production時(shí),默認(rèn)開(kāi)啟tree-shaking功能。

實(shí)踐

前置準(zhǔn)備

準(zhǔn)備兩個(gè)文件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變量,調(diào)用文件里面的a函數(shù),不使用b函數(shù)
console.log(a.a())
console.log('hello world')

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

// 定義了但是沒(méi)用的變量
const m = 1

打包

前面說(shuō)了webpack5在環(huán)境production下打包的話,默認(rèn)開(kāi)啟tree-shaking,那我們運(yùn)行npm run build進(jìn)行一下打包,看看打包后的代碼長(zhǎng)啥樣:

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

結(jié)論:可以看到打包后,把b函數(shù)、不可能執(zhí)行的代碼、定義未用的變量通通都剔除了,這在一個(gè)項(xiàng)目中,能減少很多的代碼量,進(jìn)而減少打包后的文件體積。

sideEffects

副作用

先來(lái)講講一個(gè)東西——副作用,是什么東西呢?副作用指的是:除了導(dǎo)出成員之外所做的事情,我舉個(gè)例子,下面的a.js是沒(méi)副作用的,b.js是有副作用的:

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

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

export default {
  console
}

有無(wú)副作用的判斷,可以決定tree-shaking的優(yōu)化程度,舉個(gè)例子:

  • 我現(xiàn)在引入a.js但是我不用他的console函數(shù),那么在優(yōu)化階段我完全可以不打包a.js這個(gè)文件。
  • 我現(xiàn)在引入b.js但是我不用他的console函數(shù),但是我不可以不打包b.js這個(gè)文件,因?yàn)樗懈弊饔?,不能不打包?/li>

sideEffects的使用

sideEffects可以在package.json中設(shè)置:

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

優(yōu)化體積

當(dāng)我把sideEffects設(shè)置成true之后,整個(gè)打包體積增加了100k,說(shuō)明默認(rèn)的false還是有用的。

責(zé)任編輯:武曉燕 來(lái)源: 前端之神
相關(guān)推薦

2019-11-04 11:30:51

區(qū)塊鏈技術(shù)智能

2021-06-06 13:08:22

C#特性Attribute

2021-05-17 20:13:50

數(shù)倉(cāng)操作型數(shù)據(jù)庫(kù)

2022-02-22 13:20:57

RSA算法加密

2025-05-28 00:30:00

MCP智能體Agent

2022-04-10 19:26:07

TypeScript類型語(yǔ)法

2013-05-29 10:17:56

Hadoop分布式文件系統(tǒng)

2024-02-07 12:35:00

React并發(fā)模式concurrent

2022-03-29 09:18:55

區(qū)塊鏈

2020-04-03 18:46:27

IPv6互聯(lián)網(wǎng)IPv4

2024-08-26 14:23:56

2021-12-16 15:11:59

Facebook天秤幣加密貨幣

2022-09-06 21:38:45

數(shù)字人數(shù)字孿生

2024-07-12 15:08:23

Python@wraps函數(shù)

2024-06-07 08:19:05

2022-05-04 08:38:32

Netty網(wǎng)絡(luò)框架

2021-05-11 07:30:58

JNIJavaAPI

2021-01-28 17:41:32

Github網(wǎng)站Pull Reques

2024-12-11 07:00:00

面向?qū)ο?/a>代碼

2025-03-13 06:22:59

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 精品久久影院 | 91麻豆精品国产91久久久久久 | 精品国产一区二区三区性色av | 国产精品99久久久久久久久 | 成人在线精品 | 国产精品久久久久aaaa九色 | 免费黄色成人 | 日韩精品一区二区三区视频播放 | 久久aⅴ乱码一区二区三区 91综合网 | 视频第一区 | 国产一区二区影院 | 国产伦精品一区二区三毛 | 欧美激情一区二区三级高清视频 | 午夜精品久久久久久久久久久久久 | 五月天天色 | 亚洲欧美成人在线 | 亚洲精品一区在线 | 日本黄色影片在线观看 | 欧美一区二区三区在线观看 | 91亚洲一区 | 999www视频免费观看 | 欧洲毛片 | 国产精品久久久99 | 国产色视频网站 | 日本黄色影片在线观看 | 91精品在线看 | 免费在线观看成人 | 中文字幕乱码视频32 | 欧美日韩在线观看一区二区三区 | 成年人免费网站 | 伊人网站 | 日本欧美在线 | 久久亚洲精品视频 | 免费影视在线观看 | 精品国产一区二区三区日日嗨 | 久久精品青青大伊人av | 国产一区二区三区在线看 | 成人国产精品久久 | 久久精品国产99国产 | 久久精品亚洲精品国产欧美 | 久久国产精品久久久久久 |