小程序如何运行
- 打开小程序前会做什么
- 打开小程序的时候会发生什么
- 启动过程是怎样
- 小程序如何更新
小程序的运行环境
运行环境 | 逻辑层 | 渲染层 |
---|---|---|
iOS | JavaScriptCore | WKWeView |
Mac | JavaScriptCore | WKWeView |
Android | V8 | 自研XWeb引擎基于Mobile Chrome内核 |
PC | Chrome内核 | Chrome内核 |
IDE | NW.js | Chrome Webview |
小程序的基础库
由JavaScript编写,可以被注入到渲染层和逻辑层运行,总的来说负责处理数据绑定、组件系统、事件系统、通信系统等一系列框架逻辑
- 渲染层:可以用各类组件组建界面的元素
- 逻辑层:可以用各类API来处理各种逻辑
基础库组成
- 提供VD渲染机制相关基础代码(EXparser框架)
- 提供封装后的内置组件
- 提供逻辑层的API
- 提供其他补充能力(自定义组件和插件等)的基础代码
小程序的启动过程
在小程序启动时,微信为小程序展示一个固定启动页面,界面内包含小程序的图标、名称和加载提示图标
代码的加载
在小程序启动前,微信(客户端)会提前准备好一个页面层级(页面预渲染)用于展示小程序的首页,包括逻辑层和渲染层分别的初始化以及公共库的注入
- 页面预渲染:初始化JSCore注入AppService基础库,初始化WebView注入WebView基础库
- 小程序启动:创建基础UI并下载业务代码,渲染层逻辑层注入业务代码后启动
在打开小程序前,微信已经提前准备好一个WebView层,而当这个预备的WebView层被使用之后,一个新的WebView层也会被提前准备好,这样可以提升用户体验
类比web应用,提前把资源下载,准备好请求、数据,跳转页面时直接进行渲染
冷启动和热启动
只有当小程序进入后台一定时间,或者系统资源占用过高,才会被销毁
- 冷启动:用户首次打开、或小程序销毁后再次打开,重新加载启动
- 热启动:已经打开过的小程序,未被销毁,一段时间内再次打开,只是从后台状态进入前台状态
小程序的更新机制
基础库更新
小程序的基础库不会被打包在某个小程序代码中,而是提前内置在微信客户端。一般来说,当微信客户端发布稳定后,小程序会针对新版本的客户端来灰度新版本的基础库。在后台可以配置小程序基础库版本
开发代码更新
- 未启动时更新:
- 本地有小程序的历史版本:可能打开旧版本
- 客户端检查本地缓存:有新版本会静默更新
- 发布后24h内:下发新版本到用户
- 启动时更新:
- 每次冷启动:检查是否有更新版本
- 有新版本:异步下载新版本,同时启动本地包
- 新版本需要等下一次冷启动才会应用上
- 热启动不会触发更新,如果需要马上更新并应用,可以使用wx.getUpdateManager API进行处理