概念
按照開發技術,App 可以分成三大類。
- 原生應用(native application,簡稱 native App)
- Web 應用(web application,簡稱 Web App)
- 混合應用(hybrid application,簡稱 hybrid App)
原生 App
專門為特定手機平台開發的應用程序 ,無法在其他平台運行。一個手機軟件如果要同時支持蘋果手機和安卓手機,就需要為它們各寫一個原生 App。
優點:
- 較好的性能和體驗
- 可以使用系統的所有硬件和軟件 API,比如 GPS、攝像頭、麥克風、加速計、通知推送等等,能充分發揮系統的潛力。
缺點:
- 成本大,需要IOS和安卓開發團隊
- 原生 App 使用底層操作系統的語言,都是很重的編譯型語言,開發和調試成本相對較高,時間周期長。
- 原生 App 必須下載安裝才能使用,只要升級版本,就必須重新下載安裝。用戶往往不願意更新版本,廠商被迫不得不長期支持很久以前的舊版本。
Web應用
Web App 是使用網頁做的應用程序,必須在瀏覽器中使用。主要使用網頁技術,即 HTML、JavaScript 和 CSS。
優點:
- 不需要下載安裝,打開瀏覽器就能使用,而且總是使用最新版本。
- 對於開發者來說,Web App 寫起來比較快,調試容易,不需要應用商店的批准就能發布。
缺點:
- 瀏覽器提供的 API(即 Web API)很有限(目前只有相機、GPS、電池等少數幾個),大部分系統硬件都不能通過網頁訪問,也無法直接讀取硬盤文件,所以 Web App 無法充分利用平台的硬件。
- 網頁通過瀏覽器渲染,性能不如原生 App,不適合做性能要求較高的頁面。
- 打開瀏覽器才能使用,不能從手機的首屏進入
- 缺乏手機狀態欄和鎖屏時的通知推送能力
- 不知脫機訪問(即斷網也能使用)
Chrome 團隊開發了新技術"漸進式 Web App"(Progressive Web App,縮寫 PWA)。它可以把網站緩存在手機里面,供離線時使用,還能在手機首屏生成圖標,直接點擊進入,並且有通知推送能力,也不帶有瀏覽器的地址欄和狀態欄,跟原生 App 的使用體驗非常接近。
但是,PWA 需要瀏覽器訪問一次網站,才能在首屏生成圖標,並且目前 iOS 系統的支持還不夠理想,所以還只是一項探索性質的技術,迄今為止缺乏足夠的成功案例。
混合應用
原生 App 與 Web App 的結合。它的殼是原生 App,但是里面放的是網頁。 可以理解成,混合 App 里面隱藏了一個瀏覽器,用戶看到的實際上是這個隱藏瀏覽器渲染出來的網頁。
混合 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