第一节 运行环境
小程序可以运行在不同环境中,如下:
1、ios/iPad os 微信客户端
2、Android 微信客户端
3、Windows Pc 微信客户端
4、Mac 微信客户端
5、小程序硬件框架
6、微信开发者工具
那么小程序逻辑层的脚本执行和组件渲染环境不同,性能就有所差异
1.1 iOs、iPadOS 和Mac OS上,JavaScript逻辑层代码是在JavascriptCore中被执行,视图层有由WKWebview来渲染
2.1 安卓环境下,小程序逻辑层的js代码运行在V8中,视图层由基于 Mobile Chromium内核微信自研的XWeb引擎渲染
3.1 Windows PC环境下,小程序逻辑层和视图层均用Chromium内核
4.1 开发者工具中,小程序逻辑层JavaScript代码在NW.js中运行,视图层由Chromium WebView渲染
逻辑层 | 渲染层 | |
ios/iPad os | JavaScript Core | WKWebview |
Android | V8引擎 | 基于 Mobile Chromium内核的XWebview |
小程序开发者工具 | NW.js | Chromium WebView |
第二节 JavaScript 支持情况
运行限制
基于安全考虑,小程序不支持动态执行JS代码,即:
不支持使用 eval 执行js代码
不支持使用 new Funcion() 创建函数,new Function('return this')除外;
标准ECMAScript支持
小程序的JS执行环境在不同平台有所差异,不同平台对ECMAScript标准支持也存在差异,因此小程序基础库为了尽量抹平差异,内置了一份core-js Polyfill。core-js 可以将平台环境缺失的标准API补齐。
注意:平台对ES语法的支持差异无法抹平,所以,当使用高级语法是,如async/await时,需要借助代码转换工具来支持这些语法
无法被polyfill的API
如何判断当前环境需要哪些 Polyfill & 代码转换目标
特定的小程序基础库版本有最低微信客户端版本要求,如基础库 v2.15.0 要求安卓最低版本 7.0.22,iOS 最低版本 7.0.20。
而特定的客户端版本有最低操作系统版本要求,如 iOS 7.0.20 要求最低 iOS 10。
从而,当指定特定小程序基础库版本时(可以在 小程序管理页 【设置】-【基本设置】-【基础库最低版本设置】中设置),我们能够得到最低需要支持的执行环境。
具体数据可以从 这个开源库 中获得。
第三节 运行机制 小程序运行机制 | 微信开放文档
小程序从冷启动到最终被销毁会经历不同的状态,不同状态下,会有不同的表现。
1、小程序冷启动
2、前台
3、后台
4、挂起
5、小程序销毁
1启动后进入2,
2,3在使用中可来回切换。
若切换至3,不切到2,5秒钟后进入4,此时处于“待机”状态。
处于4时,30分钟内被使用,则会切到2,否则进入5,小程序会被自动销毁。
3.1 小程序启动
小程序启动可分为两种情况,一种是冷启动、一种是热启动
(1)冷启动:如果用户首次打开,或者小程序销毁后被用户再次打开,此时小程序需要重新加载启动,这个就是冷启动
(3)热启动:如果用户已经打开过某小程序,然后一定时间内再次打开小程序,此时小程序并未被销毁,只是从后台状态进入前台状态,这个过程就是热启动
3.2 前台与后台
小程序启动后,界面展示给用户,此时小程序处于前台状态;
当用户关闭小程序时,小程序并未被真正的关闭,而是进入后台状态,此时小程序还可以短暂运行一小段时间,但部分API的使用会被限制。
切后台的方式包括但不限于以下几种:
- 点击右上角胶囊按钮离开小程序
- iOS 从屏幕左侧右滑离开小程序
- 安卓点击返回键离开小程序
- 小程序前台运行时直接把微信切后台(手势或 Home 键)
- 小程序前台运行时直接锁屏
当用户再次进入微信并打开小程序,小程序又会重新进入「前台」状态
3.3 挂起
小程序进入后台状态一段时间后(目前是5秒),微信会停止小程序JS线程的执行,小程序进入挂起状态。此时小程序的内存状态会被保留,但开发者代码的执行会停止,事件和接口回调会在小程序再次进入前台事被触发。
当开发者使用了后台音乐播放、后台地理位置等能力时,小程序可以在「后台」持续运行,不会进入到「挂起」状态
3.4 小程序销毁
如果用户很久没有使用小程序,或者系统资源紧张,小程序会被「销毁」,即完全终止运行。具体而言包括以下几种情形:
- 当小程序进入后台并被「挂起」后,如果很长时间(目前是 30 分钟)都未再次进入前台,小程序会被销毁。
- 当小程序占用系统资源过高,可能会被系统销毁或被微信客户端主动回收。
- 在 iOS 上,当微信客户端在一定时间间隔内连续收到系统内存告警时,会根据一定的策略,主动销毁小程序,并提示用户 「运行内存不足,请重新打开该小程序」。具体策略会持续进行调整优化。
- 建议小程序在必要时使用 wx.onMemoryWarning 监听内存告警事件,进行必要的内存清理。
- 小程序运行机制 | 微信开放文档