微信小程序解除10個(gè)請(qǐng)求并發(fā)限制
這可能是一個(gè)冷消息,所以標(biāo)題比較勁爆。
小程序并發(fā)限制由來(lái)已久,從剛發(fā)布時(shí)的 5 并發(fā),到后來(lái)的 10 并發(fā),同時(shí)發(fā)出的請(qǐng)求數(shù)若超出這個(gè)限制則將被殘忍拋棄,由此催生了很多開(kāi)發(fā)者在自己的項(xiàng)目中造了「請(qǐng)求排隊(duì)」的輪子。然而事實(shí)上,早在一年半以前,該限制就被微信官方取消。
10 個(gè)請(qǐng)求的并發(fā)限制
關(guān)于并發(fā)限制,微信開(kāi)發(fā)者文檔中是這么寫的:
這一限制的意思是在同一時(shí)刻, wx.request
、wx.uploadFile
、wx.downloadFile
加起來(lái)的并發(fā)總數(shù)不能超出 10 個(gè)。
至今,仍有很多開(kāi)發(fā)者一直遵守著這個(gè)規(guī)則。
許多人在寫業(yè)務(wù)的時(shí)候小心翼翼地維護(hù)著請(qǐng)求數(shù)。為了將請(qǐng)求數(shù)控制好,特地將一些并行請(qǐng)求改為串行,或者引入請(qǐng)求隊(duì)列來(lái)維護(hù)小程序請(qǐng)求。
這部分資深開(kāi)發(fā)者為了遵守這一規(guī)則所花的功夫,多少反映出了早年他們?cè)诿鎸?duì)數(shù)額超出后請(qǐng)求被殘忍拋棄時(shí)的無(wú)奈。
附小程序基礎(chǔ)庫(kù)版本 1.3.0 的控制臺(tái)報(bào)錯(cuò):
時(shí)至今日,仍有開(kāi)發(fā)者在討論解決小程序并發(fā)限制的方法:
被忽略的消息
實(shí)際上,微信在 2017 年 7 月的基礎(chǔ)庫(kù) 1.4.0 版本升級(jí)中就做了優(yōu)化,對(duì)超過(guò)并發(fā)限制的請(qǐng)求做了隊(duì)列處理,只是還有很多開(kāi)發(fā)者并不知道這一消息。
從嚴(yán)格意義上來(lái)說(shuō),此次優(yōu)化并沒(méi)有完全解除原有的并發(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ǔ)庫(kù) 1.4.0 更新日志(部分):
現(xiàn)在,我們終于可以忽略請(qǐng)求并發(fā)限制,愉快地發(fā)送請(qǐng)求了。畢竟請(qǐng)求都是可以都發(fā)送出去的,只不過(guò)在效率上會(huì)比無(wú)并發(fā)限制的情況慢一些。
發(fā)送請(qǐng)求的正確姿勢(shì)
如上文所說(shuō),微信小程序是在基礎(chǔ)庫(kù) 1.4.0 版本中加入對(duì)超過(guò)并發(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ǔ)庫(kù)的差異。
另外要注意的是小程序并發(fā)請(qǐng)求的排隊(duì)機(jī)制。當(dāng)同時(shí)調(diào)用的請(qǐng)求超過(guò) 10 個(gè)時(shí),小程序會(huì)先發(fā)起 10 個(gè)并發(fā)請(qǐng)求,超過(guò) 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調(diào)用C語(yǔ)言的幾種方式
本文主要介紹了JavaScript調(diào)用C語(yǔ)言的幾種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02js實(shí)現(xiàn)QQ面板拖拽效果(慕課網(wǎng)DOM事件探秘)(全)
這篇文章主要為大家詳細(xì)介紹了QQ面板拖拽效果,探秘慕課網(wǎng)DOM事件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09javascript實(shí)現(xiàn)捕捉鍵盤上按下的鍵
JavaScript取得按下鍵盤的鍵是哪個(gè),通過(guò)創(chuàng)建一個(gè)event.keyCode對(duì)象,可有效獲取鍵盤上的鍵,運(yùn)行代碼后,點(diǎn)擊鍵盤上的任意鍵,網(wǎng)頁(yè)上顯示你按下的是哪個(gè)鍵。2015-05-05使一個(gè)函數(shù)作為另外一個(gè)函數(shù)的參數(shù)來(lái)運(yùn)行的javascript代碼
使一個(gè)函數(shù)作為另外一個(gè)函數(shù)的參數(shù)來(lái)運(yùn)行的javascript代碼...2007-08-08mapboxgl實(shí)現(xiàn)帶箭頭軌跡線的代碼
這篇文章主要介紹了mapboxgl實(shí)現(xiàn)帶箭頭軌跡線的代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01JS+CSS實(shí)現(xiàn)六級(jí)網(wǎng)站導(dǎo)航主菜單效果
這篇文章主要介紹了JS+CSS實(shí)現(xiàn)六級(jí)網(wǎng)站導(dǎo)航主菜單效果,涉及JavaScript遍歷頁(yè)面元素及動(dòng)態(tài)修改css屬性的相關(guān)實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09前端開(kāi)發(fā)必配置 html5shiv.js和respond.min.js的作用說(shuō)明(bootstrap做IE低版
這篇文章主要介紹了前端開(kāi)發(fā)必配置 html5shiv.js和respond.min.js的作用說(shuō)明,需要的朋友可以參考下2023-05-05