Vue 3.0中Treeshaking特性及作用

一、是什么
Tree shaking 是一種通過清除多余代碼方式來優(yōu)化項目打包體積的技術,專業(yè)術語叫 Dead code elimination
簡單來講,就是在保持代碼運行結果不變的前提下,去除無用的代碼
如果把代碼打包比作制作蛋糕,傳統(tǒng)的方式是把雞蛋(帶殼)全部丟進去攪拌,然后放入烤箱,最后把(沒有用的)蛋殼全部挑選并剔除出去
而treeshaking則是一開始就把有用的蛋白蛋黃(import)放入攪拌,最后直接作出蛋糕
也就是說 ,tree shaking 其實是找出使用的代碼
在Vue2中,無論我們使用什么功能,它們最終都會出現(xiàn)在生產(chǎn)代碼中。主要原因是Vue實例在項目中是單例的,捆綁程序無法檢測到該對象的哪些屬性在代碼中被使用到
import Vue from 'vue'
Vue.nextTick(() => {})而Vue3源碼引入tree shaking特性,將全局 API 進行分塊。如果您不使用其某些功能,它們將不會包含在您的基礎包中
import { nextTick, observable } from 'vue'
nextTick(() => {})二、如何做
Tree shaking是基于ES6模板語法(import與exports),主要是借助ES6模塊的靜態(tài)編譯思想,在編譯時就能確定模塊的依賴關系,以及輸入和輸出的變量
Tree shaking無非就是做了兩件事:
- 編譯階段利用
ES6 Module判斷哪些模塊已經(jīng)加載 - 判斷那些模塊和變量未被使用或者引用,進而刪除對應代碼
下面就來舉個例子:
通過腳手架vue-cli安裝Vue2與Vue3項目
Vue2 項目
組件中使用data屬性
<script>
export default {
data: () => ({
count: 1,
}),
};
</script>對項目進行打包,體積如下圖

為組件設置其他屬性(compted、watch)
export default {
data: () => ({
question:"",
count: 1,
}),
computed: {
double: function () {
return this.count * 2;
},
},
watch: {
question: function (newQuestion, oldQuestion) {
this.answer = 'xxxx'
}
};再一次打包,發(fā)現(xiàn)打包出來的體積并沒有變化

Vue3 項目
組件中簡單使用
import { reactive, defineComponent } from "vue";
export default defineComponent({
setup() {
const state = reactive({
count: 1,
});
return {
state,
};
},
});將項目進行打包

在組件中引入computed和watch
import { reactive, defineComponent, computed, watch } from "vue";
export default defineComponent({
setup() {
const state = reactive({
count: 1,
});
const double = computed(() => {
return state.count * 2;
});
watch(
() => state.count,
(count, preCount) => {
console.log(count);
console.log(preCount);
}
);
return {
state,
double,
};
},
});再次對項目進行打包,可以看到在引入computer和watch之后,項目整體體積變大了

三、作用
通過Tree shaking,Vue3給我們帶來的好處是:
- 減少程序體積(更?。?/li>
- 減少程序執(zhí)行時間(更快)
- 便于將來對程序架構進行優(yōu)化(更友好)
參考文獻
https://segmentfault.com/a/1190000038962700
到此這篇關于Vue 3.0中Treeshaking特性是什么?的文章就介紹到這了,更多相關Vue 3.0 Treeshaking特性內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
vue-router報錯:uncaught error during route 
這篇文章主要介紹了vue-router報錯:uncaught error during route navigati問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
微信小程序實戰(zhàn)基于vue2實現(xiàn)瀑布流的代碼實例
瀑布流,又稱瀑布流式布局,是比較流行的一種網(wǎng)站頁面布局,視覺表現(xiàn)為參差不齊的多欄布局,隨著頁面滾動條向下滾動,這種布局還會不斷加載數(shù)據(jù)塊并附加至當前尾部,這篇文章主要介紹了微信小程序實戰(zhàn),基于vue2實現(xiàn)瀑布流,需要的朋友可以參考下2022-12-12
vue+element-ui前端使用print-js實現(xiàn)打印功能(可自定義樣式)
Print.js主要是為了幫助我們直接在瀏覽器中開發(fā)打印功能,下面這篇文章主要給大家介紹了關于vue+element-ui前端使用print-js實現(xiàn)打印功能(可自定義樣式)的相關資料,需要的朋友可以參考下2022-11-11

