Hybrid APP基礎篇(二)->Native、Hybrid、React Native、Web App方案的分析比較
說明
Native、Hybrid、React、Web App方案的分析比較
目錄
前言
參考來源
前人栽樹,後臺乘涼,本文參考了以下來源
前置技術要求
閱讀本文前,建議先閱讀以下文章
楔子
目前的主流應用程式有四大型別:Native App、Hybrid App、React Native App、Web App。本文分別對這幾種方案做一些分析對比
幾種APP開發模式
概述
當前的APP開發模式注意有以下四大型別:
- Native App
即傳統的原生APP開發模式,Android基於Java語言,底層呼叫Google的 API;iOS基於OC或者Swift語言,底層呼叫App官方提供的API。體驗最後。
- Web App
即移動端的網站,將頁面部署在伺服器上,然後使用者使用各大瀏覽器訪問。一般泛指 SPA(Single Page Application)模式開發出的網站。體驗最差。
- Hybrid App
即混合開發,由Native通過JSBridge等方法提供統一的API,然後用Html5+JS來寫實際的邏輯,呼叫API,這種模式下,由於Android,iOS的API一般有一致性,而且最終的頁面也是在webview中顯示,所有有跨平臺效果
- React Native App
Facebook發起的開源的一套新的APP開發方案,使用JS+部分原生語法來實現功能。初次學習成本較高,但是在入門後,經過良好的封裝也能夠實現大部分的跨平臺。而且體驗很好。
Native App
即原生開發模式,開發出來的是原生程式,不同平臺上,Android和iOS的開發方法不同,開發出來的是一個獨立的APP,能釋出應用商店,有如下優點和缺點
優點
- 直接依託於作業系統,互動性最強,效能最好
相比於其它模式的互動,原生APP體驗是最優的
- 功能最為強大,特別是在與系統互動中,幾乎所有功能都能實現
得益於原生是直接依託於系統的,所以可以直接呼叫官方提供的api,功能最為全面(比如本地資源操作,通知,動畫等)
缺點
- 開發成本高,無法跨平臺,不同平臺Android和iOS上都要各自獨立開發
Android上基於Java開發,iOS上基於OC或Swift開發,相互之間獨立,必須要有各自的開發人員
- 門檻較高,原生人員有一定的入門門檻,相比廣大的前端人員而言,較少
原生的一個很大特點就是獨立,所以不太容易入門,不像web前端一樣那麼廣泛,而且Android,iOS都需要獨立學習
- 更新緩慢,特別是釋出應用商店後,需要等到稽核週期
原生應用更新是一個很大的問題,Android中還能直接下載整包APK進行更新,但是iOS中,如果是釋出AppStore,必須通過AppStore地址更新,而每次更新都需要稽核,所以無法達到及時更新
- 維護成本高
同開發一樣,專案上線後,維護起來也很為麻煩
Web App
即移動端的網站,將頁面部署在伺服器上,然後使用者使用各大瀏覽器訪問,不是獨立APP,無法安裝和釋出
Web網站一般分兩種,MPA(Multi-page Application)和SPA(Single-page Application)。而Web App一般泛指後面的SPA形式開發出的網站(因為可以模仿一些APP的特性),有如下優點和缺點
優點
- 開發成本低,可以跨平臺,除錯方便
web app一般只需要一個前端人員開發出一套程式碼,然後即可應用於各大主流瀏覽器(特殊情況可以程式碼進行下相容),沒有新的學習成本,而且可以直接在瀏覽器中除錯
- 維護成本低
同上,如果程式碼合理,只需要一名前端就可以維護多個web app
- 更新最為快速
由於web app資源是直接部署在伺服器端的,所以只需要替換伺服器端的檔案,使用者訪問是就已經更新了(當然需要解決一些快取問題)
- 無需安裝App,不會佔用手機記憶體
通過瀏覽器即可訪問,無需安裝,使用者就會比較願意去用
缺點
- 效能低,使用者體驗差
由於是直接通過的瀏覽器訪問,所以無法使用原生的API,操作體驗不好
- 依賴於網路,頁面訪問速度慢,耗費流量
Web App每次訪問都需要去服務端載入資源訪問,所以必須依賴於網路,而且網速慢時訪問速度很不理想,特別是在移動端,如果網站優化不好會無故消耗大量流量
- 功能受限,大量功能無法實現
只能使用Html5的一些特殊api,無法呼叫原生API,所以很多功能存在無法實現情況
- 臨時性入口,使用者留存率低
這既是它的優點,也是缺點,優點是無需安裝,確定是用完後有時候很難再找到,或者說很難專門為某個web app留存一個入口,導致使用者很難再次使用
Hybrid App
即混合開發,也就是半原生半Web的開發模式,有跨平臺效果,當然了,實質最終釋出的仍然是獨立的原生APP(各種的平臺有各種的SDK),有如下優點和缺點
優點
- 開發成本較低,可以跨平臺,除錯方便
Hybrid模式下,由原生提供統一的API給JS呼叫,實際的主要邏輯有Html和JS來完成,而由於最終是放在webview中顯示的,所以只需要寫一套程式碼即可,達到跨平臺效果,另外也可以直接在瀏覽器中除錯,很為方便
最重要的是隻需要一個前端人員稍微學習下JS api的呼叫即可,無需兩個獨立的原生人員
一般Hybrid中的跨平臺最少可以跨三個平臺:Android App,iOS App,普通webkit瀏覽器
- 維護成本低,功能可複用
同上,如果程式碼合理,只需要一名前端就可以維護多個app,而且很多功能還可以互相複用
- 更新較為自由
雖然沒有web app更新那麼快速,但是Hybrid中也可以通過原生提供api,進行資源主動下載,達到只更新資原始檔,不更新apk(ipa)的效果
- 針對新手友好,學習成本較低
這種開發模式下,只需要前端人員關注一些原生提供的API,具體的實現無需關心,沒有新的學習內容,只需要前端人員即可開發
- 功能更加完善,效能和體驗要比起web app好太多
因為可以呼叫原生api,所以很多功能只要原生提供出就可以實現,另外效能也比較接近原生了
- 部分效能要求的頁面可用原生實現
這應該是Hybrid模式的最多一個好處了,因為這種模式是原生混合web,所以我們完全可以將互動強,效能要求高的頁面用原生寫,然後一些其它頁面用JS寫,嵌入webview中,達到最佳體驗
缺點
- 相比原生,效能仍然有較大損耗
這種模式受限於webview的效能桎梏,相比原生而言有不少損耗,體驗無法和原生相比
- 不適用於互動性較強的app
這種模式的主要應用是:一些新聞閱讀類,資訊展示類的app;但是不適用於一些互動較強或者效能要求較高的app(比如動畫較多就不適合)
React Native App
Facebook發起的開源的一套新的APP開發方案,Facebook在當初深入研究Hybrid開發後,覺得這種模式有先天的缺陷,所以果斷放棄,轉而自行研究,後來推出了自己的“React Native”方案,不同於H5,也不同於原生,更像是用JS寫出原生應用,有如下優點和缺點
其實很多大公司都已經轉React Native開發了,已經很成熟了
優點
- 雖然說開發成本大於Hybrid模式,但是小於原生模式,大部分程式碼可複用
相比於原生模式,這種模式是統一用JS寫程式碼,所以往往只需要一名成員投入學習,即可完成跨平臺app的開發,而且後續程式碼封裝的好,很多功能可複用
- 效能體驗高於Hybrid,不遜色與原生
這種模式和Hybrid不一樣,Hybrid中的view層實際上還是dom,但是這種模式的view層是虛擬dom,所以效能要高於Hybrid,距離原生差距不大
這種模式可以認為是用JS寫原生,即頁面用JS寫,然後原生通過Bridge技術分析JS,將JS內容單獨渲染成原生Android和iOS,所以也就是為什麼效能不遜色原生
- 開發人員單一技術棧,一次學習,跨平臺開發
這種模式是統一由JS編寫,有著獨特的語法,所以只需要學習一次,即可同時開發Android和iOS
- 社群繁榮,遇到問題容易解決
這應該是React Native的很大一個優勢,不像Hybrid模式和原生模式一樣各自為營,這種模式是Facebook統一發起的,所以有一個統一的社群,裡面有大量資源和活躍的人員,對開發者很友好
缺點
- 雖然可以部分跨平臺,但並不是Hybrid中的一次編寫,兩次執行那種,而是不同平臺程式碼有所區別
這種模式實際上還是JS來寫原生,所以Android和iOS中的原生程式碼會有所區別,如果需要跨平臺,對開發人員有一定要求
當然了,如果發展了有一定時間,元件庫夠豐富了,那麼其實影響也就不大了,甚至會比Hybrid更快
- 開發人員學習有一定成本
雖然社群已經比較成熟了,但是一個新的普通前端學習起來還是有一定學習成本的,無法像Hybrid模式一樣平滑
分析
各大開發模式直觀對比
以下是各大模式的直觀對比分析
對比表格
Native App | Web App | Hybrid App | React Native App | |
---|---|---|---|---|
原生功能體驗 | 優秀 | 差 | 良好 | 接近優秀 |
渲染效能 | 非常快 | 慢 | 接近快 | 快 |
是否支援裝置底層訪問 | 支援 | 不支援 | 支援 | 支援 |
網路要求 | 支援離線 | 依賴網路 | 支援離線(資源存本地情況) | 支援離線 |
更新複雜度 | 高(幾乎總是通過應用商店更新) | 低(伺服器端直接更新) | 較低(可以進行資源包更新) | 較低(可以進行資源包更新) |
程式語言 | Android(Java),iOS(OC/Swift) | js+html+css3 | js+html+css3 | 主要使用JS編寫,語法規則JSX |
社群資源 | 豐富(Android,iOS單獨學習) | 豐富(大量前端資源) | 有侷限(不同的Hybrid相互獨立) | 豐富(統一的活躍社群) |
上手難度 | 難(不同平臺需要單獨學習) | 簡單(寫一次,支援不同平臺訪問) | 簡單(寫一次,執行任何平臺) | 中等(學習一次,寫任何平臺) |
開發週期 | 長 | 短 | 較短 | 中等 |
開發成本 | 昂貴 | 便宜 | 較為便宜 | 中等 |
跨平臺 | 不跨平臺 | 所有H5瀏覽器 | Android,iOS,h5瀏覽器 | Android,iOS |
APP釋出 | App Store | Web伺服器 | App Store | App Store |
如何選擇開發模式
目前有多種開發模式,那麼我們平時開發時如何選擇用哪種模式呢?如下
選擇純Native App模式的情況
- 效能要求極高,體驗要求極好,不追求開發效率
一般屬於吹毛求疵的那種級別了,因為正常來說如果要求不是特別高,會有Hybrid
選擇Web App模式的情況
- 不追求使用者體驗和效能,對離線訪問沒要求
正常來說,如果追求效能和體驗,都不會選用web app
- 沒有額外功能,只有一些資訊展示
因為web有限制,很多功能都無法實現,所以有額外功能就只能棄用這種方案了
選擇Hybrid App模式的情況
- 大部分情況下的App都推薦採用這種模式
這種模式可以用原生來實現要求高的介面,對於一些比較通用型,展示型的頁面完全可以用web來實現,達到跨平臺效果,提升效率
當然了,一般好一點的Hybrid方案,都會把資源放在本地的,可以減少網路流量消耗
選擇React Native App模式的情況
- 追求效能,體驗,同時追求開發效率,而且有一定的技術資本,捨得前期投入
React Native這種模式學習成本較高,所以需要前期投入不少時間才能達到較好水平,但是有了一定水準後,開發起來它的優勢就體現出來了,效能不遜色原生,而且開發速度也很快
另類的app方案
除了以上的幾種常見app開發模式,其實還有一些其它的類似方案
微網頁
比如在進行微信網頁開發時,可以呼叫一些微信的特殊api,這其實就是算是微信的Hybrid模式,實質上仍然是在瀏覽器中(只不過是騰訊的X5核心)
當然了,微信在這方面做了很多限制,比如許可權認證等等,所以導致開發起來效果不是很完美。這裡不再贅述其功能
微信小程式
微信小程式是微信新推出的一種新的app方案,2016年9月開始進行內測,2016年11月準備全面面向開發者
需要注意的是,這種模式是“反HTML5”的,相當於是微信提供的一套封閉開發模式,有自己的語法和IDE,有的類似於iOS開發的感覺。具體也不贅述,請參考引用來源中的文章
其它
當然除此外,還有一些其它的模式,比如“百度直達號”,"流應用"等等,這裡不再贅述
相關推薦
Hybrid APP基礎篇(二)->Native、Hybrid、React Native、Web App方案的分析比較
說明 Native、Hybrid、React、Web App方案的分析比較 目錄 前言 參考來源 前人栽樹,後臺乘涼,本文參考了以下來源 前置技術要求 閱讀本文前,建議先閱讀以下文章 楔子 目前的主流應用程式有四大型別:Native App、Hybrid App、React
Hybrid APP基礎篇(一)->什麼是Hybrid App
最新更新 Android、iOS、JS三端內容初步都已經完成,有完善的設計思路、教程以及API文件。 說明 Hybrid APP是目前廣泛流行的一種APP開發模式,本文對其做簡單介紹 目錄 前言 參考來源 前人栽樹,後臺乘涼,本文參考了以下來源 楔子 現在概念上的APP誕生是
Qt入門之基礎篇 ( 二 ) :Qt項目建立、編譯、運行和發布過程解析
qt 5 對話 讓我 進度 qmake ctr deploy 設定 設置 轉載請註明出處:CN_Simo。 題解: 本篇內容主講Qt應用從創建到發布的整個過程,旨在幫助讀者能夠快速走進Qt的世界。 本來計劃是講解Qt源碼靜態編譯,如此的話讀者可能並不能清楚地知
mysql 基礎篇(二) 賬號、許可權管理
mysql 基礎篇(二) 賬號、許可權管理、備份與還原 建立賬號密碼:Grant all on test.* to “cj”@”localhost” identified by “cj”; 建立賬號 如果報錯: 需要執行flush privileges 後,在重新執行新增使用者就可
JavaSE7基礎 定義二維數組 固定的行、列數
pre png 運行 二維數組 代碼 args logs 精華 dem 版本參數:jdk-7u72-windows-i586註意事項:博文內容僅供參考,不可用於其他用途。 代碼 class Demo{ public static void main(Stri
通過Rancher部署並擴容Kubernetes集群基礎篇二
rancher k8s 接上一篇通過Rancher部署並擴容Kubernetes集群基礎篇一7. 使用ConfigMap配置redishttps://github.com/kubernetes/kubernetes.github.io/blob/master/docs/user-guide/confi
NIO相關基礎篇二
說明 poll 可靠性 span 心跳檢測 客戶端 保持 fig string 轉載請註明原創出處,謝謝! 上篇NIO相關基礎篇一,主要介紹了一些基本的概念以及緩沖區(Buffer)和通道(Channel),本篇繼續NIO相關話題內容,主要就是文件鎖、以及比較關鍵的Se
Python之旅 (基礎篇二 1-25)
body 函數 closed 技術分享 items pop img -s 之間 字典: 字典是python中唯一的映射類型,采用鍵值對(key-value)的形式存儲數據。python對key進行哈希函數運算,根據計算的結果決定value的存儲地址,所以字典是無序存儲
JAVA常用集合框架用法詳解基礎篇二之Colletion子介面List
接著上一篇,接著講講集合的知識。上一篇講了Collection介面。它可以說是集合的祖先了,我們這一篇就說說它的子孫們。 一、Collection的子介面 List:有序(存入和取出的順序一致),元素都有索引(即角標),元素可以重複。 Set:元素不能重複,無序的。 首先講講L
python 面試題(基礎篇) 二 +手打答案整理---------玉米都督
*arg和**kwarg作用 比如現在我有一個最簡單的加法(Jiafa)函式: def Jiafa(x, y): z = x + y return z print(Jiafa(1,2)) 這個很簡單,一看就知道輸出等於3。 那下一個問題是,如果我要算不固定個數的數字相加,那怎
Vue 基礎篇二
Vue 元件 元件(Component)是Vue.js最強大的功能之一. 元件可以擴充套件HTML元素,封裝可重用的程式碼,是可複用的Vue例項. 元件的註冊 // html 程式碼 <div id="app"> <my-component><
Vue元件 Vue 基礎篇二
Vue 基礎篇二 Vue元件 元件 (Component) 是 Vue.js 最強大的功能之一。
Spring 基礎篇(二) SpringBean 的生命週期
Spring中Bean的管理是其最基本的功能,根據下面的圖來了解Spring中Bean的生命週期: 例項化一個Bean,也就是我們通常說的new 按照Spring上下文對例項化的Bean進行配置,也就是IOC注入 如果這個Bean實現了BeanNa
JS 基礎篇(二):理解JS原型物件與原型鏈
目錄: 一、什麼是原型物件和原型鏈 JavaScript 常被描述為一種基於原型的語言 (prototype-based language)——每個物件對應擁有一個原型,物件以其原型為模板、從原型繼承方法和屬性。而同時原型也是物件,它也擁有原型,並從中繼承方法
Python開發第一篇 基礎篇(二)-------運算子與基本資料型別
對於python而言,一切事物都是物件,物件是基於類建立的,物件繼承了類的屬性,方法等特性 一.int 首先我們來檢視一下int包含了哪些函式 # python3
【Redis詳解基礎篇二(命令)】
這裡寫自定義目錄標題前言操作 前言 操作 寫鍵值對 set key value 獲取鍵值對 get key 切換資料庫 select 15 //預設是有16個數據庫 直接到指定的
Android基礎篇(二)——Android應用結構分析和清單檔案
一、Android應用目錄結構簡單介紹 在Android Studio上開發Android應用簡單方便,除了建立Android專案,開發者只需做兩件事情:1.使用activiy_main.xml檔案定
ADO.NET資料訪問技術基礎篇二
DataReader 基本概念 通過DataReader我們可以以只讀、順序的方式檢視資料庫中的資料 常用屬性 IsClosed 判斷DataReader是否關閉。 RowFetc
php基礎篇-二維陣列排序 array_multisort
<?php function my_sort($arrays,$sort_key,$sort_order=SORT_ASC,$sort_type=SORT_NUMERIC ){ if(is_array($arrays)){ foreach ($arrays as $array){
初級篇二:微信小程式申請、工具、常用網址
從這篇文章你可以學到: 1、個人或公司申請小程式 2、小程式管理工具、資料助手等工具 3、小程式開發者常用的網址 一、個人或公司如何申請小程式 小程式和公眾號是同一個入口: https://mp.weixin.qq.com/ 點選左上