開發移動應用程序的三種選擇:原生、HTML5或混合
原文 http://mobile.51cto.com/web-463667.htm
【51CTO譯文】屏幕那么小,應用程序那么大,我們所知道的生活再度顛倒了過來。在如今越來越社交化、開放化的環境下,移動應用程序扮演著至關 重要的角色,而且將重心由互聯網端應用程序轉向移動設備端應用程序。移動應用程序不再是可有可無,而是必不可少。你需要一款移動應用程序,但又該從哪里入 手呢?
許多因素在你的移動戰略中發揮作用,比如工作團隊的開發技能、所需的設備功能以及安全、離線功能和互操作性的重要性等等,這些因素必須統統考慮進來。最后,這不只是你的應用程序會有什么樣的功能,而是如何才能開發出成功的應用程序。
與姑娘一樣,你可能需要在幾張床上試躺一下,看看床是太軟還是太硬,之后才能找到那張合適的床。而有時候根本就沒有稱心如意的選擇。每種開發場景 都有其優缺點,那些場景可能適合你的開發工具,也可能不適合。本文的初衷就是幫助你順利找到一種適合自己的方法來開發移動應用程序。
雖然本文總體上探討的是移動應用程序開發,但具體來說針對期望開發與Salesforce.com、Force.com或 Database.com交互的移動應用程序的開發人員。目前,Salesforce移動SDK支持開發人員構建這三種類型的應用程序:
? 原生應用程序 :原生應用程序是某一個移動平臺(比如iOS或安卓)所特有的,使用相應平臺支持的開發工具和語言(比如iOS平臺支持Xcode和Objective-C,安卓平臺支持Eclipse和Java)。原生應用程序看起來(外觀)和運行起來(性能)是最佳的。
? HTML5應用程序 :HTML5應用程序使用標準的Web技術,通常是HTML5、JavaScript和CSS。這種只編寫一次、可到處運行的移動開發方法構建的跨平臺移 動應用程序可以在多個設備上運行。雖然開發人員單單使用HTML5和JavaScript就能構建功能復雜的應用程序,但截至本文截稿時仍然存在一些重大 的局限性,具體包括會話管理、安全離線存儲以及訪問原生設備功能(攝像頭、日歷和地理位置等)。
? 混合應用程序 :混合應用程序讓開發人員可以把HTML5應用程序嵌入到一個細薄的原生容器里面,集原生應用程序和HTML5應用程序的優點(及缺點)于一體。
原生移動應用程序
簡而言之,原生應用程序提供了最佳易用性、最佳特性以及最佳總體移動體驗。以下這些是只能通過原生應用程序才能實現的功能:
?多點觸控:雙擊、縮放及其他組合的用戶界面(UI)手勢。
?快速圖形API:原生平臺為你提供了顯示最快速的圖形。如果你顯示只有寥寥幾個元素的靜態屏幕,這個功能可能不太重要,但如果你使用大量數據,需要快速刷新,這項功能卻很重要。
?流暢動畫:與快速圖形API有關的是實現流暢動畫的功能。這在動畫、高度交互的報表或者轉換照片和聲音的計算密集型算法中顯得尤為重要。
?內置部件:攝像頭、地址簿、地理位置及設備的其他原生功能可以無縫地整合到移動應用程序中。另一個重要的內置部件是加密的存儲裝置,這方面稍后會有詳細介紹。
?易于使用:原生平臺是人們耳熟能詳的平臺,所以如果你在這個熟悉的平臺上添加人們期望的所有原生功能,也就擁有了一款使用起來完全更容易的應用程序。
?說明文檔:市面上僅僅介紹iOS和安卓開發的圖書就有2500多本,Stackoverflow等網站上還有不計其數的文章、博文和詳細的技術帖子。
原生應用程序通常使用集成開發環境(IDE)開發而成。IDE提供了用于構建、調試、項目管理和版本控制的工具,還提供了專業開發人員需要的其他 工具。雖然iOS和安卓應用程序是使用不同的IDE和語言開發而成的,不過開發環境方面卻有頗多相似之處,沒有必要深入鉆研兩者的差異。簡而言之,設備需 要什么樣的工具,你就使用什么工具。
你之所以需要這些工具,是因為原生應用程序開發起來比較困難。同樣,需要的開發經驗也要比其他開發場景來得豐富;你根本不能剪貼拷貝 Objective-C,就指望可行。確實,開發團隊的技術專長是個重要的考量因素。如果你是名專業開發人員,恐怕早已通曉成熟可靠的API和框架、通過 已構建的部件輕松實現的特效,或者將代碼都放在一個地方的好處。說實話,這年頭技能嫻熟的原生iOS或安卓開發人員如同搖滾明星,自然可以提出搖滾明星般 的要求。
雖然我們從開發的角度來探討原生應用程序,不過別忘了還有一個更重要的角度:最終用戶。如果你在物色某款應用程序,可以在應用程序商店中找到。如 果你開始運行應用程序,它會立即啟動。如果你使用應用程序,可以獲得快速的性能以及一致的平臺外觀感覺。如果你的應用程序需要更新,它會告訴你需要更新。 原生應用程序為你提供了期望從制造你手頭設備的公司獲得的一切,好像應用程序的用途就是這樣。
HTML5移動應用程序
如果你剛接觸移動應用程序開發,那你動作確實有些晚了。不過,就基于Web的移動應用程序而言,我們仍處于早期階段。當然,諸多瀏覽器在過去的好多年變得越來越好,可是底層技術卻基本上沒有發生太大的變化。
但這可能是件好事。HTML5移動應用程序大致上來說就是個網頁或一系列網頁,旨在可以在尺寸極小的屏幕上打開。因此,HTML5應用程序與設備 無關,可以用任何一種現代的移動瀏覽器來打開。又由于你的內容放在網上,它易于搜索,這可能是個巨大的好處,具體就要看應用程序的性質了(比如購物類應用 程序)。
如果你開發過Web應用程序,自然也會喜歡上HTML5,用起來會如魚得水。如果你剛接觸Web開發,技術門檻比較低;相比原生開發或混合開發, 它更容易上手。遺憾的是,每種移動設備對于可用屏幕尺寸和分辨率似乎都有各自的認識和理解,所以另外多了一種負擔:在不同的設備上進行測試。瀏覽器不兼容 問題在安卓設備上來得尤其常見,所以瀏覽器方面要小心。
“只要編寫一次、可到處運行”的HTML5方法的一個重要部分是,就原生應用程序而言,分發和支持要容易得多。需要開發修正版或添加功能特性?完 成后可以為所有用戶統一部署。就原生應用程序而言,開發和測試周期比較長,之后消費者通常必須登錄到商店、下載新版本,才能獲得最新修正版。
在過去的一年,HTML5已全然成為一種非常流行的構建移動應用程序的方式。現在市面上有多種UI框架,可以解決開發人員都不想再次面對的一些最 復雜的問題。iScroll在模擬快速滾動方面做得非常出色。JQuery Mobile和Sencha Touch提供了優雅精致的移動組件,插件即便沒有數千個,至少也有數百個,它們提供了從輪播到超復雜控件的各種特性。
所以,既然HTML5應用程序開發更容易、支持更容易,覆蓋最廣泛的設備種類,那么這些應用程序又輸在哪里呢?我們已經探討了原生開發的主要好 處,所以我們只重申一點:你無法訪問設備上的原生部件。用戶也無法獲得原生應用程序那樣熟悉的外觀感覺,也無法使用熟悉的組合手勢。不過各方面在取得長足 進展,瀏覽器一直在支持越來越多的功能。
最新一批瀏覽器支持硬件加速的CSS3動畫特性,為滑動面板提供了流暢動畫效果,還提供了屏幕之間的轉場效果,不過即便如此,還是無法與原生應用 程序的功能和靈活性相提并論。如今,根本不可能捕獲多點觸控輸入事件(確定何時多個手指在屏幕上),也不可能使用懸浮、然后落到正確位置的側滑按鈕和照片 來獲得路徑風格的那種優雅精致。
不過,重大局限性在于離線存儲和安全,對企業移動應用程序來說更是如此。雖然你可以通過將文件緩存在設備上,貌似實現離線功能,但這根本不是一種 很好的解決辦法。雖然底層數據庫可能經過加密,但是其不如用開發者證書保護每個應用程序的原生鑰匙鏈加密方法來得充分分隔。此外,如果從桌面端啟動帶驗證 機制的Web應用程序,每當應用程序被發送到后臺,它都需要用戶輸入登錄憑據。這對用戶來說是個糟糕的體驗。通常來說,在原生平臺上實現哪怕微不足道的安 全措施對Web移動開發人員來說也是很復雜的任務。因此,要是安全至關重要,這個因素可能會決定你選擇哪一種移動技術。
混合移動應用程序
混合開發集原生和HTML5兩者的優點(及缺點)。我們定義的混合應用程序是一種Web應用程序,主要使用HTML5和JavaScript構建而成,然后封裝在細薄的原生容器里面,可通過容器來訪問原生平臺功能。PhoneGap是最流行的構建混合移動應用程序的容器。
總的來說,混合應用程序集兩者之所長。如果現有的Web開發人員在優化JavaScript,處理CSS從而設計漂亮布局以及編寫可在任何平臺上 運行的兼容HTML代碼方面已成為行家里手,現在就能構建功能復雜的移動應用程序,并不犧牲很酷的原生功能。在某些情況下,原生應用程序開發人員可以為圖 像處理之類的任務編寫插件,但在這種情況下,很多問題隱藏在細節中。
在iOS上,嵌入式Web瀏覽器或UIWebView與Safari瀏覽器不一樣。雖然區別不大,但它們會在調試時帶來棘手問題。這就是為什么有必要使用克服了所有局限性的流行框架。
你知道,原生應用程序安裝在設備上,而HTML5應用程序駐留在Web服務器上,所以你可能會想:混合應用程序將其文件存儲在設備上還是存儲在服務器上?沒錯,實際上有兩種方式來部署混合應用程序。
?本地:你可以將HTML和JavaScript代碼包裝成移動應用程序二進制代碼,采用類似原生應用程序結構的方式。在這種場景下,你使用REST API,在設備和云端之間來回轉移數據。
?服務器:另外,你可以從服務器來部署標準的Web應用程序(可采用可選的緩存機制,以提高性能),只要將容器用作UIWebview上面那層細薄的外殼。
Netflix有一款很酷的應用程序,它使用了一樣的代碼庫以便在所有設備上運行UI:平板電腦、手機、智能電視、DVD播放機、冰箱和汽車。雖 然大多數人不知道該應用程序是如何部署的,也并不關心,但下面這一點很吸引你:他們可以迅速更改界面,或者進行A/B測試,確定最佳的用戶交互。視頻解碼 和流式傳送這些基本工作交給了原生層,以獲得最佳性能,所以這是一款運行快速、看似原生的應用程序,確確實實集兩者之眾長。
結束語
移動開發領域在不斷變化。每過半年,就會出現一種新的移動操作系統,其獨特的功能特性只有通過原生API才能訪問。之后不久,容器將那些功能特性 引入到混合應用程序,而互聯網每過幾年就會迎來巨大飛越。基于目前的技術,本文中介紹的其中一種開發場景勢必會適合你的要求。不妨用下面這張表對此作一個 總結:
|
原生 |
HTML5 |
混合 |
應用程序特性 |
|
||
圖形 |
原生API |
HTML、Canvas和SVG |
HTML、Canvas和SVG |
性能 |
快速 |
慢速 |
慢速 |
原生外觀和感覺 |
原生 |
模擬 |
模擬 |
分發 |
應用程序商店 |
Web |
應用程序商店 |
設備訪問 |
|
||
攝像頭 |
有 |
無 |
有 |
通知 |
有 |
無 |
有 |
聯系人和日歷 |
有 |
無 |
有 |
離線存儲 |
安全的文件存儲 |
共享式SQL |
安全的文件系統和共享式SQL |
地理位置 |
有 |
有 |
有 |
手勢 |
|
||
滑動 |
有 |
有 |
有 |
縮放 |
有 |
無 |
有 |
連接 |
在線和離線 |
主要是在線 |
在線和離線 |
開發技能 |
ObjectiveC和Java |
HTML5、CSS和JavaScript |
HTML5、CSS和JavaScript |
布加迪編譯