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

Vue3為什么這么快

 更新時(shí)間:2020年09月23日 10:51:37   作者:一條小咸咸魚  
這篇文章主要介紹了Vue3為什么這么快,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

總所周知,程序員追求的就是一個(gè)字:快?。ó?dāng)然不是什么都追求快的,有些事情快起來是不行滴)

昨天Vue3.0正式發(fā)布了,激動(dòng)的心,顫抖的手,摸了摸我的頭發(fā),嗯~還好。

據(jù)說Vue3.0相比Vue2.x在性能上提升了1.2~2倍,為啥他就這么快呢?

vue3.0做了以下事情

  • diff算法優(yōu)化
  • 靜態(tài)提升(hoistStatic)
  • 事件偵聽器緩存(cacheHandlers)
  • SSR優(yōu)化(看心情更新)

diff算法優(yōu)化

Vue2.x的diff算法

vue2.x的diff算法叫做全量比較,顧名思義,就是當(dāng)數(shù)據(jù)改變的時(shí)候,會(huì)從頭到尾的進(jìn)行vDom對(duì)比,即使有些內(nèi)容是永恒固定不變的。

Vue3.0的diff算法

vue3.0的diff算法有個(gè)叫靜態(tài)標(biāo)記(PatchFlag)的小玩意,啥是靜態(tài)標(biāo)記呢?
簡(jiǎn)單點(diǎn)說,就是如果你的內(nèi)容會(huì)變,我會(huì)給你一個(gè)flag,下次數(shù)據(jù)更新的時(shí)候我直接來對(duì)比你,我就不對(duì)比那些沒有標(biāo)記的了

export function render(_ctx, _cache, $props, $setup, $data, $options) {
 return (_openBlock(), _createBlock("div", null, [
  _createVNode("p", null, "'HelloWorld'"),
  _createVNode("p", null, _toDisplayString(_ctx.msg), 1 /* TEXT */)
                        //上面這個(gè)1就是靜態(tài)標(biāo)記
 ]))
}

那么肯定有人又會(huì)問了,為啥是個(gè)1呢?

TEXT = 1 // 動(dòng)態(tài)文本節(jié)點(diǎn)
CLASS=1<<1,1 // 2//動(dòng)態(tài)class
STYLE=1<<2,// 4 //動(dòng)態(tài)style
PROPS=1<<3,// 8 //動(dòng)態(tài)屬性,但不包含類名和樣式
FULLPR0PS=1<<4,// 16 //具有動(dòng)態(tài)key屬性,當(dāng)key改變時(shí),需要進(jìn)行完整的diff比較。
HYDRATE_ EVENTS = 1 << 5,// 32 //帶有監(jiān)聽事件的節(jié)點(diǎn)
STABLE FRAGMENT = 1 << 6, // 64 //一個(gè)不會(huì)改變子節(jié)點(diǎn)順序的fragment
KEYED_ FRAGMENT = 1 << 7, // 128 //帶有key屬性的fragment 或部分子字節(jié)有key
UNKEYED FRAGMENT = 1<< 8, // 256 //子節(jié)點(diǎn)沒有key 的fragment
NEED PATCH = 1 << 9, // 512 //一個(gè)節(jié)點(diǎn)只會(huì)進(jìn)行非props比較
DYNAMIC_SLOTS = 1 << 10 // 1024 // 動(dòng)態(tài)slot
HOISTED = -1 // 靜態(tài)節(jié)點(diǎn)
// 指示在diff算法中退出優(yōu)化模式
BALL = -2

靜態(tài)提升(hoistStatic)

Vue2.x中無(wú)論元素是否參與更新,每次都會(huì)重新創(chuàng)建然后渲染
Vue3.0中對(duì)不參與更新的元素,會(huì)做靜態(tài)提升,只會(huì)被創(chuàng)建一次,在渲染時(shí)直接復(fù)用即可
還是這段熟悉的代碼,開啟靜態(tài)提升前 

export function render(_ctx, _cache, $props, $setup, $data, $options) {
 return (_openBlock(), _createBlock("div", null, [
  _createVNode("p", null, "'HelloWorld'"),
  _createVNode("p", null, "'HelloWorld'"),
  _createVNode("p", null, _toDisplayString(_ctx.msg), 1 /* TEXT */)
 ]))
}

開啟靜態(tài)提升后編譯結(jié)果 

const _hoisted_1 = /*#__PURE__*/_createVNode("p", null, "'HelloWorld'", -1 /* HOISTED */)
const _hoisted_2 = /*#__PURE__*/_createVNode("p", null, "'HelloWorld'", -1 /* HOISTED */)

export function render(_ctx, _cache, $props, $setup, $data, $options) {
 return (_openBlock(), _createBlock("div", null, [
  _hoisted_1,
  _hoisted_2,
  _createVNode("p", null, _toDisplayString(_ctx.msg), 1 /* TEXT */)
 ]))
}

可以看到開啟了靜態(tài)提升后,直接將那兩個(gè)內(nèi)容為helloworld的p標(biāo)簽聲明在外面了,直接就拿來用了,這么搞的話那肯定會(huì)快啊 

事件偵聽器緩存

默認(rèn)情況下onClick會(huì)被視為動(dòng)態(tài)綁定,所以每次都會(huì)去追蹤它的變化
但是因?yàn)槭峭粋€(gè)函數(shù),所以沒有追蹤變化,直接緩存起來復(fù)用即可
dom結(jié)構(gòu)

