adsense

2020年6月19日 星期五

[心得] net::ERR_INSUFFICIENT_RESOURCES 是什麼鬼?


最近幫公司的測試案例管理系統 TestRail 開發一個 custom script,把收到的資訊寫回測試案例,結果 TestRail 提供的 API 只能一筆一筆更新,不接受一次丟一大包資料,這也沒什麼,反正就收到資料一個迴圈一筆一筆丟就搞定了唄。






本以為不就收到資料,弄個迴圈一筆一筆透過 ajax 丟給 TestRail 的 API 就可以洗洗睡了,但是這個世道是不會讓你這麼好吃睡的,在測試的時候發現怎麼在弄某個 Suite 的資料就老是會噴錯?而且好像還不是固定的筆數?不是固定筆數表示不是某些筆的資料有錯?完全搞不懂為什麼會噴錯?

打開 console 看到噴的錯誤是  net::ERR_INSUFFICIENT_RESOURCES,這是什麼鬼?擔心的點發生了?因為 TestRail update_case API 只能一筆一筆打,所以打太多次 TestRail 資源不夠用了?但又能怎麼辦?問了古哥大神也問不出個所以然來,就在頭快被抓破的時候,突然瞄到好像有人說是 call ajax 太多次造成 Browser 資源不足!原來搞錯方向了?不是 TestRail 的問題,問題出在 Browser ,難怪有問題的都是在數量比較多的 Suite,所以問題就是一下子打了太多次 ajax 造成 Browser 資源不足,那我就邊打邊睡一下好了,本來是這樣想的,但是居然 Javascript 是沒有 Sleep 這個 function 的(知道為什麼寫 Javascript 的人要沒日沒夜的寫了吧,就不讓你睡






雖然說古哥大神有教怎麼在 Javascript 實作 Sleep ,但覺得怪怪的而且看起來好像不能解決我的問題(反正不想用就理由伯上身)那要怎麼解決問題?

重新理一下思緒,現在的問題是 TestRail 的 API 只能一筆一筆打,但有一次成千上百的資料要透過 ajax call 丟給 TestRail 造成 net::ERR_INSUFFICIENT_RESOURCES

也就是一次丟上千個 ajax 會有問題,那就不要一次丟那麼多嘛。

一次最多丟到 200 (自己抓)先等全部都做完再接著做下一批,所以就把 code 做了以下修改


 request = UPR_UpateInfomation (ardata.data[i]);
 promises.push (request);

 if (i % 200 == 0)
        {
  $.when.apply(null, promises).done(function() {
  promises = [];
  });
 }


實驗結果是可行的,結案


參考資料:

沒有留言: