淺談React16與Vue3

前言

最近對React16的新特性還有其更新機制進行了略有系統的學習,同時也觀看了尤玉溪在Vue-Conf上的演講,受益匪淺,記錄一下感想。
React與Vue都採用了Virtual Dom的思想進行頁面的更新,但是React是基於JSX語法進行開發,而Vue基於模板編譯。v-dom的使用,並不是因爲v-dom可以提升渲染性能,實際上,在Diff Tree的過程中,消耗的性能未必比重排重繪少。v-dom的引入更多是爲了讓開發者對Dom擁有類似JS一樣的靈活掌控。解放操縱Dom,面向數據驅動編碼。

1. React 與 JSX

React是基於JSX,JSX則幾乎擁有了JS所有的靈活度,在開發中我們也可以深感其便利,Dom中開一個大括號就可以寫JS邏輯判斷,甚至使用map動態生產列表。
JSX通過Balel編譯形成數組,再使用React.createElement創建爲節點。由此可見,JSX在React中的使用非常靈活。React對v-dom的處理也非常靈活,一切皆是組件
但是,過度靈活就會付出更多的性能代價用於Diff Tree,雖然可以從組件層面進行Diff,避免渲染,但在組件內部,還是要逐一進行比較的,Reat很難去追蹤一個組件裏,哪一部分Dom是靜態。爲此,React16推出Fiber更新策略,採用時間分片和任務優先調度去解決長時間Diff導致主線程被佔用,從而導致頁面動畫渲染以及各種點擊事件被阻塞,帶給用戶卡頓感的問題。

2. Vue 與 template

Vue 3中使用Block Tree(區塊樹),將template劃分爲結構性指令v-for、v-if內部和外部,使用Array去追蹤會發生改變的節點,極大的減少不必要的Diff操作。
Vue數據綁定,基於defineProperty,進行set,get。但JS希望對象更加穩定,而不是經常會被改動,這樣有利於性能優化,因此Vue3將向ES6中的Proxy遷移,Proxy嚴格來說只是在被操作對象外部進行了一個包裝攔截。因此,即使Fiber很優秀,但Vue可以通過更快,而不需要使用Fiber。···大概就是只要我跑得夠快,Fiber就追不上我

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章