React 和 Vue 有許多相似之處,它們都有:
- 使用 Virtual DOM
- 提供了響應(yīng)式 (Reactive) 和組件化 (Composable) 的視圖組件。
- 將注意力集中保持在核心庫,而將其他功能如路由和全局狀態(tài)管理交給相關(guān)的庫。
由于有著眾多的相似處,我們會(huì)用更多的時(shí)間在這一塊進(jìn)行比較。這里我們不只保證技術(shù)內(nèi)容的準(zhǔn)確性,同時(shí)也兼顧了平衡的考量。我們需要承認(rèn) React 比 Vue 更好的地方,比如更豐富的生態(tài)系統(tǒng)。
運(yùn)行時(shí)性能
React 和 Vue 都是非??斓模运俣炔⒉皇窃谒鼈冎凶鲞x擇的決定性因素。對于具體的數(shù)據(jù)表現(xiàn),可以移步這個(gè)第三方 benchmark,它專注于渲染/更新非常簡單的組件樹的真實(shí)性能。
優(yōu)化
在 React 應(yīng)用中,當(dāng)某個(gè)組件的狀態(tài)發(fā)生變化時(shí),它會(huì)以該組件為根,重新渲染整個(gè)組件子樹。
如要避免不必要的子組件的重渲染,你需要在所有可能的地方使用 PureComponent,或是手動(dòng)實(shí)現(xiàn) shouldComponentUpdate 方法。同時(shí)你可能會(huì)需要使用不可變的數(shù)據(jù)結(jié)構(gòu)來使得你的組件更容易被優(yōu)化。
然而,使用 PureComponent 和 shouldComponentUpdate 時(shí),需要保證該組件的整個(gè)子樹的渲染輸出都是由該組件的 props 所決定的。如果不符合這個(gè)情況,那么此類優(yōu)化就會(huì)導(dǎo)致難以察覺的渲染結(jié)果不一致。這使得 React 中的組件優(yōu)化伴隨著相當(dāng)?shù)男闹秦?fù)擔(dān)。
在 Vue 應(yīng)用中,組件的依賴是在渲染過程中自動(dòng)追蹤的,所以系統(tǒng)能精確知曉哪個(gè)組件確實(shí)需要被重渲染。你可以理解為每一個(gè)組件都已經(jīng)自動(dòng)獲得了 shouldComponentUpdate,并且沒有上述的子樹問題限制。
Vue 的這個(gè)特點(diǎn)使得開發(fā)者不再需要考慮此類優(yōu)化,從而能夠更好地專注于應(yīng)用本身。