快速知悉
- request 错误码规范化
- 弱网体验优化
- 真机调试2.0 支持 Storage 面板数据展示
- iOS 端支持监听录屏状态
- getPerformance 支持获取主包和静态资源的加载耗时
1. request 错误码规范化
使用介绍:在使用部分小程序 API / 组件时,抛出的异常(fail 回调 / Promise reject)Error对象中除了带有errMsg,还会带有通用错误码errno。
errno 错误码的出现是为了解决以下问题:
- 目前部分 API 在出现错误时,只返回错误信息 errMsg,没有错误码。另一部分 API 虽然有 errCode,但没有形成统一格式规范。
- 目前有 errCode 的 API 中,不同的 API 失败时返回的 errCode 粒度不同。部分 API 的 errCode 粒度太大,信息不足。
- 相同的错误在不同的 API 中 errCode 未对齐,不便于开发者记忆和处理。
因此,我们设计了一套拥有统一规范的错误码errno,以帮助开发者更好地开发调试及处理错误。
errno 错误码有如下优点:
- 在错误码格式上,拥有统一的设计规范。
- 不同的 API 中出现的相同错误,对应的错误码一致。
- 错误码中包含 API 类别信息,帮助开发者快速定位问题。
- 不同 API 中的错误码粒度较为统一。
当 Error 对象中同时有 errno 错误码和 errCode 错误码时,一般以 errno 错误码为准。
后续 errno 错误码会逐步推广到所有 API 接口,并取代现有的 errCode 参数,为开发者提供错误信息。
示例代码:
以 API 接口 openBluetoothAdapter 为例,当蓝牙适配器不可用时,针对 openBluetoothAdapter 接口抛出的异常 Error 对象:
wx.openBluetoothAdapter({
success (res) {
console.log(res)
},
fail (err) {
// 微信无法使用蓝牙,可引导用户在系统设置中启用蓝牙
if ( err.errno === 1500102 ) {
wx.showModal({
content: '微信无法使用蓝牙,请到系统设置中启用'
})
}
}
})
2. 弱网体验优化
使用介绍: 在用户使用小程序时,可能会陷入某些网络不通畅的场景,此时一些严格依赖网络的功能可能就无法使用。为此我们计划提供一些措施来协助开发者优化弱网时小程序的使用体验。
目前,以下依赖网络的功能可以通过接入缓存管理器改善:
- 纯展示类的功能
- 只依赖部分用户授权的功能
2.1 缓存管理器
小程序提供了一个无侵入式的缓存管理器,开发者可以不需要修改原有业务代码进行接入。缓存管理器主要有以下几个能力:
- 在网络通畅时,对符合规则的网络请求进行缓存;在弱网时对该网络请求使用缓存返回。
- 在网络通畅时,对部分 wx api 调用进行缓存;在弱网时对这些 wx api 的调用使用缓存返回。
示例代码:
// 创建缓存管理器
const cacheManager = wx.createCacheManager({
origin: 'https://weixin.qq.com/',
})
// 添加请求规则
cacheManager.addRules([
'/cgi/home',
'/cgi/detail/:id',
])
// 监听符合规则的 wx.request 请求,默认在弱网时调用 wx.request 即会触发
cacheManager.on('request', evt => {
return new Promise((resolve, reject) => {
// 匹配是否存在缓存
const matchRes = cacheManager.match(evt)
if (matchRes && matchRes.data) {
// 使用缓存返回
resolve(matchRes.data)
} else {
// 没有匹配到缓存
reject({errMsg: `catch not found: ${evt.url}`})
}
})
})
开发者需要添加请求规则,用来匹配哪些请求需要被缓存,不在请求规则内的请求会被自动放过。一旦请求命中规则,则在网络通畅时会对结果进行缓存,在弱网时会拦截请求,然后触发 request 事件给开发者。开发者可以在事件回调中决定是否使用缓存返回,如果使用缓存返回,则不会再发起网络请求;如果仍要尝试发起网络请求,可像如下方式操作:
cacheManager.on('request', async evt => {
try {
// 仍然走网络请求
const res = await evt.request()
// ......
} catch (err) {
// ......
}
})
为了适应更多的请求场景,请求规则支持多种写法,如:
cacheManager.addRule('/abc') // uri 串,会自动使用调用 wx.createCacheManager 时传入的 origin 进行拼接,然后匹配
cacheManager.addRule('GET /abc') // 在 uri 串基础上,补充请求方法的匹配
cacheManager.addRule('/abc/:id') // 带可变部分的 uri 串
cacheManager.addRule(/\/(abc|cba)$/ig) // 正则表达式
cacheManager.addRule({
method: 'POST',
url: '/abc',
dataSchema: [
{name: 'param1', schema: {value: /(aaa|bbb)/ig}},
{name: 'param2', schema: {value: '123'}},
],
}) // 规则对象
3.真机调试2.0 支持 Storage 面板数据展示
使用介绍:Storage panel 用于显示当前项目使用 wx.setStorage 或者 wx.setStorageSync 后的数据存储情况。
可以直接在 Storage panel 上对数据进行删除(按 delete 键)、新增、修改
4. iOS 端支持监听录屏状态
使用介绍:监听监听用户录屏事件,目前只支持 iOS 端。
示例代码:
wx.onScreenRecordingStateChanged(function (res) {
console.log(res.state)
})
5.getPerformance 支持获取主包和静态资源的加载耗时
使用介绍:获取当前小程序性能相关的信息。关于小程序启动性能优化的更多内容,请参考启动性能指南。
示例代码:
const performance = wx.getPerformance()
const observer = performance.createObserver((entryList) => {
console.log(entryList.getEntries())
})
observer.observe({ entryTypes: ['render', 'script', 'navigation','loadPackage','resource'] })//包加载(loadPackage): 代码包下载耗时,资源(resource):resourceTiming: 资源加载耗时
打卡打卡