Vue3 0快在哪兒?

2021-10-25 02:55:44 字數 2027 閱讀 7663

一.diff演算法的優化

**vue2:**資料發生變化之後是生成一棵新的dom樹,然後就行全域性對比。

如下圖:

**vue3:**新增靜態標記(patch flag)在與上次的虛擬節點進行對比,只對比帶有patch flag的節點並且可以通過flag的資訊得知當前節點要對比的具體內容

如圖:

附錄patch flags

export

const

enum patchflags

二.靜態提公升(hoist static)

**vue2:**中無論元素是否參與更新,每次都會重新建立,然後再渲染

**vue3:**中對於不參與更新的元素,會做靜態提公升,只會被建立一次,在渲染時直接復用即可

demo

>

>

我是段落p

>

>

}p>

div>

vue2.0靜態提公升前

import

from

"vue"

export

function

render

(_ctx, _cache, $props, $setup, $data, $options)

vue3.0靜態提公升後

import

from

"vue"

//生成靜態節點

const _hoisted_1 =

/*#__pure__*/

_createvnode

("p"

,null

,"我是段落",-

1/* hoisted */

)//動態節點

export

function

render

(_ctx, _cache, $props, $setup, $data, $options)

三.事件偵聽器快取(cache handlers)

預設情況下onclick會被視為動態繫結,所以每次都會去追蹤它的變化但是因為是同乙個函式,所以沒有追蹤變化,直接快取起來復用即可

demo

>

@click

="onclick"

>

按鈕button

>

div>

vue2.0快取之前

import

from

"vue"

export

function

render

(_ctx, _cache, $props, $setup, $data, $options)

,"按鈕",8

/* props */,[

"onclick"])

]))//unkeyed_fragment = 1 << 8:有靜態標記當做動態屬性每次更新進行對比

}vue3.0快取之後

import

from

"vue"

export

function

render

(_ctx, _cache, $props, $setup, $data, $options)

,"按鈕")]

))//沒有了靜態標記不會更新後在進行對比

}

四.ssr渲染(伺服器端渲染)

小迷妹在哪兒

e.小迷妹在哪兒 time limit per test 2.0 seconds memory limit 256 megabytes ultmaster 男神和小迷妹們玩起了捉迷藏的遊戲。小迷妹們都希望自己被 ultmaster 男神發現,因此她們都把自己位置告訴了 ultmaster 男神,因此...

大理石在哪兒

現有n各大理石,每個大理石上寫著乙個非負整數。首先把各數從小到大排序,然後回答q各問題。每個問題問是否有乙個大理石寫著某個整數x,如果是,還要回答哪個大理石上寫著x。排序後的大理石從左到右編號為1 n。樣例輸入 4 11 3 5 1 55 2 1 3 3 3 1 2 3樣例輸出 case 1 5 f...

宇宙簡史 我們在哪兒

我們在哪兒?這個話題是我們要討論的第乙個話題。從古希臘的同心球模型開始,人們對於自己處於宇宙的位置就有了初步的探索。人們根據近處的物體移動的較快,遠處的物體移動較慢的視差變化,從而總結出了地心說。但是由於行星逆行和亮度的變化,導致同心球模型並不能很好的 所觀測的現象。這時候,托勒密又在原有的同心球模...