微信小程序解除10個(gè)請(qǐng)求并發(fā)限制
這可能是一個(gè)冷消息,所以標(biāo)題比較勁爆。
小程序并發(fā)限制由來已久,從剛發(fā)布時(shí)的 5 并發(fā),到后來的 10 并發(fā),同時(shí)發(fā)出的請(qǐng)求數(shù)若超出這個(gè)限制則將被殘忍拋棄,由此催生了很多開發(fā)者在自己的項(xiàng)目中造了「請(qǐng)求排隊(duì)」的輪子。然而事實(shí)上,早在一年半以前,該限制就被微信官方取消。
10 個(gè)請(qǐng)求的并發(fā)限制
關(guān)于并發(fā)限制,微信開發(fā)者文檔中是這么寫的:

這一限制的意思是在同一時(shí)刻, wx.request、wx.uploadFile、wx.downloadFile 加起來的并發(fā)總數(shù)不能超出 10 個(gè)。
至今,仍有很多開發(fā)者一直遵守著這個(gè)規(guī)則。
許多人在寫業(yè)務(wù)的時(shí)候小心翼翼地維護(hù)著請(qǐng)求數(shù)。為了將請(qǐng)求數(shù)控制好,特地將一些并行請(qǐng)求改為串行,或者引入請(qǐng)求隊(duì)列來維護(hù)小程序請(qǐng)求。
這部分資深開發(fā)者為了遵守這一規(guī)則所花的功夫,多少反映出了早年他們?cè)诿鎸?duì)數(shù)額超出后請(qǐng)求被殘忍拋棄時(shí)的無奈。
附小程序基礎(chǔ)庫版本 1.3.0 的控制臺(tái)報(bào)錯(cuò):

時(shí)至今日,仍有開發(fā)者在討論解決小程序并發(fā)限制的方法:

被忽略的消息
實(shí)際上,微信在 2017 年 7 月的基礎(chǔ)庫 1.4.0 版本升級(jí)中就做了優(yōu)化,對(duì)超過并發(fā)限制的請(qǐng)求做了隊(duì)列處理,只是還有很多開發(fā)者并不知道這一消息。
從嚴(yán)格意義上來說,此次優(yōu)化并沒有完全解除原有的并發(fā)限制。目前同時(shí)處理請(qǐng)求的上限仍是 10 個(gè),但在 10 個(gè)以外的請(qǐng)求會(huì)排隊(duì),當(dāng)前面有請(qǐng)求完成的時(shí)候,隊(duì)列中的請(qǐng)求按順序發(fā)送并處理,*不會(huì)像之前那樣直接將超出 10 個(gè)的請(qǐng)求丟棄。
附件小程序基礎(chǔ)庫 1.4.0 更新日志(部分):

現(xiàn)在,我們終于可以忽略請(qǐng)求并發(fā)限制,愉快地發(fā)送請(qǐng)求了。畢竟請(qǐng)求都是可以都發(fā)送出去的,只不過在效率上會(huì)比無并發(fā)限制的情況慢一些。
發(fā)送請(qǐng)求的正確姿勢(shì)
如上文所說,微信小程序是在基礎(chǔ)庫 1.4.0 版本中加入對(duì)超過并發(fā)限制的請(qǐng)求做隊(duì)列處理優(yōu)化的,在 1.4.0 以下的版本中超出并發(fā)部分的請(qǐng)求會(huì)被丟棄。
據(jù)微信官方數(shù)據(jù),截止到 2018 年 12 月,1.4.0 版本以下用戶占比大約是 0.04%,雖然目前小程序很少會(huì)兼容到這么低的版本,但是對(duì)一些有特殊需要的小程序也要注意基礎(chǔ)庫的差異。
另外要注意的是小程序并發(fā)請(qǐng)求的排隊(duì)機(jī)制。當(dāng)同時(shí)調(diào)用的請(qǐng)求超過 10 個(gè)時(shí),小程序會(huì)先發(fā)起 10 個(gè)并發(fā)請(qǐng)求,超過 10 個(gè)的部分按調(diào)用順序進(jìn)行排隊(duì),當(dāng)前一個(gè)請(qǐng)求完成時(shí),再發(fā)送隊(duì)列中的下一個(gè)請(qǐng)求。
附 20 個(gè)請(qǐng)求并發(fā)測(cè)試:

測(cè)試結(jié)果:

從圖中可以看到,前 10 個(gè)請(qǐng)求同時(shí)發(fā)出,而后面的請(qǐng)求的起始點(diǎn),對(duì)應(yīng)了前面某個(gè)請(qǐng)求的結(jié)束點(diǎn),可以反映出請(qǐng)求的排隊(duì)行為。
這意味著,在并發(fā)請(qǐng)求很多的時(shí)候應(yīng)該做好排隊(duì)策略,按請(qǐng)求的重要程度和響應(yīng)時(shí)間調(diào)整調(diào)用順序,如果遇到請(qǐng)求的響應(yīng)很慢的情況,可以考慮做 timeout 處理,以免大量等待,影響用戶體驗(yàn)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript動(dòng)態(tài)插入CSS的方法
這篇文章主要介紹了JavaScript動(dòng)態(tài)插入CSS的方法,兩個(gè)步驟就可以實(shí)現(xiàn)JavaScript動(dòng)態(tài)插入CSS2015-12-12
不依賴Flash和任何JS庫實(shí)現(xiàn)文本復(fù)制與剪切附源碼下載
本篇文章給大家分享的文本復(fù)制與剪切板功能,實(shí)現(xiàn)此功能不依賴falsh插件和任何js庫實(shí)現(xiàn)的,感興趣的朋友一起看看吧2015-10-10
原生js實(shí)現(xiàn)拖拽移動(dòng)與縮放效果
這篇文章主要為大家詳細(xì)介紹了原生js實(shí)現(xiàn)拖拽移動(dòng)與縮放效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08
boostrapTable的refresh和refreshOptions區(qū)別淺析
在使用bootstrapTable時(shí),刷新數(shù)據(jù)有兩個(gè)方法refresh、refreshOptions,在其用法上有點(diǎn)區(qū)別,接下來通過本文給大家分享boostrapTable的refresh和refreshOptions的區(qū)別,需要的朋友可以參考下2017-01-01
showModalDialog模態(tài)對(duì)話框的使用詳解以及瀏覽器兼容
showModalDialog是jswindow對(duì)象的一個(gè)方法,和window.open一樣都是打開一個(gè)新的頁面。區(qū)別是:showModalDialog打開子窗口后,父窗口就不能獲取焦點(diǎn)了(也就是無法操作了)2014-01-01
JS實(shí)現(xiàn)點(diǎn)擊發(fā)送驗(yàn)證碼 xx秒后重新發(fā)送功能
在一些注冊(cè)類的網(wǎng)站,經(jīng)常遇到這樣的需求,點(diǎn)擊發(fā)送驗(yàn)證碼,xx秒后重新發(fā)送,這樣的功能怎么實(shí)現(xiàn)呢,接下來通過本文給大家分享js點(diǎn)擊發(fā)送驗(yàn)證碼 xx秒后重新發(fā)送功能,需要的朋友參考下吧2019-07-07

