移動開發—HTML5 or Native?

移動開發—HTML5 or Native? HTML5,「Write once, run anywhere」,態勢足以秒殺一切。而今隨着移動設備愈來愈先進,對HTML5的支持度愈來愈高,進軍移動領域時會遇到是選擇HTML5和仍是Native(用原生代碼編寫的當地程序)的疑惑。據筆者近年來對二者較爲深刻的研究,認爲二者之間不克不及僅僅是二分法來選擇,還要根據企業自身的狀況、團隊的構成、公司的戰略以及資源的特色等等各方面因素來綜合選擇。 HTML5的成長前景我無疑是非常看好的,各大公司也全力以赴的推進,目前主流的三大智能機操做系統iOS、Android和WIndows Phone都已經支持大部門的HTML5特性。而移動設備硬件軍備競賽也爲HTML5掃清硬件障礙。依照如今的成長速度,我判斷是在三年之內甚至更快,移動設備運行HTML5將會徹底沒有壓力,不管是尺度仍是硬件。如今主流的智能機已經配置雙核處理器和1G及以上的內存,今年再出智能機沒這個配置你都很差意思發佈了。前端

談談HTML5程序員

1.HTML5可以讓你解脫對平臺的依賴,用戶打開瀏覽器,直接就可以等候你的應用,而不須要通過各類Store的審覈。瀏覽器

2.實時更新,一般平臺的審覈都須要七個工做日左右的時間,若是你發佈以後發現問題怎麼辦?Web方式就不存在這種問題。安全

3.Write once, run anywhere?這是幾多程序員的夢想,也曾經是Java讓人心動的地方,但真正作過跨平臺解決方案的人都知道,這只是一句口號而已,跨平臺沒那麼容易玩轉的。沒錯,HTML5能夠實現Write once, run anywhere,但咱們總等不及寫一個Hello World來run anywhere吧。不一樣平臺有本身的特性,不一樣平臺用戶也有本身的操做習慣,若是你想討好全部人,也就意味着你沒法討好任何人。服務器

4.減小開發工做量或者讓開發變得更簡單?對老闆來講,這是一個非常誘人話題,由於工做量的減小就意味着節省更多的錢,沒有老闆不喜歡用更少的錢辦更多的事。並且目前一個很大的問題是,移動設備開發人員特別是iOS開發人員非常很差找,由於技術好的都本身作應用了,人家本身也能賺個月薪上萬甚至更多,爲什麼要進你的公司?怎麼說也是本身的事業,擁有無限可能,還能夠充實享受自由。但若是能夠充分利用HTML5,那麼咱們就可以招聘Web前整個開發人員來構建移動應用,這樣就不愁招人的有問題。由於在許多人的眼裏,HTML5/CSS/Javascript都是沒多大技術含量的工具,實在找不到人,找些實習生學學也就會了。但問題是,工做量真的會減小嗎?技術門檻真的那麼低麼?謎底是NO!架構

我曾經花了半年的時間去開發一個基於HTML5的移動框架,用來模擬Native應用,讓HTML5應用看起來儘可能像當地應用,注意:是像。這有點像jTouch,但願它能和Native程序很好地交互,並且能挪用當地資源等等特性。但最後結果卻不是那麼使人滿意,好比HTML5在動畫切換的時候,有時候會有一些稀裏糊塗的問題,當然你能夠告訴我把動畫效果關了,但這看起來很死板,最後我不得不關閉某些動畫。而用Objective-c編寫程序就沒這麼多事了,幾句簡單的代碼能夠實現很酷的動畫,用HTML5須要更多的代碼,甚至根本沒法實現。並且移動設備上的HTML5開發對開發人員的技術有非常高的要求,不是通常的Web前端人員能解決的,一般擁有這樣技術的人才,工資水平也不會比Native開發人員低幾多。若是你僅僅是要開發一個移動設備上的網站,這會簡單不少,但若是你但願模擬Native應用,並且擁有較高的效率和優雅的用戶體驗,這就頗有技術含量了。不要小看Javascript這類Web開發語言,一般個人見解是越簡單的語言越會體現出技術人員的水平,特別是規劃設計能力。框架

5.其它問題,資源使用的限制,比如說在iOS中有Javascript運行不得超過15秒的限制,不得使用當地硬件設備(如相機等),沒法使用推送服務等。工具

如何選擇?動畫

