小程序选择了 Hybrid 的渲染方式,将UI渲染跟 JavaScript 的脚本执行分在了两个线程。json
小程序的渲染层和逻辑层分别由两个线程管理:小程序
WebView
线程里执行。一个小程序存在多个界面,因此渲染层存在多个WebView
线程。JsCore
线程运行JS脚本,在这个环境下执行的都是有关小程序业务逻辑的代码。咱们都知道小程序是避免DOM操做,而是采用数据驱动来渲染页面的,那么他究竟是怎么经过更改数据来更新DOM呢。微信
逻辑层和渲染层的通讯会由 Native (微信客户端)作中转,逻辑层发送网络请求也经由 Native 转发。经过把 WXML 转化为数据,经过 Native 进行转发,来实现逻辑层和渲染层的交互和通讯。网络
Virtual DOM 相信你们都已有了解,大概是这么个过程:用JS对象模拟DOM树 -> 比较两棵虚拟DOM树的差别 -> 把差别应用到真正的DOM树上。并发
小程序的生命周期借鉴了Android的生命周期,若是你了解过Android的APP开发,那么理解小程序的就会很简单。框架
界面线程有四大状态:异步
初始化状态:初始化界面线程所须要的工做,包括工做机制,基本和咱们开发者没有关系,等初始化完毕就向“服务线程”发送初始化完毕信号,而后进入等待传回初始化数据状态。函数
首次渲染状态:收到“服务线程”发来的初始化数据后(就是 json和js中的data数据),就开始渲染小程序界面,渲染完毕后,发送“首次渲染完毕信号”给服务线程,并将页面展现给用户。this
持续渲染状态:此时界面线程继续一直等待“服务线程”经过this.setdata()函数发送来的界面数据,只要收到就从新局部渲染,也所以只要更新数据并发送信号,界面就自动更新。线程
结束状态:结束渲染。
服务线程五大状态:
onload是只会首次渲染的时候执行一次,onshow是每次界面切换都会执行,简单理解,这就是惟一差异。
等待激活状态:接收到“界面线程初始化完成”信号后,将初始化数据发送给“界面线程”,等待界面线程完成初次渲染。
激活状态:收到界面线程发送来的“首次渲染完成”信号后,就进入激活状态既程序的正常运行状态,并调用自定义的onReady()函数。
此状态下就能够经过 this.setData 函数发送界面数据给界面线程进行局部渲染,更新页面。
只有当小程序进入后台必定时间,或者系统资源占用太高,才会被真正的销毁。
开发者在后台发布新版本以后,没法马上影响到全部现网用户,但最差状况下,也在发布以后 24 小时以内下发新版本信息到用户。
小程序每次冷启动时,都会检查是否有更新版本,若是发现有新版本,将会异步下载新版本的代码包,并同时用客户端本地的包进行启动,即新版本的小程序须要等下一次冷启动才会应用上。
因此若是想让用户使用最新版本的小程序,能够利用 wx.getUpdateManager
作个检查更新的功能