1. 程式人生 > >基於React Native淺談多端融合技術

基於React Native淺談多端融合技術

首先講述幾個概念:

1,原生:android + ios
2,web端:H5 + CSS + JS
3,小程式:wxml + wxss + js
4,大前端:各端融合之後的產物,採用的技術就是多端融合技術

雖然原生開發使用者體驗好,但是開發成本和發版成本都比較高,而單純的web開發雖然可以跨平臺,開發成本低,但是使用者體驗差,而且訪問原生的能力受限。因此將web開發和原生開發打通融合就成為大前端新的發展趨勢。比較熱門的就是FaceBook公司2015年推出的跨平臺移動應用開源框架React Native。

由於React Native使用Javascript語言,類似於HTML的JSX,以及CSS來開發移動應用,因此學習成本比較低,兼顧了web開發效率和原生應用效能。RN除支援移動原生外,還支援windows桌面,跨端的關鍵在於虛擬DOM。傳統瀏覽器模型中DOM是效能瓶頸,瀏覽器大部分時間用來處理DOM的互動和更新。React框架中,構建了一個虛擬DOM的中介軟體,所有的操作和互動並不是立刻重新整理DOM,而是由React框架來計算出虛擬DOM和正式DOM直接的diff,然後只重新整理diff部分,可以達到效能最優,而React Native可以通過虛擬DOM呼叫原生控制元件進行渲染。

React Native的侷限性:

1,官方不支援web端,就是說沒辦法將RN的程式碼直接放在瀏覽器中執行
2,官方不支援熱更新,RN現階段還達不到H5那樣靈活發版線上更新,有人在用微軟的 codePush,不過codePush也有一定的侷限性,可以嘗試自己搭建伺服器實現RN的動態更新
3,原生能力有限,不支援多媒體,而且當scrollview和listview相互巢狀時也會引發手勢衝突
4,複雜場景下記憶體效能有瓶頸

2018年Google釋出了一款新的多端融合技術框架Flutter,Flutter採用不同的方法避免由JavaScript橋接器引起的效能問題,即用Dart程式語言來編譯,Dart是用預編譯的方式編譯多個平臺的原生程式碼。但是Dart對開發者增加了學習成本,且UI佈局複雜,不如XML可讀性高。Flutter支援的庫不如React Native和原生多,而且很多元件需要重新開發,不如React Native靈活。

國內一些大公司在基於React Native的基礎上,結合業務需求對React Native進行深度定製,封裝元件,功能擴充套件,在自主研發的ide裡支援將RN程式碼一鍵轉化為H5和小程式程式碼,而且可以進行雙向轉換,實現多端支援。

秉承 write once,run everywhere 的原則,未來肯定會有越來越多的多端融合技術將各端技術進行打通融合,提升開發人員的開發效率,降低不同平臺的遷移成本。作為開發人員,我們有必要深入瞭解不同開發平臺的基礎原理,以及它們之間的差異性,為未來的技術趨勢做好準備。