當(dāng)前日期是: 2025-01-11 国产一区日韩二区欧美综合三区,日本写真福利在线观看,国产一级av一区二区三区

国产精品高清免费在线视频-亚洲精品午夜福利一区-91成人精品国产免费男男-噼里啪啦日本一区二区

上海啟嘟渡科技商貿(mào)有限公司
SEARCH

與我們合作

我們專注提供互聯(lián)網(wǎng)一站式服務(wù),助力企業(yè)品牌宣傳多平臺(tái)多途徑導(dǎo)流量。
主營業(yè)務(wù):網(wǎng)站建設(shè)、移動(dòng)端微信小程序開發(fā)、營銷推廣、基礎(chǔ)網(wǎng)絡(luò)、品牌形象策劃等

您也可通過下列途徑與我們?nèi)〉寐?lián)系:

微 信: wxyunyingzhe

手 機(jī): 15624122141

郵 箱:

tree-shaking

更新時(shí)間:2025-01-11 04:17:29

樹搖動(dòng)(tree-shaking)最早由 Rich Harris 在 rollup 中提出,是為了減少最終構(gòu)建體積而誕生的。樹搖動(dòng)術(shù)語的發(fā)明者 Rich Harris 使用做蛋糕的例子來解釋樹搖動(dòng)與死代碼消除(dead code elimination,簡稱 DCE)之間的區(qū)別。

樹搖動(dòng)的目標(biāo)是通過分析靜態(tài)的 ES 模塊,剔除未使用的代碼。而死代碼消除則是在成品完成后,嘗試移除不想要的代碼塊。兩者的主要區(qū)別在于過程的不同,樹搖動(dòng)在制作蛋糕前就排除了不需要的蛋殼,而死代碼消除則是在蛋糕制作完成后剔除蛋殼。

樹搖動(dòng)依賴于 ES2015 中的 import 和 export 語句,檢測代碼模塊是否被導(dǎo)入、導(dǎo)出且被 JavaScript 文件使用。現(xiàn)代 JavaScript 應(yīng)用程序使用模塊打包工具如 webpack 或 Rollup 將多個(gè) JavaScript 文件打包為單個(gè)文件時(shí),自動(dòng)刪除未引用的代碼,這對于準(zhǔn)備發(fā)布代碼的工作非常重要,可以減小最終文件的大小和結(jié)構(gòu)復(fù)雜性。

死代碼通常具有以下特征:在 webpack 中,在 mode: development 模式下對特定代碼進(jìn)行打包時(shí),可以發(fā)現(xiàn)仍存在無法執(zhí)行到的代碼塊。然而,webpack 不支持死代碼消除,這一功能需要通過如 uglify 的插件實(shí)現(xiàn)。在 mode: production 模式下進(jìn)行打包時(shí),可以發(fā)現(xiàn)死代碼已經(jīng)被刪除,并且代碼被壓縮,注釋也被刪除。

在使用 webpack 的簡單配置進(jìn)行打包時(shí),前六種情況都能成功消除死代碼,但第七種情況未能實(shí)現(xiàn)。這可能是因?yàn)?JavaScript 作為動(dòng)態(tài)語言的特性使得靜態(tài)分析較為困難,當(dāng)前解析器僅能通過靜態(tài)分析進(jìn)行,無法完全分析全量導(dǎo)入和動(dòng)態(tài)使用的語法。

側(cè)效標(biāo)記(sideEffects)提供了一種方式來手動(dòng)標(biāo)記代碼是否具有副作用,可以設(shè)置為 false 或數(shù)組。在 package.js 或 module.rules 中進(jìn)行設(shè)置后,重新打包時(shí),只有 main.js 模塊的代碼被保留,而 app.js 的代碼被消除。

webpack 中還提供了一種標(biāo)記消除的方式,通過配置項(xiàng) usedExports。optimization.usedExports 收集的信息可以用于優(yōu)化代碼生成,如去除未使用的導(dǎo)出內(nèi)容。在 mode: production 下默認(rèn)開啟,terser 等 DCE 工具會(huì)基于 usedExports 的信息移除無效代碼。

樹搖動(dòng)本身也采用了靜態(tài)分析方法,程序靜態(tài)分析(Static Code Analysis)是在不運(yùn)行代碼的情況下,通過詞法分析、語法分析、控制流分析、數(shù)據(jù)流分析等技術(shù)對程序代碼進(jìn)行掃描,驗(yàn)證代碼是否滿足規(guī)范性、安全性、可靠性、可維護(hù)性等指標(biāo)的一種代碼分析技術(shù)。樹搖動(dòng)依賴 ES6 的語法:import 和 export,因?yàn)樾枰谶@些語法進(jìn)行靜態(tài)結(jié)構(gòu)分析。

在遠(yuǎn)古版本的 rollup 中,實(shí)現(xiàn)樹搖動(dòng)的過程包括創(chuàng)建 bundle、讀取文件內(nèi)容、使用 acorn 編譯器進(jìn)行 ast 轉(zhuǎn)化、查找 import 和 export 關(guān)鍵字、收集導(dǎo)入和導(dǎo)出信息、關(guān)聯(lián)函數(shù)、變量、類和塊級(jí)作用域、使用 magicString 添加內(nèi)容修改功能、初始化 Scope、遍歷 ast 查找變量函數(shù)、收集依賴和修改信息、最終將相關(guān)信息重組到 bundle 中。

樹搖動(dòng)的實(shí)現(xiàn)還需要繼續(xù)探索,例如研究如何更有效地處理動(dòng)態(tài)導(dǎo)入和副作用標(biāo)記的優(yōu)化。

參考資料:

標(biāo)簽: treeshaking

多重隨機(jī)標(biāo)簽

猜你喜歡文章

QQ客服 電話咨詢
亚洲少妇人妻一区二区| 91麻豆精品欧美一区| 日韩在线欧美一区二区| 日韩精品视频高清在线观看| 久久99青青精品免费| 午夜精品久久久99热连载| 久久老熟女一区二区三区福利| 日韩精品少妇人妻一区二区| 麻豆tv传媒在线观看| 在线视频三区日本精品| 亚洲精品国产精品日韩| 激情内射日本一区二区三区| 黄片免费播放一区二区| 午夜福利激情性生活免费视频| 亚洲高清亚洲欧美一区二区| 欧洲一级片一区二区三区| 欧美大胆女人的大胆人体| 免费一区二区三区少妇| 日韩亚洲激情在线观看| 男女午夜福利院在线观看| 国产乱人伦精品一区二区三区四区| 能在线看的视频你懂的| 黄片美女在线免费观看| 亚洲精品成人福利在线| 十八禁日本一区二区三区| 精品国模一区二区三区欧美| 91欧美激情在线视频| 91插插插外国一区二区| 国产真人无遮挡免费视频一区| 国产小青蛙全集免费看| 亚洲欧美日韩精品永久| 中文字幕一区二区熟女| 亚洲精品一二三区不卡| 扒开腿狂躁女人爽出白浆av| 午夜视频成人在线观看| 大香蕉再在线大香蕉再在线| 国产精品一区二区不卡中文| 欧美又黑又粗大又硬又爽| 国产黑人一区二区三区| 日韩人妻一区二区欧美| 日韩一区二区三区有码|