原文来自「微信开发者」公众号,小程序技术研发工程师 binnie 原创。 本文主要介绍了小程序网络调优方法的网络分析、能力支持、网络状态提醒。
伴随着线上化趋势,小程序逐渐成为日常生活的数字连接器,为大家的数字化生活提供便利。在小程序的使用过程中,网络环境对于用户体验有着非常重要的影响。好的网络环境给予流畅的用户体验,赋能小程序业务。
针对网络环境的应用开发,微信团队提出 网络调优方法,提升网络请求速度,优化用户体验。
查一查:网络分析
想要解决网络问题?第一步离不开查明网络问题原因。微信团队提供 Profile 信息、Errno 错误码 2 种网络分析方法,助力开发者快速定位网络问题,解决网络请求难题。
Profile 信息了解耗时信息
基于网络性能分析的需求,微信团队提供 Profile 信息,便于开发者了解网络连接关键时间点的耗时信息。通过以下 2 种方式即可获取 Profile 信息:
Errno 错误码快速定位网络问题
自 iOS 8.0.20 (基础库 2.24.0)、安卓 8.0.20 (基础库 2.23.0) 开始,request 接口支持 Errno 错误码,帮助开发者快速定位网络问题,更好地进行调试。
对比其他错误分析方法,Errno 错误码具有以下优势:
- 更统一:拥有统一的设计规范,同时不同 API 错误码颗粒度统一,帮助开发者快速辨别错误类型
- 更便捷:不同 API 出现相同错误,对应错误码一致,便于开发者便捷整理错误类型
- 更全面:包含 API 类别信息,帮助开发者快速定位问题
Errno 错误码统一简洁的格式助力开发者快速定位网络问题,如何识别错误码?以 (0)600002 错误码为例:
- (0)6 表示 API 接口的一级类目为【网络】
- 00 表示 API 接口的二级类目为【通用网络错误】
- 002 表示具体错误类型为【URL域名不在安全域名列表中】
用一用:能力支持
了解网络错误原因,开发者着手解决网络问题。微信团队提供 request 新参数、perMessageDeflate 压缩扩展 2 种方法,助力网络请求速度提升。
应用新参数,场景化加速网络水平
针对网络请求相关的新协议,微信团队现已提供 5 类新参数,加速网络水平:
- enableHttp2:如果后台支持,尝试使用 Http2 协议,适用于高并发、高带宽场景
- enableQuic:如果后台支持,尝试使用 Quic 协议,适用于低延迟、高吞吐场景
- enableCache:缓存内容,相同请求优先读取本地内容
- enableHttpDNS:开启 HttpDNS 服务,降低用户连接失败率
- enableChunked:开启 transfer-encoding chunked 服务,支持分块传输
启动压缩扩展,提升信息收发速度
当 WebSocket 启动 perMessageDeflate 压缩扩展后,收发信息过程自动压缩数据包,提升消息收发速度。
wx.connectSocket({
url: 'wss://example.qq.com',// 开发者服务器 wss 接口地址
header:{ // HTTP Header,Header 中不能设置 Referer
'content-type': 'application/json'
},
protocols: ['protocol1'], // 子协议数组
perMessageDeflate:"true" // 是否开启压缩扩展,默认是 false
})
拍一拍:网络状态提醒
除了通过分析和解决网络难题,小程序开发者可以通过提醒的方式告知用户当前的网络状态,及时切换网络,提升小程序的使用体验。
前后台切换
在小程序切换后台 5 秒后,自动中断网络请求并且收到 interrupted 回调。建议开发者提醒用户重试,避免造成不良体验。
网络状态变化
小程序网络问题常常出现在断网情况,因此开发者可以通过事件 wx.onNetworkStatusChange 通知网络状态变化,引导用户进行网络切换。
wx.onNetworkStatusChange(function (res) {
// 当前是否有网络链接,返回的是布尔值
console.log(res.isConnected)
// 返回的是网络类型
// 包括 wifi、2g、3g、4g、5g、unknown(Android 下不常见网络类型)、none(无网络)
console.log(res.networkType)
})
弱网状态变化
大部分的网络超时问题主要由弱网引起。弱网主要是基于以下现象判定:
- 8 次网络请求中,出现 3 次以上连接超时
- 8 次网络请求中,出现 3 次 rtt 超过 400
- 8 次网络请求中,出现 3 次以上丢包
一方面开发者可以通过 缓存管理器 优化弱网时小程序的使用体验,另一方面开发者可以通过事件 wx.onNetworkWeakChange 监听弱网变化,给予用户更好的提示。
wx.onNetworkWeakChange(function (res) {
console.log(res.weakNet) // 当前是否处于弱网状态
console.log(res.networkType) // 当前网络类型
})
// 取消监听
wx.offNetworkWeakChange()
-------------------------------------
网络环境对于小程序的体验有着非常重要的影响。通过原因分析了解网络问题的根因,通过使用协议扩展能力提高网络水平,通过网络状态提醒提升用户体验,最终提升请求速度,满足用户需求。关于网络调优的更多内容,请点击 官方文档 了解更多。
如有其他小程序应用相关的问题,可在 微信开放社区小程序交流专区 发帖互动,技术专员将为大家解答及进行深度交流。
怎么模拟弱网呢?设置了弱网监听,基础库版本号也是符合要求的,设置slow 3g,还是没法触发弱网监听。
学习啦,越来越方便。
8 次网络请求都是什么请求?是小程序自己请求吗