在這個巨變的時代,技術選型是個很難做決定的事情,而移動應用技術領域在幾個巨頭(Google,F(xiàn)acebook,Apple etc.)的帶動下更是日新月異。所以說要選擇一個適合業(yè)務需求并且匹配開發(fā)人員能力的技術方案并不是一件簡單的事情。我也只是在移動開發(fā)上做過一點微小的工作,此處僅能拋個磚,希望各位有玉的大神盡管砸過來。
做移動應用開發(fā),說起來技術方案不外乎HTML5(沒錯,做Mobile Web其實也算是一種移動應用)、Native(在Android上不管是用Java、Kotlin還是Scala,iOS上不管是用Objective-C還是Swift)和使用原生UI,用JavaScript來實現(xiàn)邏輯的諸如React Native一類的方案。除此之外,還有結合HTML5和Native的Hybird混合方案。不同的技術方案有著不同的適應場景,至于具體如何選擇,接下來我簡單地談談自己的理解。
1、HTML5
也就是Web App的方案。這種方案最大的優(yōu)點在于“Write alt="物聯(lián)網" width="500" height="889" />
美團移動網站引導頁

美團移動網站首頁
美團的移動網頁就是很典型的例子,主要還是提供給不經常使用的用戶一個入口,網站內部還是在盡量引導用戶下載使用客戶端。
2、Hybird
Hybird是一種兼顧Native與HTML的開發(fā)模式,但根據(jù)實現(xiàn)的不同,還可以再細分為兩種實現(xiàn)方案:
在Native App中使用WebView加載遠端Web資源
使用Cordova/PhoneGap等框架通過WebView加載本地資源進行頁面渲染
第一種方案其實已經應用得非常普遍了,很多應用的展示頁面都是通過這種方式實現(xiàn)的。因為展示頁面需要的正是能夠輕易更換內容及布局的格式,并且這種純展示的頁面也并不需要復雜的動畫與特效,使用Web頁面是一個非常合適的解決方案。
而第二種方案前一段時間非常火,因為它在跨平臺,在高效開發(fā)以及快速發(fā)布上有著明顯的優(yōu)勢,畢竟Web內容只需要開發(fā)一次就可以在各個平臺使用。而且將資源打包到本地也可以在一定程度上緩解從遠端加載靜態(tài)資源導致UI展示延遲的問題,并且還可以通過橋接Native和Web來調用一些Device的API。但其劣勢也很明顯,一是通過WebView執(zhí)行代碼效率較低,很難實現(xiàn)一些炫酷的效果,并且還存在不同設備的兼容性問題;二是如果想調用相關平臺的API,需要針對平臺單獨進行開發(fā),如果在應用中用到了大量的Device API,那么開發(fā)的效率將大大降低;三是很難應用到平臺相關的新特性,比較難做出有特色的產品。
使用HTML頁面來實現(xiàn)純展示頁面是非常推薦的一種方案。而Cordova/PhoneGap則更適用于對Mobile預算有限的公司、創(chuàng)業(yè)團隊,或者對App進行快速的上線驗證。
正好之前有個項目就用到了這種方案,為一家業(yè)務轉型的零售商提供了使用一套基本代碼來完成Android和iOS兩個平臺的App和微信公眾號的相關頁面的技術方案。


零售商Android應用零售商微信端
3、React Native
把React Native單獨拿出來,是因為確實不能簡單的將它分到其它任意一種方案里面去。React Native確實是最近最火的跨平臺App解決方案了。它脫胎于React,因為React基于Virtual DOM來進行界面渲染,所以用Native的View來替換掉原本React的HTML DOM就順理成章的引出了React Native的概念。
它與之前的跨平臺方案有一個本質的區(qū)別,在于:其它方案都在追求寫一次code解決所有平臺的問題,而React Native的理念在于“Learn alt="物聯(lián)網" width="500" height="856" />

facebook Androidfacebook iOS
4、原生應用
原生應用的開發(fā)真的是讓人又愛又恨。愛在于你可以在它上面施展拳腳、使用新特性、實現(xiàn)炫酷的效果。而恨則在于它跨平臺性幾乎為零,除了資源外幾乎沒有可重用的東西,即使是相似架構上的邏輯你也得再實現(xiàn)一遍。使用原生開發(fā),能夠方便地添加動畫效果,調用底層硬件,所有的限制僅僅是來自平臺的限制。但是正常情況下需要對不同的平臺搭配不同的開發(fā)人員,而且如果要追求良好的用戶體驗,整個應用的設計還得滿足相應平臺的設計規(guī)范,這不僅是對Dev的考驗,也是對UX的考驗。不過如果真的對App的質量有很高的要求,我覺得這一切的付出也還是都是值得的。