原生 or 混合 ? 關於應用永不停息的爭論
摘要:原生應用和混合應用的爭論愈演愈烈。在移動技術的世界,我們需要了解本地應用和混合應用的利弊。
【編者按】作者 Jose Maria Arranz是 ItsNat AJAX Java web 、ItsNat Droid Android framework 等的網站的創始人,本篇文章中,Jose 通過對比原生應用和混合應用的諸多利弊,讓更多的人瞭解到兩者之間的區別,根據需求選擇更適合的型別應用。
混合還是本地?這是一個問題。針對這一問題我也來說兩句(以下純屬個人觀點)。
語言
原生應用:使用「嚴肅的語言」,比如 Swift(iOS)或 Java(Android)。「嚴肅」意味著:靜態型別、良好地物件導向技術和快速。
混合應用:基於可怕的 JavaScript 語言(弱型別,不夠好的 OOP,沒本地語言那麼快),不幸的是,如果你的應用介面相當複雜,你就須要做好準備來堆積大量笨拙的 JavaScript 語言。在純 Web 下你有 GWT、Dart......來生成 JavaScript,在行動網路中避免使用 JavaScript 是件很困難的事。
與平臺統一的使用者介面
原生應用:觸手可及、方便使用。只需使用預設的本地元件,就能得到一個完美的本地介面外觀和感覺。
混合應用:必須使用移動工具來模擬本地使用者介面,同時需要生成兩個視覺版本(iOS / Android)。
訪問本地 API
原生應用:直接且無限制的訪問(僅適用於應用程式的安全限制)。
混合應用:必須使用移動工具,因為從 JavaScript 本地訪問並非無限制,比如在 Android 中,由 JavaScript 程式碼呼叫的原生(Java)方法,必須在介面中定義好,這是移動工具包 API 的工作。如果你想要更強大的整合,需在本地 Java 語言下完成程式設計。事實上,所謂「混合」是因為許多混合應用是真正的混合本機網路,也就是一些基礎元素是本機的(menues等),其他部分則由 Web 呈現。有些事情的確麻煩,比如 JavaScript 和原生程式碼之間必要的非同步呼叫(例如,在 Android 上的 JavaScript 程式碼,在不同的主執行緒的執行緒獨享執行)。
效能開發
這也許是本文主觀性最強的部分。
在我看來,原生應用的發展遠遠超過了混合型,比如語言、工具、自然的原生整合等。是的,你必須做兩款(iOS / Android)的應用程式,通常需要兩個團隊。兩個團隊在質量和發展方面的表現,都遠遠優於「一個混合隊」。某些部分可以重複利用,比如資料管理使用的一個類似 Google 的 Java-Objective C 生成的工具。在我看來,如果需要支援視窗移動化,那它的優勢並不是很大。
除錯/測試
原生應用:本地工具已經非常好用。
混合應用:除錯工具有很大改進,但與本地工具不可同日而語。
版本管理
在這個部分中,我們必須分清兩種型別的混合應用之間的區別:
- 行為/使用者介面(HTML、JS)通常是在本地。本質上說混合應用是自帶的,這一點不同於本地應用。
- 行為/ 使用者介面主要靠遠端傳輸。本質上,混合應用就像是將一個移動網站,打包進一個原生應用中。
如果你的應用程式是型別 2 就好說了,版本管理遠比原生應用更容易。在原生應用中,任何細微的 UI 變化和行為都需要一個新版本,你還得保持與舊版本的相容,畢竟更新最終依賴使用者完成。所以這的確是混合應用發展的發光點。
我懷疑亞馬遜商店的移動版就是型別 2:
「在移動應用中使用 HTML5 最重要的原因在於,在更新應用的過程中,無需依靠使用者來升級。這種能力使得管理應用變得更容易、更安全——允許開發者根據需要進行更新。在移動技術世界的持續發展和現場測試中,這將是一個巨大的優勢」。
原文地址:Native Mobile vs. Hybrid Mobile: The Eternal Question
本文系 OneAPM 工程師編譯整理。OneAPM 是應用效能管理領域的新興領軍企業,能幫助企業使用者和開發者輕鬆實現:緩慢的程式程式碼和 SQL 語句的實時抓取。想閱讀更多技術文章,請訪問 OneAPM 官方部落格。
相關文章
- 關於模式爭論的一點點思考模式
- Java 理論與實踐: 關於異常的爭論Java
- 關於Java的取時間方法的爭論Java
- 開發者架構選型:原生應用 or 混合框架?架構框架
- Dore 混合應用框架 —— 基於 React Native 的混合應用遷移方案框架React Native
- 關於 Service Worker 和 Web 應用對應關係的討論Web
- 關於敏捷的一次內部爭論敏捷
- 關於 Angular 應用 Module 的 forRoot 方法的討論Angular
- HTML5應用 + Cordova = 平臺相關的混合應用HTML
- HTML5應用+Cordova=平臺相關的混合應用HTML
- 應用開發之爭:App終將回歸原生APP
- 爭用!!!!一個關於JDBC的問題!JDBC
- Native APP(原生應用)、Web App(Web應用)、Hybrid App(混合應用) 優缺點分析APPWeb
- 關於“斯金納箱”及相關理論在遊戲設計中應用的討論遊戲設計
- 關於雲原生應用,這些安全風險瞭解一下
- 雲原生應用的十個關鍵屬性
- 關於webgl的大型應用Web
- 關於值物件的應用物件
- 關於rowid的應用
- 剛剛,谷歌終於迴應AI專利爭議:怕被碰瓷,搶先下手,永不牟利谷歌AI
- 一條關於swap爭用的報警郵件分析
- 關於在 Angular 應用裡重複呼叫 RouterModule.forRoot(ROUTES) 的討論Angular
- 是否可以建個關於Java在應用軟體領域的論壇Java
- 關於flex佈局的應用Flex
- 關於 Web 應用的 Prerender 策略Web
- 淺談混合應用的演進
- 混合應用中的javascript實踐JavaScript
- 一條關於swap爭用的報警郵件分析(二)
- 一條關於swap爭用的報警郵件分析(一)
- 隱於網路爭論之下,Scott眼中的Alec
- Flutter原生混合開發Flutter
- 關於 Angular 應用對瀏覽器 Back 按鈕支援問題的討論Angular瀏覽器
- 關於 Angular 應用的 Bootstrap 過程Angularboot
- 關於對DDD應用層的疑惑
- 關於web應用的static變數Web變數
- 關於openssl應用的對話 (轉)
- 關於redo writing競爭
- 智慧雲原生應用的崛起