轉載:支付寶小程序技術歷程 - 框架概述

前言

經過近一年的開發,上周 支付寶小程序 終于得以公測,期間由于我們的疏忽將 wx 的部分示例放到了我們的開放文檔中,給公司造成了麻煩,在此團隊成員向各位同事表示歉意。但正如道歉信所言,我們的底層架構是完全基于螞蟻金服多年的技術積累,踩過無數的坑而形成,且一直在完善中。之前一年我也 all in 在小程序中出于保密很少發文(其實我變懶了??),經過本周的平穩運行,我想解釋下支付寶小程序的技術架構,在公司內部希望大家能夠對支付寶小程序有更多的了解。

歷程

回想近一年的開發,技術選型多次變更,歷程曲折而又折騰,可謂苦中作樂。在去年 9 月份響應號召,我們先后嘗試了 react-native,react web,以及基于純開放 jsapi 的 h5 等方案,最終在年初確定了對外的支付寶小程序采用 react web 方案,但我們并沒有放棄 react-native 方案,目前穩定運行在螞蟻財富客戶端中。

框架

小程序框架的設計目標為無縫運行在桌面 web 開發環境(IDE),客戶端原生環境(react-native),客戶端 web 環境中,運行效果示意圖:


運行效果示意圖.png

因此框架順應潮流命名為 AppX(Application framework for X platform). 也是支付寶小程序中引入的 js 文件名稱。

設想的整體方案中還包括了 native SDK 的支持,后續分別由 nebula 以及小程序 native 容器承擔了該角色.


AppX.png

架構圖

架構圖.png

每個小程序的代碼分為兩部分,分別運行在 worker(JSEngine) 以及 render 渲染層中, render 可以有多個, worker 只有一個,方便 app 數據在頁面間的共享和交互。

worker 運行小程序的邏輯處理代碼,包括事件處理,api 調用以及框架的生命周期管理。

render 運行小程序的渲染代碼,主要包括模版/樣式和框架的跨終端的 js 組件或 native 組件,獲取邏輯層的數據操作渲染引擎(React/ReactNative)進行渲染。

worker 和所有的 render 都建立連接,將需要渲染的數據傳遞給對應的 render 進行渲染,worker 也會將 api 調用轉給 native SDK 處理。

render 則將組件的觸發事件送到對應的 worker 處理,同時接受 worker 的 setData 調用 React 重新渲染。 render 可以看作一個無狀態的渲染終端,狀態統統保留在 app 級別的 worker 里面,因此 render 可以看作 react 單頁 app 中的 dumb component,worker 可以看作 react 單頁 app 中的 redux。

IDE 開發環境

運行在 electron 中,通過空白 webview 模擬單獨的 js 線程運行小程序的 worker 代碼(可以保持調試窗口的穩定性以及定制性) ,通過 electron 進程通信機制將邏輯處理產生的渲染數據渲染到對應的 webview 頁面.

客戶端 web 環境

render 包括一個 UIViewController(Activity) 以及 webview,worker 為每個應用提供獨立的唯一線程,其中 ios 通過 jscore, android 通過系統的 service worker 運行小程序 app 的 worker 部分代碼,并和當前應用的所有 webview 建立連接,用戶將數據從 jscore 線程中傳遞給 webview 渲染,同時客戶端通過攔截 jscore 線程的 api 調用提供 native 功能。

客戶端 react-native 環境

render 包括一個 UIViewController(Activity) 以及 react-native root view,worker 通過 react-native 共享 bridge 實現。worker 可以通過 react-native NativeModules 和客戶端直接通信,setData 則更簡單了就是 react-native 自帶的 setState 通信機制。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容