智能手機之普及不用多說,手機APP滲投到各個行業:電商(淘寶、京東等)、金融(各手機行業、P2P借貸等)、醫療(智慧醫療)、交通(滴滴、Uber等)、教育(慕課網等)、餐飲(餓了嗎、美團等)……反正只要是個企業,不管規模大小,都已經訂製或將要訂製本身的APP。這麼多APP無外乎就三種模式:Native App、Web App、Hybrid App。前端
Native App,原生APP,使用原生(即Android或iOS)開發的APP。兩年多之前這很是流行,到如今爲止,原生開發人員數量衆多,一抓一大票,技術成熟,好多培訓機構都抱着老掉牙的API翻來覆去的講——尤爲是Android。Sorry,說錯話了……使用原生開發有其優點:應用的性能好,適配起來相對容易。學習成本要看人,我的以爲技術點很少,門檻相對稍高,但入門後學習起來就很輕鬆——網絡資料實在是太多了。編程
但原生APP最頭疼的有三個問題:跨域
一、沒法跨平臺:Android和iOS都須要開發各自平臺的版本——開發成本高;瀏覽器
二、升級麻煩:每次升級都要下載安裝包,Android還好,反正不須要審覈,下載就下載吧,但iOS就麻煩了,發佈每一個版本還得通過App Store的審覈,這致使第三個問題;安全
三、Android和iOS很難同步發佈。服務器
所謂的Web App,就是把手機當作一個瀏覽器(Android使用WebView,iOS使用UIWebView),作幾個頁面掛在服務器端,相似於一個小網站。這樣說雖然不太貼切,但實際上給人的感受就是這樣的。雖然開發成本大大下降,但頁面訪問速度慢、操做體驗差。因而第三種模式誕生了。網絡
乍一看和Web App沒啥差異,但涉及到的技術成本、開發成本、學習成本比Web App高,它綜合了Web App的開發速度和Native App的高性能體驗。之因此說學習成本高,是由於開發高性能的Hybrid App有難度,網絡資料少。我是兩年半前開始接觸混合模式開發的,當時如何作好屏幕適配、提升UI響應速度、如何最大化使用原生功能等內容,網絡幾乎沒有資料。網上能搜索到的都是很粗略的東西,或者就是Hello World級別的東西,涉及到稍微細節一點的東西幾乎沒有。因爲本系列文章都只講Hybrid,故在此再也不囉嗦了。多線程
三種開發模式各自的特色以下面的表格所示:架構
|
Native Appapp |
Hybrid App |
Web App |
原生功能體驗 |
優秀 |
接近優秀 |
差 |
性能 |
很是快 |
快 |
慢 |
跨平臺開發成本 |
昂貴 |
合理 |
便宜 |
碎片化適配 |
很是嚴重 |
嚴重 |
嚴重 |
編程技術支持 |
短缺 |
很是短缺 |
通用人才 |
版本升級維護 |
保守 |
低延時 |
開放 |
安全 |
強 |
中 |
弱 |
Hybrid App因爲須要保證運行性能與開發速度,須要以下技術支持,本系列博文均會按照Demo的開發順序依次描述本人的開發心得和教訓,但願能起到一個拋磚引玉的做用。
Native技術主要用於提供原生支持,要作到跨平臺,就須要掌握部分Android和iOS的知識,除了多線程,文件存儲等基礎知識,Android須要很是熟練的掌握WebView、WebSettings、WebChromeClient、WebClient四大對象。iOS須要很是熟練掌握UIWebView對象。
一、 HTML5
熟練掌握HTML5的各個標籤,如何編寫最優的文檔結構。
二、 CSS
熟練掌握CSS2和CSS3的新特性,能按照效果圖編寫最高性能的樣式。
使用SCSS生成CSS,將CSS可編程化。
三、 JavaScript
實現業務邏輯控制。我的理解JavaScript主要包含兩大內容:DOM編程和麪向對象編程。大部分JS開發人員就只掌握DOM編程,諸如document.getElementById()等,但面向對象是很重要的一個方面。
四、 性能和開發
模塊化編程:編寫可複用的組建;
CSS渲染:瞭解瀏覽器的CSS渲染引擎才能編寫更高效率的樣式;
JS解析:瞭解瀏覽器的JS解析引擎才能優化JS腳本;
HTTP協議:熟練掌握HTTP請求的各個內容;
AJAX:和服務器端的交互大都採用AJAX。
Cordova/PhoneGap:側重於JS與原生的交互,開發簡單,但性能差,如觸摸時反應不靈敏。
AppCan:性能還行,使用簡單,但要提交代碼給AppCan的服務器才能打包,相信有追求的企業是不會把本身的代碼提交給第三方,把打包權利交給第三方的。
Ionic Framework:在Cordova的基礎上增長一些UI/JS方面的東西,樣式還不錯,但一樣具備Cordova的不足。
jQuery Mobile:上手簡單,組件豐富,但性能超級差,閃屏現象嚴重。
Senche Touch:簡單看過,沒有使用過,貌似UI很漂亮,學習成本高。
React Native:FB推出的,當年FB是最先嚐試Hybrid的,但性能超差,因而APP放棄了Hybrid,走原生的道路。在你們都不看好H5時,FB暗中深刻挖掘H5,三年以後推出了這個框架,很是推薦各位去學習其中的思想。
GMU:百度推出的,這個不錯。
這個就多了,jQuery、Zepto、Swiper、iScroll、RequireJS、AngularJS……
因爲移動端是一個重視性能和用戶體驗的終端,大量採用框架存在一些問題:
一、 擴展、維護、定製成本,這個很是須要考慮,或許框架提供的UI風格和本身設計的UI風格差別大,致使設計圍繞框架轉,不符合產品的需求。
二、 既然是框架,強調的是覆蓋面廣度和功能的全面,會有不少無用的東西,帶來累贅;
三、 框架自己存在BUG,或許須要開發人員面對一些能力以外的問題。
總之,若是隻追求像山寨做坊同樣快速產出、不計性能的開發產品,那使用現成的框架是不二選擇。但若是追求性能和真正的產品,建議使用庫,不要使用框架。可是不少框架的實現思想都很優秀,雖然不建議使用,但咱們應該多接觸學習其中的思想,才能寫更好的代碼。僅僅建議而已,不中聽請忽略。
本系列博文將按照我近三年來開發Hybrid App過程當中的體會進行編寫,以一個APP完整開發爲線索,造成一套完整的混合模式開發的解決方案。
一、 JS和原生交互架構
二、 WEB端基礎知識準備
三、 UI適配方案
四、 UI組件開發及封裝
五、 JS模塊化開發
六、 升級、部署方案