支付寶移動(dòng)端動(dòng)態(tài)化方案實(shí)踐
幫助我們更好地優(yōu)化 mPaaS,獲取此次分享 PPT 原稿:http://t.cn/EZVx3bx
背景
結(jié)合上周分享的《模塊化與解耦式開(kāi)發(fā)在螞蟻金服 mPaaS 深度實(shí)踐探討》,我們已經(jīng)對(duì)支付寶在移動(dòng)端開(kāi)發(fā)架構(gòu)的設(shè)計(jì)思路有了初步了解。本文將結(jié)合在 iWeb 武漢站的分享,帶領(lǐng)大家進(jìn)一步了解 mPaaS 在移動(dòng)端動(dòng)態(tài)化方案設(shè)計(jì)。
首先,分享內(nèi)容將分為以下三個(gè)方面:
支付寶動(dòng)態(tài)化方案的探索;
Nebula 框架淺析;
mPaaS 科技架構(gòu)與助力
1. 支付寶動(dòng)態(tài)化方案的探索
任何一種技術(shù)方案都是在業(yè)務(wù)的發(fā)展和架構(gòu)的演化中逐漸探索出來(lái)的,因此我們來(lái)看一下支付寶架構(gòu)的演進(jìn):
支付寶從最開(kāi)始的工具型應(yīng)用,逐漸發(fā)展成平臺(tái)型應(yīng)用,一直到現(xiàn)在,已經(jīng)成為了一個(gè)超級(jí) App,它擁有多應(yīng)用的生態(tài),更加開(kāi)放和動(dòng)態(tài)化,并且保持著高可用,高性能,高靈敏的強(qiáng)大特性。 隨著 App 的逐漸龐大,整個(gè)應(yīng)用的架構(gòu)也在進(jìn)行不斷的調(diào)整,來(lái)適應(yīng)各種特性。現(xiàn)在的支付寶客戶(hù)端的架構(gòu)如圖所示:
整體架構(gòu)分為五層:容器層、組件層、框架層、服務(wù)層、應(yīng)用層。
客戶(hù)端整體采用統(tǒng)一的框架開(kāi)發(fā),模塊化的開(kāi)發(fā)模式,完全插件式的容器,支持模塊獨(dú)立發(fā)布,方便大規(guī)模團(tuán)隊(duì)的并行開(kāi)發(fā)。
在這樣的框架結(jié)構(gòu)中,同樣包括了我們的動(dòng)態(tài)化方案。支付寶中的動(dòng)態(tài)化方案主要有兩種框架:Nebula?和小程序。
這兩種方案不僅解決了需求迭代速度和發(fā)版周期之間的矛盾、跨平臺(tái)開(kāi)發(fā)、實(shí)時(shí)發(fā)布等一些普適問(wèn)題,而且有效地保證了發(fā)布質(zhì)量,對(duì)線上問(wèn)題進(jìn)行緊急止血,同時(shí)也有助于建立良好的開(kāi)放生態(tài)。
Nebula?是支付寶移動(dòng)端 Hybrid 解決方案,它提供了良好的外部擴(kuò)展功能,擁有功能插件化、事件機(jī)制、JSApi 定制和 H5App 推送更新管理能力。
主要功能包括:
接入 H5App 后臺(tái),方便管理離線或者在線 H5App,實(shí)現(xiàn) H5 應(yīng)用的推送、更新。
加載 H5 頁(yè)面,并按照 Session 的概念進(jìn)行管理各個(gè)頁(yè)面。
Android 使用 UCWebView,擁有解決系統(tǒng)級(jí) Webview Crash 的能力,內(nèi)存管理更合理,網(wǎng)絡(luò)加載提升更快,兼容性更好。徹底告別了在Android下兼容不同 Webview 的問(wèn)題。
支持自定義網(wǎng)絡(luò)庫(kù),自定義網(wǎng)絡(luò)通道;支持自定義鍵盤(pán),自定義 Native View替換 H5 標(biāo)簽。
提供豐富的內(nèi)置 JSAPI,實(shí)現(xiàn)譬如頁(yè)面 push、pop,標(biāo)題設(shè)置等功能;支持用戶(hù)自定義 JSAPI 和插件功能,擴(kuò)展業(yè)務(wù)需求。
自帶埋點(diǎn)功能,接入 H5 監(jiān)控平臺(tái),能夠?qū)崟r(shí)看到頁(yè)面加載的性能、錯(cuò)誤報(bào)警和監(jiān)控。
還有一種動(dòng)態(tài)化方案就是支付寶小程序:
支付寶小程序是一種全新的開(kāi)發(fā)模式,融合了 H5 的易開(kāi)發(fā)性、跨平臺(tái)性、Native 性能,讓開(kāi)發(fā)者可以快速開(kāi)發(fā)高性能的頁(yè)面,提供優(yōu)異的用戶(hù)體驗(yàn)。通過(guò)使用支付寶小程序,開(kāi)發(fā)者為支付寶開(kāi)發(fā)了大量?jī)?yōu)質(zhì)的小程序,豐富了支付寶生態(tài)能力。小程序開(kāi)放給開(kāi)發(fā)者更多的 JSAPI 和 OpenAPI 能力,通過(guò)小程序可以為用戶(hù)提供多樣化便捷服務(wù)。
2. Nebula 框架淺析
Nebula 的架構(gòu)如圖所示,從上至下依次為?H5 應(yīng)用層、服務(wù)層、原生框架層:
H5 應(yīng)用層:基于 HTML 和 JavaScript 技術(shù)開(kāi)發(fā),在 H5 容器上運(yùn)行的手機(jī)應(yīng)用,它擁有跨平臺(tái)的特性,配合離線包的使用可以完成實(shí)時(shí)熱修復(fù)的功能。
服務(wù)層:為開(kāi)發(fā)者提供了高階語(yǔ)言的 API 來(lái)使用手機(jī)系統(tǒng)資源,包括:
視窗系統(tǒng),開(kāi)發(fā)者可以使用它來(lái)創(chuàng)造應(yīng)用 UI,包括文字,圖片,按鍵及定制 View
資源管理,通過(guò)它開(kāi)發(fā)者可以方便的訪問(wèn)如多語(yǔ)言文字,圖片和布局等非代碼資源
應(yīng)用生命周期管理,它決定應(yīng)用在手機(jī)系統(tǒng)里的開(kāi)始,結(jié)束以及強(qiáng)制關(guān)閉的時(shí)機(jī)
H5 容器
原生框架層:是手機(jī)系統(tǒng)的基礎(chǔ)層,它提供了標(biāo)準(zhǔn) API 來(lái)讓高階語(yǔ)言(比如 Java 和 Object-C)使用底層的硬件,并包含了許多為硬件訪問(wèn)的專(zhuān)有軟件庫(kù)。當(dāng)上層調(diào)用某個(gè)框架 API 來(lái)訪問(wèn)硬件時(shí),手機(jī)系統(tǒng)將加載相應(yīng)的軟件庫(kù)。
整個(gè) Nebula 框架的核心部分就是 H5 容器,下面看一下 H5 容器的結(jié)構(gòu):
在容器里面有?H5Service、H5Session?和?H5Page?這樣三個(gè)概念
H5Service,H5Session?和?H5Page?都是從 H5CoreNode 類(lèi)擴(kuò)展而來(lái),以 H5Service 為根節(jié)點(diǎn),它與其他類(lèi)一同形成了樹(shù)狀結(jié)構(gòu)構(gòu)成了頁(yè)面流程和導(dǎo)航。在一般情況下,H5Pages 是 H5Session 的子節(jié)點(diǎn),而 H5Sessions 是 H5Service 的子節(jié)點(diǎn),在任何情況下只有一個(gè) H5Service 根節(jié)點(diǎn)存在。
H5Service:是 Nebula 里維護(hù) H5 應(yīng)用全局狀態(tài)的基礎(chǔ)類(lèi), 在 H5 應(yīng)用的生命周期內(nèi)只有一個(gè) H5Service 的單例全局實(shí)例,H5Service 可以進(jìn)行的操作包括:
創(chuàng)建且打開(kāi)一個(gè)新的 Web activity
創(chuàng)建且開(kāi)啟一個(gè)新的 Web page
從共享空間存儲(chǔ)和讀取數(shù)據(jù)
注冊(cè)插件和 Provider
監(jiān)聽(tīng)?wèi)?yīng)用的生命周期
H5Session:一個(gè) H5Session 是由一疊 H5Pages 組成的完整業(yè)務(wù)流程。例如一個(gè)收銀臺(tái)的流程包括:一個(gè)購(gòu)物車(chē)的小結(jié)頁(yè)面,一個(gè)結(jié)賬方式的選擇頁(yè)面,和最后一個(gè)結(jié)賬確認(rèn)頁(yè)面。所有的頁(yè)面都可以獨(dú)立存在運(yùn)作, H5Session 在其中的作用是把這些頁(yè)面組織起立,按照業(yè)務(wù)邏輯把它們按序排列來(lái)完成業(yè)務(wù)。當(dāng)你使用 H5Service 創(chuàng)建且開(kāi)啟一個(gè)新的 Web page 時(shí),如果當(dāng)前沒(méi)有 H5Session 的話,一個(gè)新的 H5Session 實(shí)例將被創(chuàng)建,并為后續(xù)創(chuàng)建的 Web page 共享。你可以從 H5Session 中移除頁(yè)面直到頁(yè)面疊為空,也可以使用 H5Session 所提供的方法來(lái)獲取首頁(yè),以及監(jiān)聽(tīng)該 H5Session 的生命周期。
H5Page:是用戶(hù)看得見(jiàn),摸得著的頁(yè)面,也是應(yīng)用生命周期中最重要的一部分。你可以通過(guò) URL 來(lái)加載內(nèi)容,用 H5Param 來(lái)定制頁(yè)面的外觀和行為,甚至可以通過(guò)獲取 H5Page 的視圖層次,把 H5Page 視圖和其他原生 UI 部件一起內(nèi)嵌到同一個(gè)布局中。
下面是 H5 容器的幾個(gè)重要組成部分:
API 管理器主要管理 JS API:Nebula 中已經(jīng)提供許多內(nèi)置的 JS API 供開(kāi)發(fā)者使用,比如操控 UI,顯示對(duì)話框和 Toast,以及使用網(wǎng)絡(luò) RCP 服務(wù)等。
插件管理器主要管理 Plugin:如果現(xiàn)有的 JS API 無(wú)法滿(mǎn)足你的業(yè)務(wù)需求,你也可以選擇創(chuàng)造一個(gè)新的插件。你只需把原生代碼打包在插件中,在管理器里注冊(cè)該插件,便可在 Javascript 層使用新的 JS API 了
JS Bridge 是連接原生層和 JavaScript 的溝通橋梁:它將 JavaScript 代碼轉(zhuǎn)譯成能在系統(tǒng)框架運(yùn)行的字節(jié)碼,同時(shí)也把原生層的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)成 JavaScript 對(duì)象使其能在 JavaScript 層處理。這里 Nebula 針對(duì)JS Bridge 做了一些優(yōu)化:
使用 prompt 會(huì)阻斷整個(gè)瀏覽器的進(jìn)程,如果 native 處理時(shí)間一長(zhǎng),會(huì)導(dǎo)致頁(yè)面假死。
prompt 是在 UI 層面上會(huì)彈出一個(gè)模態(tài)窗口,在 native 沒(méi)有對(duì)其進(jìn)行捕獲處理的話,會(huì)造成一個(gè)問(wèn)題。一旦這個(gè)頁(yè)面放在非此容器的環(huán)境下,就會(huì)出現(xiàn)一個(gè)很詭異的 prompt 彈窗。在支付寶內(nèi),曾經(jīng)出現(xiàn)過(guò)這個(gè)問(wèn)題,天貓頁(yè)面在支付寶 app 里的時(shí)候,由于容器機(jī)制不同,頁(yè)面中 bridge 腳本沒(méi)有判斷環(huán)境,導(dǎo)致頁(yè)面中 js 調(diào)用 API 的時(shí)候,在頁(yè)面上出現(xiàn)了 prompt 的模態(tài)對(duì)話框,嚴(yán)重影響了用戶(hù)體驗(yàn),但是如果使用 console.log 的話,就不會(huì)出現(xiàn)這個(gè)問(wèn)題。console 的方式避免了不兼容環(huán)境的體驗(yàn)問(wèn)題和同時(shí)也避免了頁(yè)面的假死。
在 Android 里,js 調(diào)用 native 的通訊是通過(guò) console.log 的方式,這個(gè)和其他容器實(shí)現(xiàn)不一樣,其他容器一般通過(guò) prompt 的方式來(lái)實(shí)現(xiàn)的,但是使用 prompt 的方式,有兩個(gè)弊端:
jsbridge 注入的時(shí)機(jī),由于業(yè)務(wù)邏輯要依賴(lài) bridge,所以業(yè)務(wù)的所有邏輯都會(huì)在 bridge ready 之后才會(huì)觸發(fā),而 bridge js 本身運(yùn)行是要一定的時(shí)間的,因此注入的時(shí)機(jī)對(duì)于性能的影響顯得非常的重要。但由于 H5 頁(yè)面的生命周期和容器的生命周期是相互獨(dú)立的,因此在 H5 生命周期的哪個(gè)階段注入這段 bridgejs,對(duì)于性能的影響就顯得異常重要。
現(xiàn)在在支付寶內(nèi)使用的方式為監(jiān)聽(tīng) H5 生活周期的事件,比如說(shuō)當(dāng) Webview 設(shè)置 title 結(jié)束之后,Android 會(huì)放出一個(gè) onReceivedTitle、shouldInterceptRequest 等事件,iOS 會(huì)嘗試在 webViewDidStartLoad 事件,在監(jiān)聽(tīng)到這些事件之后,立即注入 bridgejs,讓其在 H5 生命周期盡早運(yùn)行。通過(guò)這種方式的注入,經(jīng)過(guò)測(cè)試,最早能在頁(yè)面加載開(kāi)始后, 50ms 以?xún)?nèi)就能成功注入 bridgejs。
Event 機(jī)制:Nebula 提供了一套事件機(jī)制來(lái)管理事件在 H5Page,H5Session 和 H5Service 之間的流通順序。一個(gè) H5Event 可以在 H5Page, H5Session 或 H5Service 任何一層發(fā)生,事件派遣分為兩步完成事件攔截。
這個(gè)步驟中事件派遣的順序?yàn)?H5Service -> H5Session or H5Page。
事件可以在任何節(jié)點(diǎn)被攔截 (如果 interceptEvent() 返回 true ),也可以在任何節(jié)點(diǎn)被處理 (如果 handleEvent() 返回 true ):如果事件在派遣過(guò)程中被攔截或處理,該事件將被視為已被消費(fèi)且不再繼續(xù)流通。如果在派遣過(guò)程后事件依舊沒(méi)有被攔截或處理,會(huì)有錯(cuò)誤拋給呼叫方處理。
僅僅使用傳統(tǒng)的 H5 技術(shù)展示在線頁(yè)面,很容易受到網(wǎng)絡(luò)環(huán)境影響,因而降低 H5 頁(yè)面的性能。
在 Neblua 中我們使用離線包技術(shù)來(lái)解決這個(gè)問(wèn)題。離線包是將包括 HTML、Javascript、CSS 等頁(yè)面內(nèi)靜態(tài)資源打包到一個(gè)壓縮包內(nèi),它的目錄結(jié)構(gòu)如圖所示:
使用離線包可以使容器內(nèi)的 H5 應(yīng)用具有接近 Native 的體驗(yàn),主要優(yōu)勢(shì)如下::
減少網(wǎng)絡(luò)環(huán)境對(duì) H5 應(yīng)用的影響:通過(guò)下載離線包到本地,然后在客戶(hù)端打開(kāi),把打開(kāi)H5頁(yè)面的操作從網(wǎng)絡(luò) IO,變成磁盤(pán) IO。直接從本地加載離線包,不僅最大程度地?cái)[脫網(wǎng)絡(luò)環(huán)境對(duì) H5 頁(yè)面的影響,而且增強(qiáng)了用戶(hù)體驗(yàn)。
提升用戶(hù)打開(kāi) H5 應(yīng)用的體驗(yàn):通過(guò)離線包的方式把頁(yè)面內(nèi)靜態(tài)資源嵌入到應(yīng)用中并發(fā)布,當(dāng)用戶(hù)第一次開(kāi)啟應(yīng)用的時(shí)候,就無(wú)需依賴(lài)網(wǎng)絡(luò)環(huán)境下載該資源,而是馬上開(kāi)始使用該應(yīng)用。
實(shí)現(xiàn)動(dòng)態(tài)更新:在推出新版本或是緊急發(fā)布的時(shí)候,您可以把修改的資源放入離線包,通過(guò)更新配置讓?xiě)?yīng)用自動(dòng)下載更新。因此,您無(wú)需通過(guò)應(yīng)用商店審核,就能讓用戶(hù)及早接收更新。
下面介紹一下離線包的渲染過(guò)程 當(dāng) H5 容器發(fā)出資源請(qǐng)求時(shí),其訪問(wèn)本地資源或線上資源所使用的 URL 是一致的。H5 容器會(huì)先截獲該請(qǐng)求,截獲請(qǐng)求后,發(fā)生如下情況:
如果本地有資源可以滿(mǎn)足該請(qǐng)求的話,H5 容器會(huì)使用本地資源。
如果沒(méi)有可以滿(mǎn)足請(qǐng)求的本地資源,H5 容器會(huì)使用線上資源。 因此,無(wú)論資源是在本地或者是線上,WebView 都是無(wú)感知的。
離線包的下載依賴(lài)用戶(hù)當(dāng)前的網(wǎng)絡(luò)。一般情況下,只有在連接 WIFI 的情況下才會(huì)在后臺(tái)下載離線包。如果用戶(hù)處于移動(dòng)網(wǎng)絡(luò)下,不會(huì)在后臺(tái)下載離線包。如果當(dāng)前用戶(hù)點(diǎn)擊 APP,離線包沒(méi)有下載好,用戶(hù)就要等待離線包下載好才能用。
為了解決離線包不可用的場(chǎng)景,fallback 技術(shù)應(yīng)運(yùn)而生。每個(gè)離線包發(fā)布的時(shí)候,都會(huì)同步在 CDN 發(fā)布一個(gè)對(duì)應(yīng)的線上版本,目錄結(jié)構(gòu)和離線包結(jié)構(gòu)一致。fallback 地址會(huì)隨離線包信息下發(fā)到本地。在離線包沒(méi)有下載好的場(chǎng)景下,客戶(hù)端會(huì)攔截頁(yè)面請(qǐng)求,轉(zhuǎn)向?qū)?yīng)的 CDN 地址, 實(shí)現(xiàn)在線頁(yè)面和離線頁(yè)面隨時(shí)切換。
那么本地資源如何尋址呢,我們?cè)O(shè)計(jì)了獨(dú)特的虛擬域名機(jī)制,僅對(duì)離線應(yīng)用有效。當(dāng)頁(yè)面保存在客戶(hù)端之后,WebView 如果要訪問(wèn)的話,是通過(guò) file schema 來(lái)從本地加載訪問(wèn)的。然而,用戶(hù)就能在地址欄里直接看到 file 的路徑,這就會(huì)導(dǎo)致以下問(wèn)題:
用戶(hù)體驗(yàn)問(wèn)題:當(dāng)用戶(hù)看到了 file 地址,會(huì)對(duì)暴露的地址產(chǎn)生不安全感和不自在。
安全性問(wèn)題:由于 file 協(xié)議上直接帶上了本地路徑,任何用戶(hù)都可以看到這個(gè)文件所在的文件路徑,會(huì)存在一定的安全隱患。 基于如上問(wèn)題的考慮,采用虛擬域名的機(jī)制而不直接使用 file 路徑來(lái)訪問(wèn)。虛擬域名是一個(gè)符合 URL Scheme 規(guī)范的 HTTPS 域名地址,例如 https://xxxxxxx.h5app.example.com
Nebula 里面的 H5 容器和離線包,在傳統(tǒng)的 Hybrid 框架的基礎(chǔ)上進(jìn)行了極致的優(yōu)化,使整個(gè) H5 應(yīng)用具有如下特點(diǎn):
對(duì)網(wǎng)絡(luò)鏈路強(qiáng)依賴(lài)的弱化
增強(qiáng)對(duì)設(shè)備能力的支持
增強(qiáng)的用戶(hù)體驗(yàn)
在性能方面,Nebula 在支付寶中經(jīng)過(guò)了億級(jí)用戶(hù)的考驗(yàn),crash 和 anr 以及其他穩(wěn)定性指標(biāo)有保障。 Android 平臺(tái)基于 UCWebview 深度定制,crash 率和 anr 量遠(yuǎn)低于系統(tǒng)webview,擁有解決系統(tǒng) Webview 問(wèn)題的能力。 圖中展示的就是在 Android 端,UCWebview 和系統(tǒng) Webview 之間崩潰率和 ANR 率的對(duì)比,穩(wěn)定性的優(yōu)勢(shì)顯而易見(jiàn)。
最后看一下小程序與 Nebula 支付寶小程序復(fù)用 Nebula 容器技術(shù)棧,重構(gòu)了開(kāi)發(fā)方式,對(duì)外暴露有限個(gè) jsapi 接口,讓 app 開(kāi)發(fā)更簡(jiǎn)單,更加便捷利用支付寶的能力,進(jìn)而發(fā)布、推廣、運(yùn)營(yíng)。小程序本質(zhì)上是也是一個(gè) H5 App 離線包,但是有一些自己的特點(diǎn)。
小程序是為第三方 App 服務(wù)的,運(yùn)行在獨(dú)立進(jìn)程,它的穩(wěn)定和閃退不會(huì)影響到主 App,也支持二方 App 運(yùn)行在主進(jìn)程。
小程序是支持保活的,極大的提升二次打開(kāi)的體驗(yàn)。
3. mPaaS 技術(shù)架構(gòu)與助力
Nebula 有這么大優(yōu)勢(shì),現(xiàn)在不僅在螞蟻金服內(nèi)部使用,也能夠提供給外部來(lái)使用。
首先什么是 mPaaS 呢,mPaaS 全稱(chēng)是 Mobile Platform as a Service 。是螞蟻金服獨(dú)創(chuàng)的移動(dòng)研發(fā)平臺(tái),它源于支付寶 App 近 10 年的移動(dòng)技術(shù)實(shí)踐和思考,為移動(dòng)開(kāi)發(fā)、測(cè)試、運(yùn)營(yíng)及運(yùn)維提供云到端的一站式解決方案,能有效降低技術(shù)門(mén)檻、減少研發(fā)成本、提升開(kāi)發(fā)效率,協(xié)助生態(tài)伙伴快速搭建穩(wěn)定高質(zhì)量的移動(dòng) App。
在 mPaaS 中,我們將 Nebula 的?H5 容器、jsapi 、離線包、小程序這些模塊作為一個(gè)單獨(dú)的組件來(lái)進(jìn)行輸出,在客戶(hù)端中進(jìn)行配置。任何一個(gè) App 通過(guò) mPaaS 插件,添加對(duì)應(yīng)的模塊,集成這些功能,只需要這樣簡(jiǎn)單的操作,就可以讓你的應(yīng)用具有和支付寶一樣強(qiáng)大的動(dòng)態(tài)化能力。
同時(shí) mPaaS 提供的小程序模塊,允許用戶(hù)把運(yùn)行在支付寶上的小程序,無(wú)縫的遷移到自己的 App 中,做到【跨平臺(tái)跨應(yīng)用】開(kāi)發(fā),提高代碼的復(fù)用能力 Nebula 組件化輸出,配合 mPaaS 提供的 MDS (移動(dòng)發(fā)布服務(wù)) 來(lái)實(shí)現(xiàn)動(dòng)態(tài)更新。
mPaaS 提供的 MDS 服務(wù),能夠讓每次發(fā)布更新就像發(fā)郵件一樣簡(jiǎn)單。
MDS 具有智能灰度發(fā)布的能力,可以通過(guò)內(nèi)部灰度,外部灰度多重驗(yàn)證,保證在正式發(fā)布之前,發(fā)布的產(chǎn)品質(zhì)量有充分的保證,同時(shí)提供多種升級(jí)策略,包括指定人群地域、機(jī)型,系統(tǒng)版本,網(wǎng)絡(luò)環(huán)境等多種規(guī)則。對(duì)于離線包來(lái)說(shuō),更新離線包的下載對(duì)網(wǎng)絡(luò)環(huán)境要求較高,包的大小越大,更新的成功率越低,在 mPaaS 中,我們采用增量差分的更新能力,減少數(shù)據(jù)冗余及設(shè)備帶寬,在移動(dòng)網(wǎng)絡(luò)條件下優(yōu)勢(shì)明顯。同時(shí)保證更新功能的高可用性,升級(jí)接口可用率達(dá) 99.99%,在線分鐘級(jí)觸達(dá)。
下面是 Nebula 的生態(tài)基礎(chǔ),首先在集團(tuán)內(nèi)部,我們已經(jīng)支持了不少產(chǎn)品,同時(shí)通過(guò) mPaaS ,我們也與外部客戶(hù)合作,將我們的技術(shù)能力輸出給他們,典型的幾個(gè)案例,包括 12306 客戶(hù)端,廣發(fā)發(fā)現(xiàn)精彩客戶(hù)端,上海地鐵,蘇州銀行等。
尤其是 12306,使用 mPaaS 改版之后,客戶(hù)端整體的體驗(yàn)更加優(yōu)越。12306 整個(gè)客戶(hù)端絕大部分都是使用的 H5 技術(shù),他們就是使用 Nebula H5 容器 配合離線包來(lái)實(shí)現(xiàn),無(wú)論是頁(yè)面打開(kāi)速度,還是UI事件響應(yīng),體驗(yàn)幾乎接近 native。在更新發(fā)布方面,12306 的 app 包很少更新,以 AppStore 上的發(fā)布記錄來(lái)看,今年只提交了兩個(gè)版本,基本上都是通過(guò)動(dòng)態(tài)化的方式完成業(yè)務(wù)的迭代發(fā)布。
總結(jié)下來(lái),螞蟻金服 mPaaS 中就是通過(guò)「Nebula H5容器 + 離線包 + 小程序 + MDS」這樣的方式來(lái)實(shí)現(xiàn)移動(dòng)端的動(dòng)態(tài)化方案。想要上手體驗(yàn)看看嗎?歡迎下載 Android Demo:
注:暫時(shí)不支持 iOS 用戶(hù)掃碼下載
關(guān)于 mPaaS 移動(dòng)端動(dòng)態(tài)化的具體實(shí)踐,如果你有更好的思路或建議,也歡迎一起探討交流。
本文轉(zhuǎn)載自異步社區(qū)
軟件開(kāi)發(fā)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。