跨平臺(tái)框架對(duì)比

方案 框架
h5+原生 Cordova、Ionic、微信小程序
JavaScript開(kāi)發(fā)+原生渲染 React Native、Wexx、快應(yīng)用
自繪UI+原生 QT for mobile、Flutter

h5+原生

h5部分使用webview渲染,這部分可以動(dòng)態(tài)變化;目前微信小程序則是采用這種方案,以后可能采用原生渲染;這種方案的缺點(diǎn)是體驗(yàn)稍差

JavaScript開(kāi)發(fā)+原生渲染

采用web技術(shù)棧,將dom映射為原生控件樹(shù),體驗(yàn)好,接近原生

JavaScript開(kāi)發(fā)+原生渲染的方式主要優(yōu)點(diǎn)如下:

采用Web開(kāi)發(fā)技術(shù)棧,社區(qū)龐大、上手快、開(kāi)發(fā)成本相對(duì)較低。
原生渲染,性能相比H5提高很多。
動(dòng)態(tài)化較好,支持熱更新。
不足:

渲染時(shí)需要JavaScript和原生之間通信,在有些場(chǎng)景如拖動(dòng)可能會(huì)因?yàn)橥ㄐ蓬l繁導(dǎo)致卡頓。
JavaScript為腳本語(yǔ)言,執(zhí)行時(shí)需要JIT,執(zhí)行效率和AOT代碼仍有差距。
由于渲染依賴原生控件,不同平臺(tái)的控件需要單獨(dú)維護(hù),并且當(dāng)系統(tǒng)更新時(shí),社區(qū)控件可能會(huì)滯后;除此之外,其控件系統(tǒng)也會(huì)受到原生UI系統(tǒng)限制,例如,在Android中,手勢(shì)沖突消歧規(guī)則是固定的,這在使用不同人寫的控件嵌套時(shí),手勢(shì)沖突問(wèn)題將會(huì)變得非常棘手。

flutter

實(shí)現(xiàn)一套引擎,使用各個(gè)平臺(tái)的原生api來(lái)繪制UI,這樣體驗(yàn)很好,接近原生,由于控件都是基于自繪引擎,所以不同平臺(tái)效果能高度統(tǒng)一

這種平臺(tái)技術(shù)的優(yōu)點(diǎn)如下:

性能高;由于自繪引擎是直接調(diào)用系統(tǒng)API來(lái)繪制UI,所以性能和原生控件接近。

靈活、組件庫(kù)易維護(hù)、UI外觀保真度和一致性高;由于UI渲染不依賴原生控件,也就不需要根據(jù)不同平臺(tái)的控件單獨(dú)維護(hù)一套組件庫(kù),所以代碼容易維護(hù)。由于組件庫(kù)是同一套代碼、同一個(gè)渲染引擎,所以在不同平臺(tái),組件顯示外觀可以做到高保真和高一致性;另外,由于不依賴原生控件,也就不會(huì)受原生布局系統(tǒng)的限制,這樣布局系統(tǒng)會(huì)非常靈活。

不足:

動(dòng)態(tài)性不足;為了保證UI繪制性能,自繪UI系統(tǒng)一般都會(huì)采用AOT模式編譯其發(fā)布包,所以應(yīng)用發(fā)布后,不能像Hybrid和RN那些使用JavaScript(JIT)作為開(kāi)發(fā)語(yǔ)言的框架那樣動(dòng)態(tài)下發(fā)代碼。
也許你已經(jīng)猜到Flutter就屬于這一類跨平臺(tái)技術(shù),沒(méi)錯(cuò),F(xiàn)lutter正是實(shí)現(xiàn)一套自繪引擎,并擁有一套自己的UI布局系統(tǒng)。不過(guò),自繪制引擎的思路并不是什么新概念,F(xiàn)lutter并不是第一個(gè)嘗試這么做的,在它之前有一個(gè)典型的代表,即大名鼎鼎的QT。

參考自https://book.flutterchina.club/chapter1/mobile_development_intro.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容