最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Tree-Shaking?機制快速掌握

 更新時間:2023年02月16日 08:38:19   作者:JS心法  
這篇文章主要為大家介紹了Tree-Shaking?機制的快速掌握教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

寫在前面

最近在讀霍老師的《Vue.js設(shè)計與實現(xiàn)》,感覺收獲很多,由于霍老師是官方Vue維護成員,會從很通俗易懂的角度去講Vue的實現(xiàn)細(xì)節(jié)。而不是按照源碼死講解,很不錯,推薦給大伙!

直奔主題

Tree-Shaking 的本質(zhì)其實就是消除無用代碼也就是dead code,減小打包后文件,不太清楚dead code概念的不用擔(dān)心,下面會講到。Tree-Shaking是打包構(gòu)建工具常用的優(yōu)化手段。在我們?nèi)粘5拈_發(fā)最常使用的,可能就是ESM的使用,會觸發(fā)默認(rèn)的Tree-Shaking機制并對無效代碼進行處理。

//utils.js
const str = "Hello Word";
export function fun1(){
    console.log(str);
}
export function fun2(){
    console.log(str);
}
//index.js
import { fun2 } from 'utils.js'

這里的fun1并不會被打包到最后生成 build 文件,證明fun1滿足了dead code的條件,從而觸發(fā)了Tree-Shaking機制。

dead code 條件

1.代碼不會被執(zhí)行,不可到達(dá)

2.代碼執(zhí)行的結(jié)果不會被用到

3.代碼只會影響死變量(只寫不讀)

這里有一個例外 就是js由于是動態(tài)類型的語言 很難從純編譯下解析到當(dāng)前是否是dead code 如:

//utils.js
function fun1(){
    console.log(str);
}
fun1.prototype.run = function(){
    console.log("run");
}
Array.prototype.stop = function(){
    console.log("stop");
}
export const fun1;

雖然沒有被調(diào)用,但是在打包后生成的build 文件中依舊會包含這段代碼,是因為無法靜態(tài)解析這段代碼是否真正無用,如果刪除掉了utils.js 會導(dǎo)致Array原型上方法也失效。所以,這就引出了另一個很重要的概念就是,副作用,如果一個 函數(shù)調(diào)用會產(chǎn)生副作用,那么就不能將其移除。什么是副作用?簡單 地說,副作用就是,當(dāng)調(diào)用函數(shù)的時候會對外部產(chǎn)生影響

當(dāng)我們遇到打包工具無法靜態(tài)解析的代碼,可以通過打包工具的另一個機制去做手動告知

import {fun1} from './utils'
/*#__PURE__*/ fun1()

這里的/*#__PURE__*/ 就是告知打包工具 這段代碼的調(diào)用不會產(chǎn)生副作用,你隨便刪,設(shè)置過完后再次重新打包就會發(fā)現(xiàn),Array 原型上聲明stop 就不包含在內(nèi)了!

知道了這些,那我們?nèi)粘?yīng)該如何利用Tree-Shaking機制呢?

如在我們的代碼中,封裝根據(jù)開發(fā)環(huán)境,設(shè)置動態(tài)api、不同調(diào)試log??梢酝ㄟ^打包工具的預(yù)構(gòu)建常量,配合判斷,如果環(huán)境不是測試環(huán)境,會被檢測為dead code從而移出構(gòu)建最終的構(gòu)建文件中。實現(xiàn)優(yōu)化打包體積,并且不會影響我們開發(fā)的環(huán)境。

//webpack.config.js
new webpack.DefinePlugin({
 __DEV_OPTIONS_: JSON.stringify(true)
})
//index.js
if(__DEV_OPTIONS_){
    //初始化開發(fā)環(huán)境下的相關(guān)配置
    initLog();
    setApi();
}

最后

以上就是本篇文章的全部內(nèi)容了!學(xué)習(xí)思路來自《Vue.js設(shè)計與實現(xiàn)》分享給大家!

更多關(guān)于Tree-Shaking 機制的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue3中多個彈窗同時出現(xiàn)的解決思路

    Vue3中多個彈窗同時出現(xiàn)的解決思路

    這篇文章主要介紹了Vue3中多個彈窗同時出現(xiàn)的解決思路,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 在Vue3中使用EasyPlayer.js播放器的具體流程

    在Vue3中使用EasyPlayer.js播放器的具體流程

    EasyPlayer.js是一款強大的H5播放器,專為現(xiàn)代網(wǎng)頁設(shè)計,提供對多種視頻流協(xié)議的支持,這篇文章主要介紹了在Vue3中使用EasyPlayer.js播放器的具體流程,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • vue3使用vue3-print-nb實現(xiàn)區(qū)域打印功能

    vue3使用vue3-print-nb實現(xiàn)區(qū)域打印功能

    這篇文章主要給大家介紹了關(guān)于vue3使用vue3-print-nb實現(xiàn)區(qū)域打印功能的相關(guān)資料,在日常操作中,相信很多人在Vue怎么用插件實現(xiàn)打印功能問題上存在疑惑,需要的朋友可以參考下
    2023-07-07
  • Element-ui中元素滾動時el-option超出元素區(qū)域的問題

    Element-ui中元素滾動時el-option超出元素區(qū)域的問題

    這篇文章主要介紹了Element-ui中元素滾動時el-option超出元素區(qū)域的問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 解決vue中el-tab-pane切換的問題

    解決vue中el-tab-pane切換的問題

    這篇文章主要介紹了解決vue中el-tab-pane切換的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue使用一些外部插件及樣式的配置代碼

    vue使用一些外部插件及樣式的配置代碼

    這篇文章主要介紹了vue使用一些外部插件及樣式的配置代碼,本文分步驟實例圖文相結(jié)合給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • Element?el-date-picker?日期選擇器的使用

    Element?el-date-picker?日期選擇器的使用

    本文主要介紹了Element?el-date-picker?日期選擇器的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • vue-cli4.0多環(huán)境配置變量與模式詳解

    vue-cli4.0多環(huán)境配置變量與模式詳解

    這篇文章主要介紹了vue-cli4.0多環(huán)境配置變量與模式詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 如何使用vue實現(xiàn)跨域訪問第三方http請求

    如何使用vue實現(xiàn)跨域訪問第三方http請求

    這篇文章主要介紹了如何使用vue實現(xiàn)跨域訪問第三方http請求,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-03-03
  • vue實現(xiàn)記事本功能

    vue實現(xiàn)記事本功能

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)記事本功能,記事本可以進行添加刪除事件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06

最新評論

彩票| 错那县| 山西省| 普宁市| 梅河口市| 宁武县| 遂溪县| 乌审旗| 广丰县| 柏乡县| 临高县| 盈江县| 潞西市| 鄂州市| 周至县| 定襄县| 乐东| 张家口市| 凤山市| 额尔古纳市| 瓦房店市| 分宜县| 唐河县| 博罗县| 兴山县| 大同市| 沾益县| 拉萨市| 潢川县| 大化| 容城县| 宁乡县| 胶南市| 武邑县| 无为县| 廊坊市| 洛扎县| 肇源县| 卫辉市| 萨迦县| 宽甸|