首發:我的博客,更新&糾錯&回覆javascript
移動開發很火,移動開發技術不少。都有哪些技術?相互對好比何?怎樣選擇?html
簡單列了個表。前端
其中Native指原生語言,如安卓的java語言,蘋果的objective-c或swift;Hybrid指混合開發,在前種語言基礎上,藉助WebView控件,將其中部分功能用前端技術實現;Html5指PhoneGap和HBuilder這種,最終會生成app安裝包,但徹底用前端技術開發,不須要懂原生語言;Web指爲移動瀏覽器開發的網頁,在手機上看外觀良好,極可能要使用專門的樣式框架如jquery mobile,或者bootstrap這種響應式框架;js-sdk指微信推出的技術,能夠爲在微信瀏覽器裏展現的網頁添加額外的功能。html5
技術選型,一看既有人力狀況,二看需求。java
既有人力狀況:若是目前的程序員擅長後端語言(好比要作安卓應用,你剛好是java程序員),就該採用原生技術;若是程序員擅長前端,則該採用前端技術;若是程序員後端前端都有能力,混合開發也是能夠的選擇。node
在需求上:若是要作在商城中上架的App,移動版網頁和微信應用就不可能選擇了;若是不但願每次改版都要求用戶從新安裝應用,純原生應用就不要列爲選項;若是時間緊迫人力有限,但願開發一套代碼在全部平臺都使用,則或者徹底放棄原生技術,或者採用混合方案(嵌入WebView裏的網頁是同一份,只須要爲兩種平臺各作一個殼子);若是看中應用的性能,採用原生技術能達到的性能上限固然高於非原生技術,但要結合程序員水平思考能不能達到上限;若是須要使用相機音頻這些功能,純在瀏覽器打開的移動版網頁就不能勝任了,原生和混合固然能知足這個要求,Html5應用和微信應用則提供了數量有限可是跨平臺了的接口,根據到底須要調用哪些本地功能來考慮;若是不一樣應用間須要交互,網頁固然就是爲這個而生的,微信應用本質也是網頁也沒問題,原生應用理論上在本機內部也能互通,但仍是在互聯網上來互通更合適,由於網頁的跳轉比下載安裝程序方便太多了。python
打開網頁忌諱流量太大,等待時間太長,注意別用太大的庫,並且作好緩存,若是是混合開發或者Html5應用,把資源打到安裝包裏會不錯,這樣往來的流量就只有數據了,若是是移動版網頁或者微信應用,庫的選擇和緩存策略將是重中之重。jquery
採用前端技術的優勢是開發簡單,表現力強大,並且跨平臺,缺點一是用來解決性能敏感的需求不穩健,二是javascript做爲弱類型的腳本語言,在工程上和團隊協做上,相比強類型語言更容易失控,這就考驗團隊的經驗和素質,若是功能實在簡單,迭代週期不長,這倒算不上什麼缺點,畢竟在沒有ie6的世界裏javascript用得認真點仍是比較靠譜的。程序員
因爲html5支持本地存儲和websocket,即便是移動版網頁也有必定的c/s能力了。但若是使用原生技術,c/s編程元素的承載者應該是原生語言,即便同時使用前端技術,前端技術也該純粹地用來表現和交互,這時候不應貪圖前端技術的程序能力,就像java編程時不應貪圖jsp擁有的寫程序代碼的能力同樣。若是純使用前端技術,那javascript就是程序實現的主力了,這時候就是前端轉全棧的程序員最喜聞樂見的情景:後端的nodejs只提供rest接口,前面工程化的前端代碼大發神威,這時AMD/CMD的模塊組織就很關鍵了。這時庫的選擇就很重要,一是要足夠強大,二是要體積夠小,三是要模塊化,最理想的仍是前端程序員量體裁衣親手寫一套專門爲這個項目定製的,若是以爲划不來那就用點心找第三方庫吧。web
原生開發中的庫選擇也很重要,好在不管Android仍是iOS基礎庫都很強大好用了,本機自帶基礎庫就是好,讓應用既強大又小巧,windows上的.net運行式也算是半套基礎庫了,微信也算半個,既然事實上每臺手機上都有安裝微信,跟本機自帶的也沒什麼區別了,因此微信自己它就是一個殼子,比起在手機瀏覽器裏的移動版網頁,微信應用先天多個殼子,比起HBuilder這種Html5解決方案,微信應用先天減小了下載殼子須要的流量。用c#寫個桌面程序,能夠逼迫用戶下載.net運行時,你用python寫一個桌面程序,則只好打成一個碩大的包來發布,HBuilder就像是Python,而微信就像是.net。
說來講去,仍是沒有銀彈,移動開發技術之因此百花絢爛,就是由於每種技術都有明顯的長處和短板,誰都沒法取代誰,做爲程序員,仍是該多學點,這樣能夠採用最貼切需求的技術,但做爲選型者,則不能逼迫小夥伴們全成爲全能戰士,根據團隊狀況和需求來綜合考量吧,決策不就是個權衡和捨棄的過程嗎,重要的,一是知己,二是知彼,這樣,大概不會太糟。