移動開發(fā)中HTML5能否替代本地程序?

2012-02-21 09:25:18來源:涂雅作者:涂雅

隨著移動設(shè)備越來越先進,對HTML5的支持度越來越高,我們進軍移動領(lǐng)域的時候,都會遇到一個問題,是選擇HTML5和還是Native(用原生代碼編寫的本地程序)?HTML5的前景無疑是誘人的,一句“Write once, run anywhere”

隨著移動設(shè)備越來越先進,對HTML5的支持度越來越高,我們進軍移動領(lǐng)域的時候,都會遇到一個問題,是選擇HTML5和還是Native(用原生代碼編寫的本地程序)?HTML5的前景無疑是誘人的,一句“Write once, run anywhere”就可以秒殺一切。筆者最近兩年來對HTML5與Native有較為深入的研究,覺得兩者之間不能僅僅是二分法來選擇,還要根據(jù)企業(yè)自身的情況、團隊的構(gòu)成、公司的戰(zhàn)略以及產(chǎn)品的特點來綜合選擇。

HTML5的發(fā)展前景我無疑是非?春玫,各大公司也不遺余力的推動,目前主流的三大智能機操作系統(tǒng)iOS、Android和WIndows Phone都已經(jīng)支持大部分的HTML5特性。而移動設(shè)備硬件軍備競賽也為HTML5掃清硬件障礙。按照現(xiàn)在的發(fā)展速度,我判斷是在三年以內(nèi)甚至更快,移動設(shè)備運行HTML5將會完全沒有壓力,無論是標準還是硬件。現(xiàn)在主流的智能機已經(jīng)配置雙核處理器(之前筆誤為瀏覽器)和1G及以上的內(nèi)存,今年再出智能機沒這個配置你都不好意思發(fā)布了。

談?wù)凥TML5

1.HTML5可以讓你擺脫對平臺的依賴,用戶打開瀏覽器,直接就可以訪問你的應(yīng)用,而不需要經(jīng)過各種Store的審核。

2.實時更新,通常平臺的審核都需要七個工作日左右的時間,如果你發(fā)布之后發(fā)現(xiàn)問題怎么辦?Web方式就不存在這種問題。

3.Write once, run anywhere?

這是多少程序員的夢想,也曾經(jīng)是Java讓人心動的地方,但真正做過跨平臺解決方案的人都知道,這只是一句口號而已,跨平臺沒那么容易玩轉(zhuǎn)的。沒錯,HTML5可以實現(xiàn)Write once, run anywhere,但我們總不能寫一個Hello World來run anywhere吧。不同平臺有自己的特性,不同平臺用戶也有自己的操作習慣,如果你想討好所有人,也就意味著你無法討好任何人。

4.減少開發(fā)工作量或者讓開發(fā)變得更簡單?

對老板來說,這是一個非常誘人話題,因為工作量的減少就意味著節(jié)省更多的錢,沒有老板不喜歡用更少的錢辦更多的事。而且目前一個非常大的問題是,移動設(shè)備開發(fā)人員特別是iOS開發(fā)人員非常不好找,因為技術(shù)好的都自己做應(yīng)用了,人家自己也能賺個月薪上萬甚至更多,為什么要進你的公司?怎么說也是自己的事業(yè),擁有無限可能,還可以充分享受自由。但如果可以充分利用HTML5,那么我們就可以招聘Web前端的開發(fā)人員來構(gòu)建移動應(yīng)用,這樣就不愁招人的有問題。因為在許多人的眼里,HTML5/CSS/Javascript都是沒多大技術(shù)含量的東西,實在找不到人,找些實習生學學也就會了。

但問題是,工作量真的會減少嗎?技術(shù)門檻真的那么低么?答案是NO!

我曾經(jīng)花了半年的時間去開發(fā)一個基于HTML5的移動框架,用來模擬Native應(yīng)用,讓HTML5應(yīng)用看起來盡可能看起來像本地應(yīng)用,注意:是像。這有點像jTouch,但不一樣的是,它能和Native程序很好地交互,并且能調(diào)用本地資源等等特性。但最后結(jié)果確不是那么令人滿意,比如 HTML5在動畫切換的時候,有時候候會有一些莫名其妙的問題,當然你可以告訴我把動畫效果關(guān)了,但這看起來很死板,最后我不得不關(guān)閉某些動畫。而用 Objective-c編寫程序就沒這么多事了,幾句簡單的代碼可以實現(xiàn)很酷的動畫,用HTML5需要更多的代碼,甚至根本無法實現(xiàn)。

而且移動設(shè)備上的HTML5開發(fā)對開發(fā)人員的技術(shù)有非常高的要求,不是一般的Web前端人員能解決的,通常擁有這樣技術(shù)的人才,工資水平也不會比 Native開發(fā)人員低多少。如果你僅僅是要開發(fā)一個移動設(shè)備上的網(wǎng)站,這會簡單很多,但如果你希望模擬Native應(yīng)用,并且擁有較高的效率和優(yōu)雅的用戶體驗,這就很有技術(shù)含量了。不要小看Javascript這類Web開發(fā)語言,通常我的看法是越簡單的語言越會體現(xiàn)出技術(shù)人員的水平,特別是規(guī)劃設(shè)計能力。

5.其它問題,資源調(diào)用的限制,比如說在iOS中有Javascript運行不能超過15秒的限制,不能調(diào)用本地硬件設(shè)備(如相機等),無法使用推送服務(wù)等。

如何選擇?

