收藏
回答

微信小程序在HTTP/2协议下,第一次请求后手机熄屏空闲5分钟后再次请求出现10秒延迟问题

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug wx.request 微信安卓客户端 8.0.57 3.8.0

【问题描述】  

在使用微信小程序的 `wx.request` 进行网络请求时,发现一个异常现象:如果两次请求之间的时间间隔超过 4 分钟,再次发起请求时会出现大约 10 秒的延迟。这一问题对用户体验造成了一定的影响。

【问题分析】  

经过初步分析,该问题与微信小程序的请求连接 `keepalive` 机制有关。`keepalive` 是一种优化机制,用于在请求完成后保持连接一段时间,从而避免频繁建立新的连接,提升性能和效率。  

然而,这种机制也有一定的限制。通常情况下,`keepalive` 的超时时间为 4 分钟。如果在这段时间内没有新的请求,连接会被自动关闭。当下一次请求发生时,需要重新建立连接,这可能导致额外的延迟(约 10 秒)。  

进一步排查后发现,这个问题仅与 HTTP/2 协议的请求相关,而 HTTP/1.1 的请求则不会出现类似情况。默认情况下,微信小程序的请求并不开启 HTTP/2 支持。但在某些特定设备(如华为 Pura70 手机)上,微信小程序会根据服务器是否支持 HTTP/2 来动态决定是否启用 HTTP/2。因此,当服务器启用了 HTTP/2 支持时,可能会触发上述延迟问题。

【解决方案】  

为了解决这一问题,可以通过关闭服务器端的 HTTP/2 支持来避免微信小程序使用 HTTP/2 协议进行请求。这样可以确保所有请求都基于 HTTP/1.1 协议,从而规避因 `keepalive` 机制导致的延迟问题。  

具体操作步骤如下:  

1. 检查服务器配置,确认是否启用了 HTTP/2 支持。  

2. 如果已启用 HTTP/2,将其关闭并重启服务。  

3. 测试微信小程序的请求行为,确认问题是否解决。  

通过以上调整,可以有效避免因 HTTP/2 和 `keepalive` 机制引发的请求延迟问题,提升小程序的响应速度和用户体验。

回答关注问题邀请回答
收藏

2 个回答

  • 社区技术运营专员-Jahozheng
    社区技术运营专员-Jahozheng
    04-18

    你好,麻烦提供出现问题的具体机型、微信版本号、系统版本号,以及能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)

    04-18
    有用
    回复
  • 智能回答 智能回答 该问答由AI生成
    04-17
    有用
登录 后发表内容