基於 Proxy 的觀察者機制
目前,Vue 的反應系統是使用 Object.defineProperty
的 getter 和 setter。 但是,Vue 3 將使用 ES2015 Proxy 作為其觀察者機制。 這消除了以前存在的警告,使速度加倍,並節省了一半的內存開銷。
為了繼續支持 IE11,Vue 3 將發布一個支持舊觀察者機制和新 Proxy 版本的構建。
重寫虛擬DOM (Virtual DOM Rewrite)
添加flg,Vue2的Virtual DOM不管變動多少整個模板會進行重新的比對,如下圖,會對所有的span進行對比:
vue3通過編譯末班會生成更優化的Virtual DOM,這樣的Virtual DOM會含有一些flag(提示),當后期更新數據時,就會找這些帶有flag的節點,去依次比較這些節點上的新值和舊值,如圖:
即使有很多嵌套的情況,也不會遍歷里邊的span,會直接走到嵌套的div里繼續尋找,如圖:
可以添加動態的元素屬性,也會相應做標記,如下圖監聽text和props:
靜態接節提升,這些沒有動態綁定的節點i更新的時候不會被用到,所以說也沒有必要在渲染一遍,它們被放到了渲染函數的外邊,dom更新的時候會被復用,不需要在每次更新的時候,不需要創建整個virtual dom后把舊的銷毀掉,節省了內存,如圖:
tree shaking,需要用的功能模塊會被打入包里,不用的不會,如圖這里用到了checkbox和v-model,就引入了相關的的代碼和邏輯,不用的話不會被引入:
碎片化節點fragment
之前組建的節點必須有一個根元素,vue3可以有多個根元素,也可以有把文本作為根元素
優化組件實例的創建
重寫服務器渲染
通過模板會生成完全不同的渲染函數
更好的支持TS
composition api
- reactive API
- ref API
- watch API
- computed API
- 生命周期鈎子
- TypeScript和JSX支持
以上均為增加不是改寫,高度解耦,邏輯復用,隱藏內部成員