是否這樣,我們就不要選擇HTML5了呢?我在前面說過:“要根據(jù)企業(yè)自身的情況、團隊的構(gòu)成、公司的戰(zhàn)略以及產(chǎn)品的特點來綜合選擇”,我最近在關(guān)于HTML5討論的微博上也有談到:“HTML5是戰(zhàn)略性方向,F(xiàn)acebook和Google已經(jīng)布局,Google Mobile在iPhone上的體驗可以媲美Native;旧螻ative+Web App可以秒殺多數(shù)應(yīng)用,如果不愿意受制于各種Store,單獨的Web App也是一個不錯的方向。對于游戲類和對硬件環(huán)境依賴嚴重的應(yīng)用,只能是是Native”,相關(guān)鏈接:摘錄微博——對移動互聯(lián)網(wǎng)的一些看法。僅管有這樣那樣的問題,但HTML5是一種趨勢,在未來三至五年,HTML5將會取代很多本地應(yīng)用,但就像多年前我們一直在談B/S架構(gòu)取代C/S架構(gòu)一樣,這需要一個過程。

通常在HTML與Native之間,我們有三種選擇——HTML5、Native App以及HTML5+Native,HTML5就是指純Web的移動應(yīng)用,用戶需要打開瀏覽器,然后輸入應(yīng)用的網(wǎng)址訪問。Native指的是基于特定平臺開發(fā)的應(yīng)用。Native+HTML5實際上是一種加殼的方式,將HTML5用和瀏覽器封裝起來,但這對用戶是不可見的,用戶沒有任何異物感,和 Store上下載的App沒有什么兩樣。

就我個人而言,我是比較推崇HTML5+Native的,這種加殼的方式,可以讓你享受Native與HTML5的雙重好處,但缺點是對技術(shù)含量要求較高。當然我這里指的不是簡單地把HTML5封裝到一個瀏覽器里面,Native與HTML5會有許多的交互,實際上這有點像混合硬盤,我們即便享受 SSD的快速,但我們又想獲得機械硬盤的高性價比。我認為在5-10年內(nèi),這都會是一種不錯的解決方案,當HTML5和硬件發(fā)展到一定水平之后,我們再完全轉(zhuǎn)向HTML5成本也會非常低的。

如何做?

假定現(xiàn)有一個對本地環(huán)境依賴不那么嚴重的項目,如微博客戶端,各種社交美食甚至LBS應(yīng)用,我們都可以采用HTML5+Native。如圖所示,我們可以將核心的代碼Core層用封裝起來,這個代碼和平臺無關(guān),主要是業(yè)務(wù)邏輯以及和Shell的交互,代碼用Web語言編寫。在Core層上我們再根據(jù)不同的移動平臺制作不同的UI。最后我們將上述兩層放到各平臺的Shell中,這個Shell主要是由瀏覽器來完成工作,當然還包括一些硬件操作和讀取本地資源,如GPS、重力感應(yīng)、相機調(diào)用、地圖、推送通知或者IAP等。

\

我們可以把Web的升級部分部署到服務(wù)器上,用戶運行App后,App會向服務(wù)器講求獲取最新的Web程序并下載運行,這樣可以達到跳過各種 Store的更新審核,達到快速更新的目的。而且假如用戶無法訪問互聯(lián)網(wǎng),我們可以讓用戶使用上一個版本的程序,不會像純Web App那樣要求用戶一定要聯(lián)網(wǎng)。
 

好處

1.用戶可以離線使用

2.更新下載量及少,可以全部更新,也可以選擇替換部分文件

3.代碼很安全安全,眾所周知Web應(yīng)用有一個很大的問題就是代碼安全的問題,但現(xiàn)在我們可以將Web代碼全部加密,本地應(yīng)用解密后再運行,大大的提供了代碼的安全性。

4.可以通過瀏覽器作為中介充分利用Native的好處,比如說可以使用GPS、照相機、本地相冊、讀取本地聯(lián)系人,也可以使用推送功能等,最重要的是,某些Web無法實現(xiàn)的功能,我們可以利用Native來實現(xiàn)。

5.跨平臺,多數(shù)核心代碼不用重寫,Javascript的代碼用得好的話,在許多地方都可以用到,包括移動應(yīng)用、移動網(wǎng)站、PC網(wǎng)站、各種瀏覽器插件,甚至可以用WebKit封裝作為跨平臺的應(yīng)用程序。誠然,這種方式并非完全跨平臺,但這樣也足以減少很多工作量了,特別是后期的維護。而且完全的跨平臺是沒有意義的,不同平臺有自己的風格,為了更好的用戶體驗,界面層還是需要針對性開發(fā)的。

壞處

我覺得最大的壞處是技術(shù)難度高,如果僅僅是簡單的瀏覽器封裝幾個HTML文件,那沒什么技術(shù)難度,但如果要打造一個系統(tǒng)級的東西,這就很有技術(shù)難度了。這要求有人要了解三個主流平臺的瀏覽器特性,通曉Native程序的開發(fā),要精通HTML5/CSS3/Javascript,最重要的是,要有較強的架構(gòu)設(shè)計能力。

如果要再找一個壞處的話,就是它不能滿足所有的需要,它并不能代替Native,但我認為他可以替代大部的Native。

適合我們嗎?

首先從產(chǎn)品的角度考慮,你的產(chǎn)品是否嚴重依賴于本地環(huán)境,比如說圖像處理和華麗的游戲之類的。第二要考慮的是你的技術(shù)團隊的構(gòu)成,如果你們的團隊有一個能解決這些問題的牛人,并且有一些清通Web前端的人,那我覺得你可以考慮用這種方式。技術(shù)選型非常重要,稍有不慎,后患無窮。第三個要考慮你們公司的戰(zhàn)略,對HTML5未來發(fā)展的看法,愿意在移動互聯(lián)網(wǎng)上付出多少代價,是否愿意做前瞻性的事,是否愿意在前期投入較多的資源,是否允許試錯等等。

關(guān)鍵詞:HTML5移動開發(fā)

贊助商鏈接: