1. 概念
-
渲染逻辑
web页面的渲染线程(GUI渲染线程,重绘、回流时执行)和脚本线程(js引擎线程)互斥,但小程序与此不同,它的逻辑层和渲染层可以并行工作,逻辑层由jscore组成,渲染层则包含wxml模版和wxss样式。小程序总的来说是数据驱动,即jscore产生和处理数据,交给native(微信客户端),然后微信客户端通过多个webview渲染。
逻辑层和渲染层通信模型图如下
在渲染层,宿主环境会把wxml转换成对应的js对象,在逻辑层数据变化时,宿主环境提供的setdata方法会把数据从逻辑层传递到渲染层,经过差异对比后,将差异应用到原来的dom树上,渲染出更新后的ui界面。
-
事件 key=“value”
key以bind或catch开头,catch可以阻止事件向上冒泡,如果在bind和catch前加上capture- 则代表事件的捕获阶段,同理capture-catch则可以阻止事件捕获,并取消冒泡阶段。
-
微信登陆过程
-
双线程模型
- 技术选型:Hybrid技术,界面主要由成熟的web技术渲染,辅以大量的借口提供丰富的客户端原生能力。
- 管控与安全:基于web技术渲染会存在诸如跳转、操作dom等非安全操作,所以提供一个没有任何浏览器相关接口的沙箱环境来运行开发者的js代码,得益于客户端系统有js的解释引擎,可以创建一个单独的线程去执行js,即逻辑层。
- 天生延迟:任何数据传递都是线程间通信(逻辑层和渲染层),各层与客户端原生(native)交互也存在延时,故而存在一定延时。