小程序是基于双线程模型的,在这个模型中,小程序的逻辑层与渲染层分开在不同的线程运行
在对小程序的架构设计时的要求只有一个,就是要快,包括要渲染快、加载快等
我们期望体验到的是只有很短暂的加载界面,在一个过渡动画之后可以马上看到小程序的主界面
渲染界面的技术
使用纯客户端原生技术或纯 Web 技术都有各自的缺点,那如果使用两者结合起来的 Hybrid
技术来渲染小程序,能否优于各自独立渲染的技术方案呢
最终,我们选择类似于微信 JSSDK 这样的 Hybrid 技术,即界面主要由成熟的 Web 技术渲染,辅之以大量的接口提供丰富的客户端原生能力
同时,每个小程序页面都是用不同的WebView去渲染,这样可以提供更好的交互体验,更贴近原生体验,也避免了单个WebView的任务过于繁重
基于Web 技术来渲染小程序是存在一些不可控因素和安全风险的,这是因为Web技术是非常开放灵活的
为了解决管控与安全问题,我们必须阻止开发者使用一些浏览器提供的,诸如跳转页面、操作DOM、动态执行脚本的开放性接口
要彻底解决这个问题,我们必须提供一个沙箱环境
来运行开发者的JavaScript 代码
得益于客户端系统有JavaScript 的解释引擎(在iOS下是用内置的 JavaScriptCore框架,在安卓则是用腾讯x5内核提供的JsCore环境)
我们可以创建一个单独的线程去执行 JavaScript,在这个环境下执行的都是有关小程序业务逻辑的代码,也就是我们前面一直提到的逻辑层
而界面渲染相关的任务全都在WebView线程里执行,通过逻辑层代码去控制渲染哪些界面,那么这一层当然就是所谓的渲染层
小程序是基于双线程模型,那就意味着任何数据传递都是线程间的通信,也就是都会有一定的延时
由于这个原因,在小程序架构里,很多操作都会变成异步
异步会使得各部分的运行时序
变得复杂一些
逻辑层与渲染层需要有一定的机制保证时序正确,这些工作在小程序框架里会处理好
除了逻辑层与渲染层之间的通信有延时,各层与客户端原生交互同样是有延时的
注册给逻辑层有关客户端能力的接口,实际上也是跟微信主线程之间的通信,同样意味着有延时
这也是大部分提供的接口都是异步的原因