小程序运行时相关信息
(1)运行环境:小程序的运行环境
微信小程序运行在三端:iOS(iPhone/iPad)、Android 和 用于调试的开发者工具。
三端的脚本执行环境以及用于渲染非原生组件的环境是各不相同的:
在 iOS 上,小程序逻辑层的 javascript 代码运行在 JavaScriptCore 中,视图层是由 WKWebView 来渲染的,环境有 iOS8、iOS9、iOS10;
在 Android 上,
旧版本,小程序逻辑层的 javascript 代码运行中 X5 JSCore 中,视图层是由 X5 基于 Mobile Chrome 57 内核来渲染的;
新版本,小程序逻辑层的 javascript 代码运行在 V8 中,视图层是由自研 XWeb 引擎基于 Mobile Chrome 67 内核来渲染的;
在 开发工具上,小程序逻辑层的 javascript 代码是运行在 NW.js 中,视图层是由 Chromium 60 Webview 来渲染的。
平台差异
尽管三端的环境是十分相似的,但是还是有些许区别:
JavaScript
语法和 API 支持不一致:语法上开发者可以通过开启ES6
转ES5
的功能来规避(详情);此外,小程序基础库内置了必要的Polyfill,来弥补API的差异(详情)。WXSS
https://developers.weixin.qq.com/miniprogram/dev/devtools/codecompile.html#样式补全),还是建议开发者需要在 iOS 和 Android 上分别检查小程序的真实表现。
开发者工具仅供调试使用,最终的表现以客户端为准。
(2)JavaScript 支持情况
运行限制
基于安全考虑,小程序中不支持动态执行 JS 代码,即:
- 不支持使用
eval
执行 JS 代码 - 不支持使用
new Function
创建函数
客户端 ES6 API 支持情况
微信小程序已经支持了绝大部分的 ES6 API,已支持的 API 如下(部分API依赖系统版本):
String | iOS8 | iOS9 | iOS10 | Android |
---|---|---|---|---|
codePointAt | ||||
normalize | ✘ | ✘ | ||
includes | ||||
startsWith | ||||
endsWith | ||||
repeat | ||||
String.fromCodePoint |
Array | iOS8 | iOS9 | iOS10 | Android |
---|---|---|---|---|
copyWithin | ||||
find | ||||
findIndex | ||||
fill | ||||
entries | ||||
keys | ||||
values | ✘ | ✘ | ||
includes | ✘ | |||
Array.from | ||||
Array.of |
Number | iOS8 | iOS9 | iOS10 | Android |
---|---|---|---|---|
isFinite | ||||
isNaN | ||||
parseInt | ||||
parseFloat | ||||
isInteger | ||||
EPSILON | ||||
isSafeInteger |
Math | iOS8 | iOS9 | iOS10 | Android |
---|---|---|---|---|
trunc | ||||
sign | ||||
cbrt | ||||
clz32 | ||||
imul | ||||
fround | ||||
hypot | ||||
expm1 | ||||
log1p | ||||
log10 | ||||
log2 | ||||
sinh | ||||
cosh | ||||
tanh | ||||
asinh | ||||
acosh | ||||
atanh |
Object | iOS8 | iOS9 | iOS10 | Android |
---|---|---|---|---|
is | ||||
assign | ||||
getOwnPropertyDescriptor | ||||
keys | ||||
getOwnPropertyNames | ||||
getOwnPropertySymbols |
Other | iOS8 | iOS9 | iOS10 | Android |
---|---|---|---|---|
Symbol | ||||
Set | ||||
Map | ||||
Proxy | ✘ | ✘ | ✘ | |
Reflect | ||||
Promise |
(3)小程序运行机制
小程序启动
小程序启动会有两种情况,一种是「冷启动」,一种是「热启动」。
- 热启动:假如用户已经打开过某小程序,然后在一定时间内再次打开该小程序,此时无需重新启动,只需将后台态的小程序切换到前台,这个过程就是热启动;
- 冷启动:用户首次打开或小程序被微信主动销毁后再次打开的情况,此时小程序需要重新加载启动,即冷启动。
小程序没有重启的概念。
前台/后台状态
当用户点击右上角胶囊按钮关闭小程序,或者按了设备 Home 键离开微信时,小程序并没有直接销毁,而是进入了后台状态;
当用户再次进入微信或再次打开小程序,小程序又会从后台进入前台。
小程序销毁
需要注意的是:只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁。
- 当小程序进入后台,客户端会维持一段时间的运行状态,超过一定时间后(目前是5分钟)小程序会被微信主动销毁。
- 当小程序占用系统资源过高,可能会被系统销毁或被微信客户端主动回收。
- 在 iOS 上,当微信客户端在一定时间间隔内(目前是 5 秒)连续收到两次及以上系统内存告警时,会主动进行小程序的销毁,并提示用户 「该小程序可能导致微信响应变慢被终止」。
- 建议小程序在必要时使用 wx.onMemoryWarning 监听内存告警事件,进行必要的内存清理。
基础库 1.1.0 及以上,1.4.0 以下版本: 当用户从扫一扫、转发等入口(场景值为1007, 1008, 1011, 1025)进入小程序,且没有置顶小程序的情况下退出,小程序会被销毁。
再次打开逻辑
基础库 1.4.0 开始支持,低版本需做兼容处理。
用户打开小程序的预期有以下两类场景:
A. 打开首页: 场景值有以下几项:
场景值ID | 说明 |
---|---|
1001 | 发现栏小程序主入口,「最近使用」列表 |
1019 | 微信钱包 |
1022 | 聊天顶部置顶小程序入口 |
1023 | 安卓系统桌面图标 |
1038 | 从另一个小程序返回 |
1056 | 音乐播放器菜单 |
B. 打开小程序指定的某个页面: 场景值为除 A 以外的其他
当再次打开一个小程序逻辑如下:
上一次的场景 | 当前打开的场景 | 效果 |
---|---|---|
A | A | 保留原来的状态 |
B | A | 清空原来的页面栈,打开首页(相当于执行 wx.reLaunch 到首页) |
A 或 B | B | 清空原来的页面栈,打开指定页面(相当于执行 wx.reLaunch 到指定页) |
(4)小程序更新机制
未启动时更新
开发者在管理后台发布新版本的小程序之后,如果某个用户本地有小程序的历史版本,此时打开的可能还是旧版本。微信客户端会有若干个时机去检查本地缓存的小程序有没有更新版本,如果有则会静默更新到新版本。总的来说,开发者在后台发布新版本之后,无法立刻影响到所有现网用户,但最差情况下,也在发布之后 24 小时之内下发新版本信息到用户。用户下次打开时会先更新最新版本再打开。
启动时更新
小程序每次冷启动时,都会检查是否有更新版本,如果发现有新版本,将会异步下载新版本的代码包,并同时用客户端本地的包进行启动,即新版本的小程序需要等下一次冷启动才会应用上。
如果需要马上应用最新版本,可以使用 wx.getUpdateManager API 进行处理。
const updateManager = wx.getUpdateManager()updateManager.onCheckForUpdate(function (res) {// 请求完新版本信息的回调 console.log(res.hasUpdate) })updateManager.onUpdateReady(function () {wx.showModal({title: '更新提示',content: '新版本已经准备好,是否重启应用?',success(res) {if (res.confirm) {// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启 updateManager.applyUpdate()}}}) })updateManager.onUpdateFailed(function () {// 新版本下载失败 })
.
转载于:https://www.cnblogs.com/jianxian/p/11106683.html
小程序运行时相关信息相关推荐
- 微信小程序性能测试——小程序运行时性能测试
微信小程序性能测试主要可以分为两个方面,启动性能 和 运行时的性能.启动性能测试可参考前面文章<微信小程序性能测试--启动性能专项测试>,本文主要介绍如何利用 云测服务 进行小程序运行时性 ...
- 小程序性能优化之页面预加载方案——让你的小程序运行如飞 进阶篇
小程序性能优化之页面预加载方案 进阶篇 转载请注明出处:https://blog.csdn.net/sinat_27612147/article/details/80798452 写在前面 预加载方案 ...
- 微信小程序运行及更新机制
微信小程序运行及更新机制 1.微信小程序运行机制 1.1 前台和后台 1.2 小程序启动:冷启动和热启动 1.3 小程序销毁 2.微信小程序更新机制 2.1 启动时同步更新 定期检查发现版本更新 用户 ...
- 小程序Springboot基层慢性病信息管理系统毕业设计-附源码221550
摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势:对于基层慢性病信息管理系统平台当然也不能排除在外,随着网络技术的不断成熟,带动了基层慢性病信息管理系统小 ...
- 二手车小程序制作及相关问题介绍
二手车经销商做小程序/APP的原因: 1,形势所逼:在如今的二手车市场里,很多二手车平台在资金的帮助下,开始广告轰炸,加上线上的金融分期,二手车电商平台业绩连年上涨,再加上电商平台不断的侵占市场,导致 ...
- 让别人的小程序运行在自己的app中
概要 本文包括的内容: 小程序在微信开发者工具中,通过构建生成真正的执行代码和安装包,****.wxapkg.wxml和wxss在构建这一步就被转换成了html和css(virtual-DOM).微信 ...
- Delphi-TScreen表示应用程序运行时屏幕的状态
TScreen表示应用程序运行时屏幕的状态. 类关系 TObject->TPersistent->TComponent TScreen引进具有表示下列各种情况的属性 什么窗体和数据模块已经 ...
- 小程序 | 获取用户头像信息接口改进:getUserInfo的使用
开发小程序过程中,发现最近微信官方新调整了getUserInfo的接口的使用,并发布了一篇<小程序登录.用户信息相关接口调整说明>公告,摸索了一番之后,了解到getUserProfile用 ...
- 微信小程序运行的底层逻辑
小程序的启动 微信客户端在打开小程序之前,会把整个小程序的代码包下载到本地. 紧接着通过 app.json 的 pages 字段就可以知道你当前小程序的所有页面路径: {"pages&quo ...
最新文章
- WinSock嗅探虚拟主机拿站取webshell
- 面试必问:用 Java 写一个内存泄漏程序
- Docker : Docker使用DockerFile入门案例
- mysql事务操作代码_Mysql中事务的使用【mysql】
- 泰坦尼克:机器从灾难中学习_用于灾难响应的机器学习研究:什么才是好的论文?...
- c语言中用中文转化数字,用C语言写中文数字字符串转数值变量
- go之官方依赖管理工具dep安装和使用
- 编写 systemctl 入门
- SAP中Quant份的理论及应用解析
- cisco 交换机和路由器启动过程
- 19、jsp的实质是什么?
- uniappAndroid离线打包 小米审核不通过
- mapstruct使用的正确姿势
- Php 线性 非线性,什么是线性函数与非线性函数?
- ip地址 @91.189.91.93 security AppCompatActivity(1024td
- html5 游戏营销,HTML5游戏的崛起及营销未来
- Android客户端请求服务器端的详细解释(附源代码)
- 读书笔记---能者纵横天下(四)
- 睡梦中面试腾讯 pcg 移动端开发, 一+二+三+hr面(已oc)
- C语言printf函数格式字符
热门文章
- 版本控制工具--svn和git的使用(一) -----版本控制的好处以及分类
- 配置金蝶14.3APi
- 《网络编程》守护进程
- mfc连接mysql增删改查_java实现mysql数据库增删改查
- 如何在Linux上部署Jenkins
- SkyEye仿真平台下的操作系统实验- 准备篇(一)
- hive常见的DML操作
- Spark源码分析之Job触发原理
- deepin终端编译c程序_在deepin linux上安装国人开发的编程语言-“明”语言
- python模拟session_python使用requests.session模拟登录