微信小程序解除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 相关文章推荐
JavaScript获取GridView中用户点击控件的行号,列号
Apr 14 Javascript
javascript 学习笔记(onchange等)
Nov 14 Javascript
juqery 学习之四 筛选过滤
Nov 30 Javascript
JQuery中对Select的option项的添加、删除、取值
Aug 25 Javascript
jQuery动态改变图片显示大小(修改版)的实现思路及代码
Dec 24 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
Jan 26 Javascript
JavaScript实现给按钮加上双重动作的方法
Aug 14 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
Feb 27 Javascript
基于JavaScript实现文字超出部分隐藏
Feb 29 Javascript
你不知道的 javascript【推荐】
Jan 08 Javascript
Vue项目路由刷新的实现代码
Apr 17 Javascript
详解基于 Node.js 的轻量级云函数功能实现
Jul 08 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实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
PHP 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
php imagecreatetruecolor 创建高清和透明图片代码小结
2010/05/15 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
Google韩国首页图标动画效果
2007/08/26 Javascript
javascript开发随笔二 动态加载js和文件
2011/11/25 Javascript
javascript中onclick(this)用法介绍
2013/04/19 Javascript
javascript实现页面内关键词高亮显示代码
2014/04/03 Javascript
javascript操纵OGNL标签示例代码
2014/06/16 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
JavaScript实现页面5秒后自动跳转的方法
2015/04/16 Javascript
jquery实现用户信息修改验证输入方法汇总
2015/07/18 Javascript
JavaScript实现瀑布流布局
2020/06/28 Javascript
JSON对象 详解及实例代码
2016/10/18 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
JavaScript比较同一天的时间大小实例代码
2018/02/09 Javascript
vue项目中添加单元测试的方法
2018/07/21 Javascript
JQuery属性操作与循环用法示例
2019/05/15 jQuery
解决vue 退出动画无效的问题
2020/08/09 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
vue脚手架项目创建步骤详解
2021/03/02 Vue.js
详解Swift中属性的声明与作用
2016/06/30 Python
python 全局变量的import机制介绍
2017/09/07 Python
Python内置函数delattr的具体用法
2017/11/23 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
pd.DataFrame统计各列数值多少的实例
2019/12/05 Python
python实现人机猜拳小游戏
2020/02/03 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
大学生求职简历自我评价
2015/03/02 职场文书
nginx搭建图片服务器的过程详解(root和alias的区别)
2021/03/31 Servers
关于mysql中string和number的转换问题
2022/06/14 MySQL