<div>
 <button @click = 'onClick'>點(diǎn)我</button>
</div>

開啟事件偵聽器緩存之前: 

export const render = /*#__PURE__*/_withId(function render(_ctx, _cache, $props, $setup, $data, $options) {
 return (_openBlock(), _createBlock("div", null, [
  _createVNode("button", { onClick: _ctx.onClick }, "點(diǎn)我", 8 /* PROPS */, ["onClick"])
                       // PROPS=1<<3,// 8 //動(dòng)態(tài)屬性,但不包含類名和樣式
 ]))
})

這里有一個(gè)8,表示著這個(gè)節(jié)點(diǎn)有了靜態(tài)標(biāo)記,有靜態(tài)標(biāo)記就會(huì)進(jìn)行diff算法對(duì)比差異,所以會(huì)浪費(fèi)時(shí)間

開啟事件偵聽器緩存之后: 

export function render(_ctx, _cache, $props, $setup, $data, $options) {
 return (_openBlock(), _createBlock("div", null, [
  _createVNode("button", {
   onClick: _cache[1] || (_cache[1] = (...args) => (_ctx.onClick(...args)))
  }, "點(diǎn)我")
 ]))
}

可以發(fā)現(xiàn),開啟事件偵聽器緩存后,沒有靜態(tài)標(biāo)記了,這就快了好多嘛

到此這篇關(guān)于Vue3為什么這么快的文章就介紹到這了,更多相關(guān)Vue3 快內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue項(xiàng)目如何實(shí)現(xiàn)ip和localhost同時(shí)訪問

    vue項(xiàng)目如何實(shí)現(xiàn)ip和localhost同時(shí)訪問

    這篇文章主要介紹了vue項(xiàng)目如何實(shí)現(xiàn)ip和localhost同時(shí)訪問,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue中如何使用echarts和echarts-gl實(shí)現(xiàn)3D餅圖環(huán)形餅圖

    vue中如何使用echarts和echarts-gl實(shí)現(xiàn)3D餅圖環(huán)形餅圖

    現(xiàn)在vue是很多公司前端的主流框架,我目前所在公司接觸的項(xiàng)目也都是使用vue來實(shí)現(xiàn)的,很少有完全使用原生的JavaScript來寫項(xiàng)目的了,下面這篇文章主要給大家介紹了關(guān)于vue中如何使用echarts和echarts-gl實(shí)現(xiàn)3D餅圖環(huán)形餅圖的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • vue項(xiàng)目中更改名字和圖標(biāo)的簡(jiǎn)單實(shí)現(xiàn)步驟

    vue項(xiàng)目中更改名字和圖標(biāo)的簡(jiǎn)單實(shí)現(xiàn)步驟

    今天在寫vue項(xiàng)目時(shí)碰到的問題是怎么修改vue的網(wǎng)頁(yè)圖標(biāo),所以下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目中更改名字和圖標(biāo)的簡(jiǎn)單實(shí)現(xiàn),文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • element-ui中的clickoutside點(diǎn)擊空白隱藏元素

    element-ui中的clickoutside點(diǎn)擊空白隱藏元素

    這篇文章主要為大家介紹了element-ui中的clickoutside點(diǎn)擊空白隱藏元素示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • vue3中實(shí)現(xiàn)使用element-plus調(diào)用message

    vue3中實(shí)現(xiàn)使用element-plus調(diào)用message

    這篇文章主要介紹了vue3中實(shí)現(xiàn)使用element-plus調(diào)用message,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 詳解vue3.x頁(yè)面功能拆分方式

    詳解vue3.x頁(yè)面功能拆分方式

    本文主要介紹了vue3.x頁(yè)面功能拆分方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • elementUI動(dòng)態(tài)表單?+?el-select?按要求禁用問題

    elementUI動(dòng)態(tài)表單?+?el-select?按要求禁用問題

    這篇文章主要介紹了elementUI動(dòng)態(tài)表單?+?el-select?按要求禁用問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 使用vue自定義如何實(shí)現(xiàn)Tree組件和拖拽功能

    使用vue自定義如何實(shí)現(xiàn)Tree組件和拖拽功能

    這篇文章主要介紹了使用vue自定義如何實(shí)現(xiàn)Tree組件和拖拽功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • vue自定義指令實(shí)現(xiàn)v-tap插件

    vue自定義指令實(shí)現(xiàn)v-tap插件

    這篇文章主要為大家詳細(xì)介紹了vue自定義指令實(shí)現(xiàn)v-tap插件的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 深入淺析Vue全局組件與局部組件的區(qū)別

    深入淺析Vue全局組件與局部組件的區(qū)別

    這篇文章主要介紹了Vue全局組件與局部組件的區(qū)別,通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06

最新評(píng)論

嵊州市| 长顺县| 宾川县| 驻马店市| 收藏| 江都市| 庆安县| 河东区| 左贡县| 桓台县| 通化县| 榆林市| 汨罗市| 张家港市| 客服| 南溪县| 江华| 宁蒗| 巴东县| 宜宾市| 琼海市| 楚雄市| 定兴县| 铁岭市| 咸丰县| 石台县| 石城县| 湖口县| 漯河市| 建昌县| 军事| 哈巴河县| 基隆市| 屏东县| 米易县| 梁河县| 新巴尔虎右旗| 黄浦区| 克东县| 桦川县| 抚顺县|