微信小程序解除10个请求并发限制


Posted in Javascript onDecember 18, 2018

这可能是一个冷消息,所以标题比较劲爆。

小程序并发限制由来已久,从刚发布时的 5 并发,到后来的 10 并发,同时发出的请求数若超出这个限制则将被残忍抛弃,由此催生了很多开发者在自己的项目中造了「请求排队」的轮子。然而事实上,早在一年半以前,该限制就被微信官方取消。

10 个请求的并发限制

关于并发限制,微信开发者文档中是这么写的:

微信小程序解除10个请求并发限制

这一限制的意思是在同一时刻, wx.requestwx.uploadFilewx.downloadFile 加起来的并发总数不能超出 10 个。

至今,仍有很多开发者一直遵守着这个规则。

许多人在写业务的时候小心翼翼地维护着请求数。为了将请求数控制好,特地将一些并行请求改为串行,或者引入请求队列来维护小程序请求。

这部分资深开发者为了遵守这一规则所花的功夫,多少反映出了早年他们在面对数额超出后请求被残忍抛弃时的无奈。

附小程序基础库版本 1.3.0 的控制台报错:

微信小程序解除10个请求并发限制

时至今日,仍有开发者在讨论解决小程序并发限制的方法:

微信小程序解除10个请求并发限制

被忽略的消息

实际上,微信在 2017 年 7 月的基础库 1.4.0 版本升级中就做了优化,对超过并发限制的请求做了队列处理,只是还有很多开发者并不知道这一消息。

从严格意义上来说,此次优化并没有完全解除原有的并发限制。目前同时处理请求的上限仍是 10 个,但在 10 个以外的请求会排队,当前面有请求完成的时候,队列中的请求按顺序发送并处理,*不会像之前那样直接将超出 10 个的请求丢弃

附件小程序基础库 1.4.0 更新日志(部分):

微信小程序解除10个请求并发限制

现在,我们终于可以忽略请求并发限制,愉快地发送请求了。毕竟请求都是可以都发送出去的,只不过在效率上会比无并发限制的情况慢一些。

发送请求的正确姿势

如上文所说,微信小程序是在基础库 1.4.0 版本中加入对超过并发限制的请求做队列处理优化的,在 1.4.0 以下的版本中超出并发部分的请求会被丢弃。

据微信官方数据,截止到 2018 年 12 月,1.4.0 版本以下用户占比大约是 0.04%,虽然目前小程序很少会兼容到这么低的版本,但是对一些有特殊需要的小程序也要注意基础库的差异。

另外要注意的是小程序并发请求的排队机制。当同时调用的请求超过 10 个时,小程序会先发起 10 个并发请求,超过 10 个的部分按调用顺序进行排队,当前一个请求完成时,再发送队列中的下一个请求。

附 20 个请求并发测试:

微信小程序解除10个请求并发限制

测试结果:

微信小程序解除10个请求并发限制

从图中可以看到,前 10 个请求同时发出,而后面的请求的起始点,对应了前面某个请求的结束点,可以反映出请求的排队行为。

这意味着,在并发请求很多的时候应该做好排队策略,按请求的重要程度和响应时间调整调用顺序,如果遇到请求的响应很慢的情况,可以考虑做 timeout 处理,以免大量等待,影响用户体验。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js操作iframe的一些方法介绍
Jun 25 Javascript
使用js画图之饼图
Jan 12 Javascript
JavaScript中值类型和引用类型的区别
Feb 23 Javascript
Bootstrap表单简单实现代码
Mar 06 Javascript
Angularjs中使用指令绑定点击事件的方法
Mar 30 Javascript
详解vue-cli + webpack 多页面实例应用
Apr 25 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
Jun 06 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
Jul 27 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
Aug 14 Javascript
详解vue静态资源打包中的坑与解决方案
Feb 05 Javascript
基于axios 解决跨域cookie丢失的问题
Sep 26 Javascript
Vue父组件向子组件传值以及data和props的区别详解
Mar 02 Javascript
vue项目中axios请求网络接口封装的示例代码
Dec 18 #Javascript
vue中引入第三方字体文件的方法示例
Dec 17 #Javascript
vue 表单验证按钮事件交由父组件触发的方法
Dec 17 #Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
Dec 17 #Javascript
vuex 解决报错this.$store.commit is not a function的方法
Dec 17 #Javascript
详解Vue This$Store总结
Dec 17 #Javascript
vue + element-ui的分页问题实现
Dec 17 #Javascript
You might like
用 php 编写的日历
2006/10/09 PHP
session在PHP大型web应用中的使用
2011/06/25 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
2014/10/30 PHP
Yii多表联合查询操作详解
2016/06/02 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
2014/07/01 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
2016/12/08 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
vuex操作state对象的实例代码
2018/04/25 Javascript
Vue 样式绑定的实现方法
2019/01/15 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
vue cli 3.0 搭建项目的图文教程
2019/05/17 Javascript
学习RxJS之JavaScript框架Cycle.js
2019/06/17 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
[52:37]完美世界DOTA2联赛循环赛 Forest vs DM BO2第一场 10.29
2020/10/29 DOTA
[53:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第一场 1月31日
2021/03/11 DOTA
python获取android设备的GPS信息脚本分享
2015/03/06 Python
pygame学习笔记(6):完成一个简单的游戏
2015/04/15 Python
python开发简易版在线音乐播放器
2017/03/03 Python
django反向解析和正向解析的方式
2018/06/05 Python
一文秒懂python读写csv xml json文件各种骚操作
2019/07/04 Python
python 字典 setdefault()和get()方法比较详解
2019/08/07 Python
Python3分析处理声音数据的例子
2019/08/27 Python
python科学计算之narray对象用法
2019/11/25 Python
如何表示python中的相对路径
2020/07/08 Python
Clarks西班牙官方在线商店:clarks鞋
2019/05/03 全球购物
英国最大最好的无人机商店:Drones Direct
2019/07/12 全球购物
2014年人事专员工作总结
2014/11/19 职场文书
Python基础学习之奇异的GUI对话框
2021/05/27 Python
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS