1. 程式人生 > >跨平臺技術選型對比

跨平臺技術選型對比

隨著移動網際網路的發展,跨平臺一定是未來的趨勢,那麼我們首先來說下為什麼需要跨平臺開發?

本質上,跨平臺開發是為了增加程式碼複用,減少開發者對多個平臺差異適配的工作量,降低開發成本,提高業務專注的同時,提供更好的體驗。通俗了說就是:省錢、偷懶。

就目前來說,跨平臺的開發主要有三個:
1. react native、weex均使用JavaScript作為程式語言,目前JavaScript在跨平臺開發中,可謂佔據半壁江山,大有“一統天下”的趨勢;
2. flutter是使用的Dart作為程式設計語。

那麼我們來對比下三個的區別:

1.react native

Facebook推出的,JSCore引擎,React設計模式

“Learn once, write anywhere” ,代表著 Facebook對 react native 的定義:學習 react ,同時掌握 web 與 app 兩種開發技能。

RN 構建的應用使用的實際控制元件是原生控制元件,使用者擁有與原生應用相近的使用體驗。 對於 React Native 抽象層無法滿足的應用程式,仍然需要原生開發定製。

如果需要與大量定製的原生程式碼相結合,那麼在 React Native 的抽象層中工作的好處就會減少,這種情況下,原生開發會更有優勢。而且RN的效能這塊比原生也是差蠻多的。

2.Weex:

阿里推出來的,JS V8引擎,Vue設計模式

“Write once, run everywhere”:

Weex 的結構是解耦的,渲染引擎與語法層是分開的,目前主要支援 Vue.js 和 Rax 這兩個前端框架。Weex 在 iOS 和 Android 上都實現了一個渲染引擎,並提供了一套基礎的內建元件。基於這些元件,你可以用JS封裝更多的上層元件。 (當然,現實有時很骨感)因為就效能和相容性上實際上是沒有想象那麼美好的

3.Flutter:

谷歌推出來的,Engine引擎,響應式設計模式

真正做到了寫一次,處處執行,跨平臺相容性非常好,而且效能也是這三個中最好的

Flutter 主要分為 Framework 和 Engine,我們基於Framework 開發App,執行在 Engine 上。Engine 是 Flutter 的獨立虛擬機器,由它適配和提供跨平臺支援。

得益於 Engine 層,Flutter 甚至不使用移動平臺的原生控制元件, 而是使用自己 Engine 來繪製 Widget,而 Dart 程式碼都是通過 AOT 編譯為平臺的原生程式碼,所以 Flutter 可以直接與平臺通訊,不需要JS引擎的橋接。

未來趨勢:

1.RN

社群:已有各類豐富的第三方庫

“Airbnb 宣佈放棄使用 React Native,迴歸使用原生技術” : Airbnb 作為 react native 平臺上最大的支持者之一,其開源的lottie 同樣是支援原生和 react native。

Airbnb 在宣佈放棄的文中,也對 react native 的表示了很大量的肯定,而使得他們放棄的理由,其實主要還是集中於專案龐大之後的維護困難,第三方庫的良莠不齊,相容上需要耗費更多的精力導致放棄。

2. weex

2016年開源至今,社群和各類文件都顯得有點疲弱,作為跨平臺開發人員,大多時候肯定不會希望,需要頻繁的自己增加原生功能支援,因為這樣的工作一多,反而會與跨平臺開發的理念背道而馳,帶來開發成本被維護難度增加。

3.Flutter

Flutter現在還沒出正式版,但是以谷歌的號召力,flutter現在就已經很火了,開發人員已經有了大量可以使用的包和外掛。並且谷歌的新系統Fuchsia 使用了該公司自有的“Escher”渲染器和“Flutter”SDK 。前者主要負責在螢幕上繪製 Material Design 元素,後者則用於跨平臺程式碼的實現,以方便 iOS 和 Android 的開發者們。這些集合到一起難免讓你懷疑 Android 是否要被谷歌拋棄的想法。

或者如今先在 Android 等平臺上推廣 Flutter 與 Dart,就是為了以後更好的過渡到新系統上,畢竟開發者是作業系統的生命源泉之一。而 Java 與 JVM 或許會被谷歌完全拋開。Fuchsia採用的不是linux核心,而是Little Kernel 微核心。

Google從前端,到新開發的系統,到我們現在接觸到的flutter都是使用dart,足以見得,google對dart的重視。

而flutter可以說是谷歌的出口,因為跨平臺肯定是未來的趨勢,而現在flutter可以說是當前市面上出來的最好的跨平臺語言了,當然咯,能不能成功還是要看谷歌的推廣了,畢竟語言這東西不是好就一定有人用。

首先我們來說說為什麼flutter會選擇Dart語言

  1. Dart執行時和編譯器支援Flutter的兩個關鍵特性的組合:基於JIT(即時編譯)的快速開發週期:允許使用型別的語言進行形狀更改和有狀態的熱過載,Dart在 JIT(及時編譯)模式下,速度與 JavaScript基本持平。 以及AOT(提前編譯)編譯器,可生成高效的ARM程式碼,可以快速啟動並擁有可預測的生產部署效能。當以 AOT模式執行時,JavaScript便遠遠追不上了。

  2. Dart可以更輕鬆地建立以60fps執行的流暢動畫和轉場

  3. 快速記憶體分配。Flutter框架使用函式式流,它很大程度上依賴於底層的記憶體分配器,Dart可以在沒有鎖的情況下進行物件分配和垃圾回收。

  4. Dart社群正在積極投入資源改進Dart在Flutter中的使用。

  5. Dart是型別安全的語言,擁有完善的包管理和諸多特性。

  6. 開發人員發現Dart特別容易學習,因為它具有靜態和動態語言使用者都熟悉的特性。

Flutter應用程式效能如何?

Flutter應用程式效能非常出色。Flutter旨在幫助開發人員輕鬆實現恆定的60fps。Flutter應用程式通過本機編譯的程式碼執行 - 不涉及直譯器。這意味著Flutter應用程式可以快速啟動並執行。

不使用原生控制元件

Flutter提供了一組自己的widget(包括Material Design和Cupertino(iOS風格的widget)),由Flutter的framework和引擎管理和渲染。從而得到更好的效能。

通過使用相同的渲染器、框架和一組widget,我們可以更輕鬆地同時釋出iOS和Android應用,而無需執行仔細和昂貴的計劃來維護兩個獨立的程式碼庫。

一切皆為widget

一個結構元素(如按鈕或選單)

一個文字樣式元素(如字型或顏色方案)

佈局的一個方面(如填充)

開發工具

Flutter 在開發工具的選擇上很靈活。 應用程式可以通過命令列以及任何編輯器輕鬆開發,這些編輯器來自受支援的 IDE,如 VS Code,Android Studio 或 IntelliJ。 使用哪種 IDE 取決於使用者的偏好。

VS Code 提供了更輕鬆的開發體驗,因此它的啟動速度往往比 Android Studio / IntelliJ 更快。

Android Studio 提供了最多的功能。例如 Flutter Inspector 來分析正在執行的應用程式的視窗部件以及監視應用程式效能。 還提供了開發部件層次結構時很方便的幾個重構。
wx公眾號:zhangfmmobile,一起交流分享
在這裡插入圖片描述