優點:react
主要缺點:程序員
原理:將App中動態變更的內容經過h5來實現,經過原生網頁加載控件webView。h5代碼只需一次開發就能同時在Android和iOS兩個平臺上運行,減小開發成本,這種h5+原生開發模式成爲混合開發,採用此方式開發的APP成爲混合應用或Hybrid APP,若是一個應用大多功能是h5實現的,咱們稱之爲 web App. web
混合開發中,h5代碼運行在webView中,而webview實質就是一個瀏覽器內核,其JavaScript依然運行在權限受限的沙箱中,因此大多數系統能力沒有訪問權限,如沒法訪問文件系統,不能使用藍牙等。因此h5不能實現的功能都須要原生去作。混合框架通常會在原生代碼中預先實現一些訪問系統能力的API ,暴露給webview以供JavaScript使用,這樣一來webview就成了JavaScript與原生api通訊橋樑,主要負責JavaScript與原生傳遞消息。(咱們把依賴於WebView的用於在JavaScript與原生之間通訊並實現了某種消息傳輸協議的工具稱之爲WebView JavaScript Bridge, 簡稱 JsBridge,它也是混合開發框架的核心。)編程
React Native 是React 在原生移動應用平臺的衍生產物,那二者主要的區別在於虛擬DOM映射的對象是什麼?React中虛擬DOM最終會映射爲瀏覽器DOM樹,而RN中虛擬DOM會經過 JavaScriptCore 映射爲原生控件樹。api
JavaScriptCore 是一個JavaScript解釋器,它在React Native中主要有兩個做用:瀏覽器
Weex是阿里巴巴於2016年發佈的跨平臺移動端開發框架,思想原理和react native相似,最大不一樣在語法層面,weex支持Vue和rax語法,Rax 的 DSL(Domain Specific Language) 語法是基於 React JSX 語法而創造。與 React 不一樣,在 Rax 中 JSX 是必選的,它不支持經過其它方式建立組件,因此學習 JSX 是使用 Rax 的必要基礎。而React Native只支持JSX語法。weex
flutter是Google發佈的一個用於建立跨平臺、高性能移動應用框架,實現自繪引擎。主打跨平臺、高保真、高性能。開發者經過dart語言開發APP。框架
高性能:Dart在 JIT(即時編譯)模式下,速度與 JavaScript基本持平。可是 Dart支持 AOT,當以 AOT模式運行時,JavaScript便遠遠追不上了。編程語言
目前程序主要兩種運行方式:靜態編譯與動態理解。靜態編譯的程序在執行前所有被翻譯爲機器碼,一般將這種類型稱之爲AOT即「提早編譯」 ;而結實執行的則是一句一句邊翻譯邊運行,一般講這種類型稱爲JIT。 AOT程序的典型表明是用C/C++開發的應用,JIT的表明JavaScript、Python等,全部腳本語言都支持JIT模式,注意點是AOT和JIT 指的是程序運行方式,和編程語言並不是關聯。工具
1. 開發效率高
Dart運行時和編譯器支持Flutter的兩個關鍵特性的組合:
基於JIT的快速開發週期:Flutter在開發階段採用,採用JIT模式,這樣就避免了每次改動都要進行編譯,極大的節省了開發時間;
基於AOT的發佈包: Flutter在發佈時能夠經過AOT生成高效的ARM代碼以保證應用性能。而JavaScript則不具備這個能力。
2. 高性能
Flutter旨在提供流暢、高保真的的UI體驗。爲了實現這一點,Flutter中須要可以在每一個動畫幀中運行大量的代碼。這意味着須要一種既能提供高性能的語言,而不會出現會丟幀的週期性暫停,而Dart支持AOT,在這一點上能夠作的比JavaScript更好。
3. 快速內存分配....
如何學習:StackOverflow全球最大程序員問答社區,flutter中文網社區,掘金