⽹⻚开发,渲染线程和脚本是互斥的,这也是为什么⻓时间的脚本运⾏可能会导致⻚⾯失去响应的原因,本质就是我们常说的 JS 是单线程的
⽽在⼩程序中,选择了 Hybrid 的渲染⽅式,将视图层和逻辑层是分开的,双线程同时运⾏,视图层的界⾯使⽤ WebView 进⾏渲染,逻辑层运⾏在 JSCore 中
⼩程序在渲染层,宿主环境会把 wxml 转化成对应的 JS 对象
在逻辑层发⽣数据变更的时候,通过宿主环境提供的 setData ⽅法把数据从逻辑层传递到渲染层,再经过对⽐前后差异,把差异应⽤在原来的 Dom 树上,渲染出正确的视图
当视图存在交互的时候,例如⽤⼾点击你界⾯上某个按钮,这类反馈应该通知给开发者的逻辑层,需要将对应的处理状态呈现给⽤⼾
对于事件的分发处理,微信进⾏了特殊的处理,将所有的事件拦截后,丢到逻辑层交给JavaScript 进⾏处理
由于⼩程序是基于双线程的,也就是任何在视图层和逻辑层之间的数据传递都是线程间的通信,会有⼀定的延时,因此在⼩程序中,⻚⾯更新成了异步操作
异步会使得各部分的运⾏时序变得复杂⼀些,⽐如在渲染⾸屏的时候,逻辑层与渲染层会同时开始初始化⼯作,但是渲染层需要有逻辑层的数据才能把界⾯渲染出来
如果渲染层初始化⼯作较快完成,就要等逻辑层的指令才能进⾏下⼀步⼯作
因此逻辑层与渲染层需要有⼀定的机制保证时序正确,在每个⼩程序⻚⾯的⽣命周期中,存在着若⼲次⻚⾯数据通信
⼩程序启动运⾏两种情况:
开发者在后台发布新版本之后,⽆法⽴刻影响到所有现⽹⽤⼾,但最差情况下,也在发布之后 24 ⼩时之内下发新版本信息到⽤⼾
每次冷启动时,都会检查是否有更新版本,如果发现有新版本,将会异步下载新版本的代码包,并同时⽤客⼾端本地的包进⾏启动,即新版本的⼩程序需要等下⼀次冷启动才会应⽤上