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