是否這樣,咱們就不要選擇HTML5了呢?我在前面說過:「要根據企業自身的狀況、團隊的構成、公司的戰略以及資源的特色來綜合選擇」,我最近在關於HTML5討論的微博上也有談到:「HTML5是戰略性的目標,Facebook和Google已經結構,Google Mobile在iPhone上的體驗能夠媲美Native。基本上Native+Web App能夠秒殺大多應用,若是不肯意受制於各類Store,Web App是一個不錯的選擇。對遊戲類和對硬件環境依賴嚴重的應用,只能是Native」。僅管有這樣那樣的問題,但HTML5是一種趨勢,在將來三至五年,HTML5將會取代不少本地應用,但就像多年前咱們一直在談B/S架構取代C/S架構同樣,這須要一個過程。一般在HTML與Native之間,咱們有三種選擇——HTML五、Native App以及HTML5+Native。網站

HTML5就是指純Web的移動應用,用戶須要打開瀏覽器,而後輸入應用的網址使用。Native指的是基於特定平臺開發的應用。Native+HTML5其實是一種加殼的方式,將HTML5應用和瀏覽器封裝起來,但這對用戶是看不見的,用戶沒有任何異物感,和Store上下載的App沒有什麼兩樣。就我我的而言,我是特別推崇HTML5+Native的,這種加殼的方式,可以讓你享受Native與HTML5的雙重好處,但缺點是對技術含量要求較高。當然我這裏指的不是簡單地把HTML5封裝到一個瀏覽器裏面,Native與HTML5會有許多的交互,實際上這有點像混合硬盤,咱們既但願享受SSD的快速,但咱們又想得到機械硬盤的高性價比。我認爲在5-10年內,這將是一種不錯的解決方案,當HTML5和硬件成長到必定水平以後,咱們再徹底轉向HTML5的成本也會非常低的。

如何作?

假定現有一個對本地環境依賴不那麼嚴重的項目,如微博客戶端,各類社交美食甚至LBS應用,咱們均可以採起HTML5+Native。如圖所示,咱們能夠將核心的代碼Core層應用封裝起來,這個代碼和平臺無關,主要是業務邏輯以及和Shell的交互,代碼用Web語言編寫。在Core層上咱們再根據不一樣的移動平臺製做不一樣的UI。最後咱們將上述兩層放到各平臺的Shell中,這個Shell主要是由瀏覽器來完成工做,當然還包含一些硬件操做和讀取本地資源,如GPS、重力感應、相機挪用、地圖、推送通知或者IAP等。

軟件架構圖

咱們能夠把Web的升級版本佈置到服務器上,用戶運行App後,App會向服務器請求獲取最新的Web程序並下載運行,這樣能夠到達跳過各類Store的更新審覈,達到快速更新的目的。並且假如用戶沒法訪問互聯網,咱們可以讓用戶使用上一個版本的程序,不會像純Web App那樣要求用戶必定要聯網。

好處

1.用戶能夠離線使用。

2.更新下載量極少,能夠所有更新,也可以選擇替換版本文件。

3.代碼很安全,衆所周知Web應用有一個很大的問題就是代碼安全的問題,但如今咱們能夠將Web代碼所有加密,當地應用解密後再運行,大大的提供了代碼的安全性。

4.能夠經過瀏覽器做爲中介充分利用Native的好處,比如說可以使用GPS、照相機、當地相冊、讀取當地聯繫人,也可以使用推送功能等,最重要的是,某些Web沒法實現的功能,咱們能夠利用Native來實現。

5.跨平臺,大都核心代碼不用重寫,Javascript的代碼用得好的話,在許多地方均可以用到,包含移動應用、移動網站、PC網站、各類瀏覽器插件,甚至能夠用WebKit封裝做爲跨平臺的應用程序。誠然,這種方式並非徹底跨平臺,但這樣也足以減小不少工做量了,特別是後期的維護。並且徹底的跨平臺是沒有意義的,不一樣平臺有本身的特點,爲了更好的用戶體驗,界面層仍是須要針對性開發的。

壞處

我以爲最大的壞處是技術難度高,若是僅僅是簡單的瀏覽器封裝幾個HTML文件,那沒什麼技術難度,但若是要打造一個系統級的工具,這就頗有技術難度了。這要求有人要了解三個主流平臺的瀏覽器特性,通曉Native程序的開發,要精通HTML5/CSS3/Javascript,最重要的是,要有較強的架構設計能力。若是要再找一個壞處的話,就是它不能知足全部的須要,它其實不能取代Native,但我認爲他能夠替代大部的Native。最後一個問題就是考慮是否適合咱們。從資源角度,要看你的資源是否嚴重依賴於本地環境,如圖像處理、華麗遊戲之類;從技術團隊構成,在團隊中有能夠解決這些問題的牛人,並且有成員精通Web狀況下能夠考慮運用這種方式(技術選型至關重要,稍有失慎,禍不單行);從公司戰略,包含公司對HTML5將來成長的見解,在移動互聯網領域投入預算,是否願意作前瞻的事,可否在前期投入較多資源以及是否容許試錯等等。

相關文章
相關標籤/搜索