概念
按照開發技術,App 能夠分紅三大類。html
- 原生應用(native application,簡稱 native App)
- Web 應用(web application,簡稱 Web App)
- 混合應用(hybrid application,簡稱 hybrid App)
原生 App
專門爲特定手機平臺開發的應用程序 ,沒法在其餘平臺運行。一個手機軟件若是要同時支持蘋果手機和安卓手機,就須要爲它們各寫一個原生 App。web
優勢:瀏覽器
- 較好的性能和體驗
- 可使用系統的全部硬件和軟件 API,好比 GPS、攝像頭、麥克風、加速計、通知推送等等,能充分發揮系統的潛力。
缺點:緩存
- 成本大,須要IOS和安卓開發團隊
- 原生 App 使用底層操做系統的語言,都是很重的編譯型語言,開發和調試成本相對較高,時間週期長。
- 原生 App 必須下載安裝才能使用,只要升級版本,就必須從新下載安裝。用戶每每不肯意更新版本,廠商被迫不得不長期支持好久之前的舊版本。
Web應用
Web App 是使用網頁作的應用程序,必須在瀏覽器中使用。主要使用網頁技術,即 HTML、JavaScript 和 CSS。app
優勢:框架
- 不須要下載安裝,打開瀏覽器就能使用,並且老是使用最新版本。
- 對於開發者來講,Web App 寫起來比較快,調試容易,不須要應用商店的批准就能發佈。
缺點:iphone
- 瀏覽器提供的 API(即 Web API)頗有限(目前只有相機、GPS、電池等少數幾個),大部分系統硬件都不能經過網頁訪問,也沒法直接讀取硬盤文件,因此 Web App 沒法充分利用平臺的硬件。
- 網頁經過瀏覽器渲染,性能不如原生 App,不適合作性能要求較高的頁面。
- 打開瀏覽器才能使用,不能從手機的首屏進入
- 缺少手機狀態欄和鎖屏時的通知推送能力
- 不知脫機訪問(即斷網也能使用)
Chrome 團隊開發了新技術"漸進式 Web App"(Progressive Web App,縮寫 PWA)。它能夠把網站緩存在手機裏面,供離線時使用,還能在手機首屏生成圖標,直接點擊進入,而且有通知推送能力,也不帶有瀏覽器的地址欄和狀態欄,跟原生 App 的使用體驗很是接近。性能
可是,PWA 須要瀏覽器訪問一次網站,才能在首屏生成圖標,而且目前 iOS 系統的支持還不夠理想,因此還只是一項探索性質的技術,迄今爲止缺少足夠的成功案例。網站
混合應用
原生 App 與 Web App 的結合。它的殼是原生 App,可是裏面放的是網頁。 能夠理解成,混合 App 裏面隱藏了一個瀏覽器,用戶看到的其實是這個隱藏瀏覽器渲染出來的網頁。spa
混合 App 的原生外殼稱爲"容器",內部隱藏的瀏覽器,一般使用系統提供的網頁渲染控件(即 WebView 控件),也能夠本身內置一個瀏覽器內核。
結構上,混合 App 從上到下分紅三層:HTML5 網頁層、網頁引擎層(本質上是一個隔離的瀏覽器實例)、容器層。
能夠調用底層系統全部的 API,容器層提供了API Bridge,充當底層 API 的中介,容許內部的網頁調用底層。
優勢:
- 跨平臺
- 靈活性
- 開發方便
缺點:
- 性能比較欠缺,存在網頁引擎的中間層,不只不如原生 App,並且因爲 WebView 不是全功能瀏覽器,可能比 Web App 都要慢一些。
- 跨平臺就沒法使用只有特定平臺提供的功能,致使體驗不如純的原生 App。如安卓有物理的後退按鈕、iphone沒有。
- 開發方便
手機 App 的技術棧
(1)原生 App 技術棧
安卓平臺的 Java 技術棧(Android Studio),iOS 平臺的 Object-C 技術棧或 Swift 技術棧(Xcode)。
(2)混合 App 技術棧
PhoneGap、Cordova、Ionic 等框架
(3)跨平臺 App 技術棧
Facebook的React Native、谷歌的Flutter 、阿里的Weex、Dcould的uni app
(1)原生技術棧的技能和體驗最好,對於複雜的大型 App,若是條件容許,應該採用這種方式開發。
(2)混合技術棧的成本低,靈活性好,對性能要求不高的簡單 App,尤爲是純展現性的頁面,能夠採用這種方式開發。
(3)跨平臺技術棧適用於,存在外部或內部條件的限制,只有一個團隊開發跨平臺 App 的狀況。
參考文檔
阮一峯大神我的網頁:http://www.ruanyifeng.com/blog/2019/12/hybrid-app-concepts.html