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