已經(jīng)很長時(shí)間沒有寫博客了。。這一年因?yàn)轫?xiàng)目需求一直在用 React Native 的框架來進(jìn)行跨平臺開發(fā)懈涛,這段期間不管是學(xué)習(xí)RN還是開發(fā)維護(hù)項(xiàng)目都一直很忙,抽個空來寫寫用RN開發(fā)的心得橡伞,也寫寫 RN 相比與另一個跨平臺 flutter 這套框架的優(yōu)缺點(diǎn)盒揉。說實(shí)話 RN 對于兩個平臺來說適配程度比較傾向于 iOS,而安卓的坑更多一些兑徘。剛開始入門 RN 的時(shí)候真的非常令人痛苦预烙,報(bào)一個匪夷所思的錯在 Google 翻了五頁都沒找到好的解決方法,而這樣的遇坑解坑每天都會進(jìn)行道媚,直到現(xiàn)在已經(jīng)完全可以穩(wěn)定開發(fā)扁掸,這一路走來真的是很不容易。所以對于 RN 這個跨平臺框架來說難是剛開始難最域,說簡單多寫幾個頁面之后感覺也很簡單谴分。因?yàn)楝F(xiàn)在RN已經(jīng)很普及了,有些第三方庫也基于成熟镀脂,走到現(xiàn)在來看牺蹄,這樣的跨平臺開發(fā)框架真的很香~~
公司一直在調(diào)研 flutter 是否可以取代 RN 來進(jìn)行一套重構(gòu),但是一直沒有實(shí)行薄翅,有兩個原因吧沙兰,一、flutter 他一直沒有改善 不能熱更新 這個軟肋翘魄,可能這一點(diǎn)會有爭議鼎天,你直接走冷更新不就好了么,但是在項(xiàng)目中一旦在線上發(fā)現(xiàn)有bug或者這個需求只更需改js代碼的話暑竟,及時(shí)走熱更新真的會比冷更新效率提高不止幾倍斋射;二、第三方庫比較少但荤,還處在發(fā)展階段罗岖,這點(diǎn)很明顯了,現(xiàn)造輪子不是不行腹躁,而是對于項(xiàng)目進(jìn)度來說真的太耗時(shí)間了桑包。大體就這兩點(diǎn)吧,但是如果你不介意這個的話纺非,我覺得完全可以考慮一下 flutter哑了,因?yàn)镽N確實(shí)比較耗性能,這也是RN的一個軟肋铐炫,鑒于RN是用js調(diào)用原生框架垒手,所以渲染的是原生組件蒜焊,而且JSX需要創(chuàng)建一個父視圖才能包裹子視圖倒信,所以父視圖只是一個承接作用,而沒必要讓用戶看見他泳梆,進(jìn)而有很多冗余的父視圖被渲染鳖悠,性能自然比較低榜掌。flutter就不同了,F(xiàn)acebook自己開發(fā)了一套渲染引擎Skia乘综,可最?程度保證樣式?jīng)]有平臺差異性憎账,在release模式下性能大大提高。
-
在這里我自己總結(jié)了一個表
-
release 包性能測試
平臺: iPhone 6 16GB iOS 12.1.4
兩者均采用Release模式
測試方法:數(shù)據(jù)量均為1000個簡單的左圖右文的cell
左圖flutter卡辰,右圖RN
Flutter:
可以看到幀數(shù)接近于60FPS胞皱,即使快速滑動也沒有卡頓
React Native:
相較于前者,React Native啟動稍慢九妈,卡頓明顯,幀數(shù)曲線也沒有前者平滑
可能我對RN接觸的比較多反砌,而flutter僅僅限于demo的程度,所以可能會有主觀傾向萌朱,這是我的個人看法宴树,有看法不一樣的可以一起討論下~~