現在移動應用開發主流都採用Hybrid App模式,例如淘寶、微信、手機QQ、攜程、去哪兒、手機百度等都使用了Hybrid APP開發模式。
一、 hybrid App的三種解決方案
方案一:使用PhoneGap、AppCan之類的中間件,以WebView作爲用戶界面層,以Javascript作爲基本邏輯,以及和中間件通訊,再由中間件訪問底層API的方式,進行應用開發。這種架構一般會非常依賴WebView層的性能。
方案二:使用AdobeAir、RubyMotion、Appcelerator或者是Xamarin這種非官方語言的工具,打包成原生應用的方式開發。爲什麼筆者會將它們定義 爲HybridApp,主要是它們並沒有很單純地使用原生提供的語言進行開發,而是通過對開發者提供友好的開發工具,並折中地把這種開發語言轉換成原生語言,最終打包出整個應用,所以也屬於混合應用範疇。
方案三:在開發原生應用的基礎上,嵌入WebView但是整體的架構使用原生應用提供,一般這樣的開發由Native開發人員和Web前端開發人員 組成。Native開發人員會寫好基本的架構以及API讓Web開發人員開發界面以及大部分的渲染。保證到交互設計,以及開發都有一個比較折中的效果出來,優化得好也會有很棒的效果。(當年Facebook Three20就使用該方案)
目前主流的hybrid app都是使用移動平臺自帶的webview來實現hybrid開發。
二、 hybrid App中native和web的分配
native和web具體的分配方式大致是:
Native:用戶體驗要求高、業務變動很小(如首頁)、性能要求高等;
Web:業務變化頻繁(如廣告)、性能要求低、展示性內容(如用戶個人中心)等。
在一個hybridApp中,native和web一般是細化到每個頁面上的,在一個頁面中可能一部分是web實現,一部分是native實現。
以首頁爲例,首頁的功能性內容都是由native實現完成,而廣告這種內容變化頻繁的內容由web完成。
在開發一個hybridApp時,需要考慮離線、安全、性能、與Native互調、擴展等因素。
離線:需要考慮到哪些內容是離線資源,哪些必須請求服務器H5;
安全:需要考慮信息安全,哪些可以在h5上完成,哪些必須由native實現。
三、 Hybrid App的一些具體應用
1. 攜程網網絡架構:
由於攜程業務衆多,開發資源導致無法全部使用Native來實現業務邏輯,因此有相當一部分頻道基於Hybrid實現。網絡通訊屬於基礎&業務框架層中基礎設施的一部分,爲App提供統一的網絡服務:
- Native端的網絡服務
Native模塊是攜程的核心業務模塊(酒店、機票、火車票、攻略等),Native模塊的網絡服務主要通過TCP連接實現,而非常見的Restful HTTP API那種HTTP連接,只有少數輕量級服務使用HTTP接口作爲補充。
TCP連接網絡服務模塊使用了長連接+短連接機制,即有一個長連接池保持一定數目長連接,用於減少每次服務額外的連接,服務完成後會將該連接Socket放回長連接池,繼續保持連接狀態(一段時間空閒後會被回收);短連接作爲補充,每次服務完成後便會主動關閉連接。
TCP網絡服務的Payload使用的是自定義的數據及序列化協議;HTTP服務的Payload比較簡單,即常見的JSON數據格式。
- Hybrid端的網絡服務
Hybrid模塊由於是在WebView中展示本地或者直連的H5頁面,頁面邏輯發起的網絡服務都是通過系統WebView的HTTP請求實現的。少量業務場景(需要加密和支付等)以Hybrid橋接接口形式的Native TCP通道來完成網絡服務。
2.去哪兒網:
去哪兒APP通過攔截器區分本地資源還是網絡資源,如果是本地資源已經包含則請求本地資源,接口級則去請求網絡資。當本地資源需要更新時則先更新本地資源,然後在訪問。
通過橋去鏈接插件的方式訪問native,插件的實現是通過配置方式實現不同的native的控制。
3.淘寶APP:
淘寶天貓這樣的超大型App,完全用Native是很難的,也是不現實的,業務邏輯太複雜,目前天貓是20% native +70 H5,search,detail,交易鏈路(購物車+下單)是完全native化的,其他的都是Webview。
1)H5的優勢在於隨時發佈,無需修改native代碼,滿足了業務靈活配置的需求。webview作爲移動端H5容器,在手機客戶端顯得尤爲重要
淘寶天貓的webview已經高度模塊化,各個業務模塊之間高度解耦,爲此也做了很多的優化,比如:
1)剝離webview邏輯,拆分webview爲單獨模塊。
2)去掉phoneGap,改用自定義簡化框架。
3)統一提供對外調用接口,接口粒度細分多個維度,提供activity,webview等層級接口,滿足各種業務方需求。
4)融合手淘windvane,既支持天貓特有的H5邏輯,又提供跨BU前端H5統一方案。
參考資料:
Hybrid APP開發模式和比較:http://mobile.51cto.com/web-460529.htm
開發模式的架構比較:http://tech.163.com/12/0619/20/84CUGCEA00094L5O.html
去哪兒網X1移動前端一體化解決方案:http://ued.qunar.com/mobile/page/
攜程網絡架構優化;http://www.infoq.com/cn/articles/how-ctrip-improves-app-networking-performance