首頁>科技>

跨平臺真的香嗎?

曾幾何時,以RN為代表的跨平臺的技術一經推出。得到無數掌聲。也為網際網路創業者看到新的希望。他們一度認為,跨平臺是萬能的。可以幫助他們解決一切問題,甚至一些技術經理,覺得不趕上跨平臺技術的大潮。就彷彿就落伍了。跨平臺的方案,一套又一套的推出。技術一代又一代演進,一直到今天,有人力推,有觀望,有人嗤之以鼻。這是為什麼呢。我將在下面的文章進行深入分析一下。

APP 跨平臺開發是目前比較熱門的方向,採用 web 框架開發,以 web 的開發體驗快速構建應用,提高了迭代的效率。同時 web 開發方式大多使用動態語言,能夠繞過原生開發限制動態載入,因此具備熱載入、熱更新的能力。用跨平臺技術開發的應用無論效能還是使用者體驗都很接近原生應用。

Flutter 是 Google 新推出的一款幫助開發者開發高品質原生應用的全新APP跨平臺 UI 框架,它的目標是解決了移動開發中跨平臺、高效能問題,一經推出就受到開發者的廣泛關注。

下面將介紹幾大流行的跨平臺開發技術,並從使用成本、開發效率、一致性、動態性和效能等方面作更深入的分析,提供更具體的參考。

幾種技術方案

webview

利用 安卓和 iOS 上的 webview 容器,APP 能夠執行 html、css 和 js 指令碼,展示 web 頁面。如果需要原生功能就新增 bridge 供 javascript 呼叫。具有開發效率高、跨平臺、支援動態釋出等特點,它是目前應用最廣泛最成熟的一種方案。

React Native/Weex

React Native 和 Weex 這類方案,使用 javascript 來構建介面,在執行時翻譯成原生元件展示出來,實際上所有介面都是用原生元件。支援跨平臺,效能和使用者體驗高於 webview,接近原生應用,是當前熱門的跨平臺開發技術。

Flutter

Flutter 使用了一種全新的方式,自己重寫了一個平臺無關的渲染引擎,它只提供畫布,所有的 UI 元件、渲染邏輯都是在這個引擎上處理的。最大程度上保證了各平臺下的一致性,同時也擁有媲美原生的高效能體驗。

注:基於 webview 的框架目前已廣泛在 APP 開發中應用,各種利弊都已得到充分驗證,這個技術具有開發效率、跨平臺、動態釋出等方面的優點,但缺點也明顯,效能和使用者體驗上都很糟糕。接下來,我們重點對 React Native 和 Flutter 進行分析對比。

使用成本

學習曲線

React Native 採用 js 語言,基於 React,對於前端工程師比較友好,上手成本低。

Flutter 使用 Dart 作為它的開發語言,Dart 跟 Java 有點像,比較簡單,上手也容易。但畢竟是門新語言,多少會有些障礙。

接入成本

如果是全新的專案,接入 React Native/Flutter 成本較低,但對於混合開發,接入到現有專案,將是一個巨大的工程。

我們需要考慮如何整合 SDK 到現有專案,原生頁面與 React Native/Flutter 頁面如何跳轉傳值,如何封裝原生模組供與 React Native/Flutter 呼叫,如何打包 React Native/Flutter 與 bundle 整合,如何部署釋出,如何跨端聯調等。

成熟度

React Native 是在 2015 年釋出的,經過 3 年多的發展,已經比較成熟。React Native 社群發展也很活躍,貢獻了大量的開原始碼。

而 Flutter 是在今年 6 月份才推出釋出預覽版,社群也剛剛發展。所以,Flutter 還需要時間。

以 Github 上開啟的 issue 的數量來看,截止到 2018-10-28,React Native 有 689 個,Flutter 有 4097,這也說明了 Flutter 目前尚不穩定。當然國內已經開發出了基於Flutter的應用。

相容性

React Native 沒有真正實現跨平臺,實際開發中,我們需要去適配和橋接兩端的差異性,這帶來了額外的開發成本。

Flutter 相對來說做到了真正的跨平臺,一套程式碼在兩端執行基本沒有相容性問題。

動態性

熱更新

React Native 支援熱更新。

Flutter 的機制目前還不支援熱更新功能,仍然需要發版。

效能

為了更準確地測量資料,以下效能測試,均使用低端裝置,跨平臺開發框架使用目前的穩定版本。

其中iOS端裝置為 iphone 6,

開發環境,React Native 版本:0.50.4,Flutter 版本:0.9.4。

測試環境,Release 模式。

分別用 Flutter 和 React Native 實現同一個 Demo。Demo 只有一個長列表頁面,展示隨機生成的 1 萬條資料,其中每行有兩個本地圖示,效果如下:

Flutter 並沒有達到官方宣稱的穩定 60幀/s,在快速划動的時,還是出現丟幀的現象。平均下來 FPS 為 50.5

React Native 在高效能場景下表現很糟糕,頁面渲染跟不上滑動速度,多次出現白屏現象。

Android

Flutter

滑動很流暢,未出現白屏現象

React Native

滑動很流暢,但是多頁之後頁面渲染跟不上滑動速度,多次出現白屏現象

總體來說,這些跨平臺方案,在效能上,在啟動速度,跟原生的應用都有很大的差距。

開發的建議

1。如果你的app已經開發了很多年,幾年下來已經形成一個龐大專案,可能不太適合進行混合開發,無論效能,還是開發難度比較大。

2,如果你們做一個小型的app,作為技術探索還是可以的。

3,對於創業公司來說,跨平臺的app開發解決方案,確實可以提升產品的體驗。我們公司也嘗試的開發了基於Flutter技術應用。

4.一個重要的一點,RN技術其實在app store進行稽核上也會遇到一些麻煩,蘋果是堅決制止熱更新功能的使用。

  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 支付寶花唄經常提前還款到底有什麼影響?唯一“壞處”需要思考