转载:支付宝小程序技术历程 - 框架概述

前言

经过近一年的开发,上周 支付宝小程序 终于得以公测,期间由于我们的疏忽将 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阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容