小程序網絡最大併發限制解決思路

小程序關於request請求的限制

  1. 默認超時時間和最大超時時間都是 60s
  2. request、uploadFile、downloadFile 的最大併發限制是 10 個
  3. 網絡請求的 referer header 不可設置。其格式固定爲 https://servicewechat.com/{appid}/{version}/page-frame.html,其中 {appid} 爲小程序的 appid,{version} 爲小程序的版本號,版本號爲 0 表示爲開發版、體驗版以及審覈版本,版本號爲 devtools 表示爲開發者工具,其他爲正式版本。
  4. 小程序進入後臺運行後(非置頂聊天),若是 5s 內網絡請求沒有結束,會回調錯誤信息 fail interrupted;在回到前臺以前,網絡請求接口調用都會沒法調用。

有時候業務上須要同時請求10個以上的連接,針對這種狀況須要延遲後續的請求,等當前請求完結後再去執行後續的請求javascript

解決思路

達到併發限制數量以後,延遲以後的請求,待以前的請求結束,再去發送以前延遲的請求
  1. 緩存當前請求的數量html

    // 使用閉包緩存當前的請求量
    var req = (function(){
        var count = 0;
        var counter = function() {
            count--;
        };
        return function(fn) {
            if (count < 10) {
                count++;
                fn(counter);
            } else {
                setTimeout(req.bind(null, fn), 300);
            }
        };
    })()
  2. 模擬20個異步事件java

    var a = function(fn){
        // 假設全部的異步事件都是2s後完成 
        setTimeout(()=>{
            console.log(new Date().getTime().toString().slice(-4))
            // 此處fn是req中的counter,在異步事件執行以後,釋放其所佔用的count
            fn()
        },2000)
       }
    var b = Array.from({length:20});
    
    b.map(()=>req(a))
  3. 結果驗證
    圖片描述

    能夠看到前10個請求與後十個請求是間隔2s以後才發出的,即將請求十個一組分開,這樣就避免了10個併發請求限制下,請求丟失的問題小程序

相關文章
相關標籤/搜索