Vue 3.0中Treeshaking特性及作用
一、是什么
Tree shaking
是一種通過清除多余代碼方式來優(yōu)化項(xiàng)目打包體積的技術(shù),專業(yè)術(shù)語叫 Dead code elimination
簡單來講,就是在保持代碼運(yùn)行結(jié)果不變的前提下,去除無用的代碼
如果把代碼打包比作制作蛋糕,傳統(tǒng)的方式是把雞蛋(帶殼)全部丟進(jìn)去攪拌,然后放入烤箱,最后把(沒有用的)蛋殼全部挑選并剔除出去
而treeshaking
則是一開始就把有用的蛋白蛋黃(import)放入攪拌,最后直接作出蛋糕
也就是說 ,tree shaking
其實(shí)是找出使用的代碼
在Vue2
中,無論我們使用什么功能,它們最終都會(huì)出現(xiàn)在生產(chǎn)代碼中。主要原因是Vue
實(shí)例在項(xiàng)目中是單例的,捆綁程序無法檢測到該對象的哪些屬性在代碼中被使用到
import Vue from 'vue' Vue.nextTick(() => {})
而Vue3
源碼引入tree shaking
特性,將全局 API 進(jìn)行分塊。如果您不使用其某些功能,它們將不會(huì)包含在您的基礎(chǔ)包中
import { nextTick, observable } from 'vue' nextTick(() => {})
二、如何做
Tree shaking
是基于ES6
模板語法(import
與exports
),主要是借助ES6
模塊的靜態(tài)編譯思想,在編譯時(shí)就能確定模塊的依賴關(guān)系,以及輸入和輸出的變量
Tree shaking
無非就是做了兩件事:
- 編譯階段利用
ES6 Module
判斷哪些模塊已經(jīng)加載 - 判斷那些模塊和變量未被使用或者引用,進(jìn)而刪除對應(yīng)代碼
下面就來舉個(gè)例子:
通過腳手架vue-cli
安裝Vue2
與Vue3
項(xiàng)目
Vue2 項(xiàng)目
組件中使用data
屬性
<script> export default { data: () => ({ count: 1, }), }; </script>
對項(xiàng)目進(jìn)行打包,體積如下圖
為組件設(shè)置其他屬性(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 項(xiàng)目
組件中簡單使用
import { reactive, defineComponent } from "vue"; export default defineComponent({ setup() { const state = reactive({ count: 1, }); return { state, }; }, });
將項(xiàng)目進(jìn)行打包
在組件中引入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, }; }, });
再次對項(xiàng)目進(jìn)行打包,可以看到在引入computer
和watch
之后,項(xiàng)目整體體積變大了
三、作用
通過Tree shaking
,Vue3
給我們帶來的好處是:
- 減少程序體積(更?。?/li>
- 減少程序執(zhí)行時(shí)間(更快)
- 便于將來對程序架構(gòu)進(jìn)行優(yōu)化(更友好)
參考文獻(xiàn)
https://segmentfault.com/a/1190000038962700
到此這篇關(guān)于Vue 3.0中Treeshaking特性是什么?的文章就介紹到這了,更多相關(guān)Vue 3.0 Treeshaking特性內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
VUE3基礎(chǔ)學(xué)習(xí)之click事件詳解
由于vue是一個(gè)雙向數(shù)據(jù)綁定的框架,它的點(diǎn)擊事件與以前常用的還是有很大的差別的,下面這篇文章主要給大家介紹了關(guān)于VUE3基礎(chǔ)學(xué)習(xí)之click事件的相關(guān)資料,需要的朋友可以參考下2022-01-01vue-router報(bào)錯(cuò):uncaught error during route 
這篇文章主要介紹了vue-router報(bào)錯(cuò):uncaught error during route navigati問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06移動(dòng)端調(diào)試神器vConsole使用詳解
vConsole?是框架無關(guān)的,可以在?Vue、React?或其他任何框架中使用,今天通過本文給大家介紹移動(dòng)端調(diào)試神器vConsole使用,感興趣的朋友一起看看吧2022-04-04微信小程序?qū)崙?zhàn)基于vue2實(shí)現(xiàn)瀑布流的代碼實(shí)例
瀑布流,又稱瀑布流式布局,是比較流行的一種網(wǎng)站頁面布局,視覺表現(xiàn)為參差不齊的多欄布局,隨著頁面滾動(dòng)條向下滾動(dòng),這種布局還會(huì)不斷加載數(shù)據(jù)塊并附加至當(dāng)前尾部,這篇文章主要介紹了微信小程序?qū)崙?zhàn),基于vue2實(shí)現(xiàn)瀑布流,需要的朋友可以參考下2022-12-12vue+element-ui前端使用print-js實(shí)現(xiàn)打印功能(可自定義樣式)
Print.js主要是為了幫助我們直接在瀏覽器中開發(fā)打印功能,下面這篇文章主要給大家介紹了關(guān)于vue+element-ui前端使用print-js實(shí)現(xiàn)打印功能(可自定義樣式)的相關(guān)資料,需要的朋友可以參考下2022-11-11