成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

密集調(diào)用, 緩慢執(zhí)行---一個特殊的延遲函數(shù)

chengtao1633 / 1256人閱讀

摘要:前段時間開發(fā)過程中遇到一個特殊的需求起初寫了一個簡單的爬蟲用來爬取本地文檔中所有的接口數(shù)據(jù)先隨機訪問一個頁面拿到側(cè)邊欄的所有連接然后寫一個循環(huán)使用訪問各個連接依次拿到所對應的數(shù)據(jù)代碼類似但是這時出現(xiàn)了一個問題因為接口數(shù)量比較多大概個所以方法

前段時間開發(fā)過程中遇到一個特殊的需求:
起初寫了一個簡單的爬蟲, 用來爬取本地showdoc文檔中所有的接口數(shù)據(jù). 先隨機訪問一個頁面, 拿到側(cè)邊欄的所有連接, 然后寫一個循環(huán), 使用node訪問各個連接依次拿到所對應的數(shù)據(jù)
代碼類似

Promise.all(urls.map(url => get(url))).then(resultArr => {
    ...
})

但是這時出現(xiàn)了一個問題, 因為接口數(shù)量比較多 (大概500個) 所以get方法一次發(fā)送了500個左右請求, 結(jié)果node會報錯 socket hung up , 導致部分請求無法正常返回數(shù)據(jù), 原因大概是請求太多 socket 被耗盡了(也可能是服務器的原因), 第一個想到的就是節(jié)流/去抖函數(shù), 但是網(wǎng)上找了一圈, 發(fā)現(xiàn)沒有合適我這個需求的, 我需要在短時間多次調(diào)用,
然后在之后的一段時間,把積累的調(diào)用次數(shù)慢慢的執(zhí)行完, 一個都不能少!
沒辦法,只好自己寫了一個. 在這里記錄一下.

function delayCall(fn, delay) {
  let arr = [] //用來儲存每次調(diào)用傳入的參數(shù)
  //延遲調(diào)用函數(shù)
  const _delayCall = function(context) {
    setTimeout(() => {
      //隊列最前面的參數(shù)出隊列
      arr.shift()
      //如果隊列中還有未調(diào)用的參數(shù), 則遞歸調(diào)用直到耗盡隊列中的參數(shù)
      if(arr.length > 0) {
        fn.apply(context, arr[0])
        _delayCall(context)
      }
    }, delay)
  }
  return function() {
    const context = this
    arr.push(arguments)
    if(arr.length === 1) {
      //第一次調(diào)用時立即調(diào)用
      fn.apply(context, arguments)
      _delayCall(context)
    }
  }
}







可以用一段代碼測試

let i = 5
const delay = delayCall(function(e){ console.log(e) }, 500)
while(i--) delay(i)


這個函數(shù)可以實現(xiàn)密集調(diào)用, 緩慢執(zhí)行的效果. 不介意的就收藏下,說不定以后用的著呢 ^_^

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/90458.html

相關文章

  • 精讀《高性能 javascript》

    摘要:嵌套對象成員會造成重大性能影響盡量少用。一般來說你可以通過這種方法提高代碼的性能將經(jīng)常使用的對象成員數(shù)組項和域外變量存入局部變量中。在反復訪問的地方使用局部變量存放引用小心地處理集合因為他們表現(xiàn)出存在性總是對底層文檔重新查詢。 前言 本期我來給大家推薦的書是《高性能JavaScript》,在這本書中我們能夠了解 javascript 開發(fā)過程中的性能瓶頸,如何提升各方面的性能,包括代碼...

    caohaoyu 評論0 收藏0
  • Node - 異步IO和事件循環(huán)

    摘要:它是在的基礎上改進的一種方案,通過對文件描述符上的事件狀態(tài)進行判斷。檢索新的事件執(zhí)行與相關的回調(diào)幾乎所有情況下,除了關閉的回調(diào)函數(shù),它們由計時器和排定的之外,其余情況將在此處阻塞。執(zhí)行事件的,例如或者。 前言 學習Node就繞不開異步IO, 異步IO又與事件循環(huán)息息相關, 而關于這一塊一直沒有仔細去了解整理過, 剛好最近在做項目的時候, 有了一些思考就記錄了下來, 希望能盡量將這一塊的...

    MyFaith 評論0 收藏0
  • 高性能javascript小結(jié)

    摘要:高性能小結(jié)文章轉(zhuǎn)載于我的博客最近看完了動物叢書的高性能,覺得那本書的小結(jié)部分寫得非常不錯,簡潔輕快易懂概括性很強。由于局部變量存在于作用域鏈的起始位置,因此訪問局部變量比訪問跨作用域變量更快。 高性能javascript小結(jié) 文章轉(zhuǎn)載于我的CSDN博客:http://blog.csdn.net/hello_world_20/article/details/46793317 最近看完了動...

    wujl596 評論0 收藏0
  • 云存儲主要技術路線選型比較

    摘要:云存儲主要技術路線有哪些各有哪些優(yōu)缺點分享一存儲虛擬化存儲虛擬化更多是對傳統(tǒng)塊的虛擬化。也是云存儲的主流當家花旦。哪些應用場景適合云存儲?存儲虛擬化、分布式存儲、對象存儲這幾種技術主要解決什么問題?技術產(chǎn)品選型如何考慮? 企業(yè)哪些應用場景適合借助云存儲來實現(xiàn)? 傳統(tǒng) IT 環(huán)境中使用傳統(tǒng)存儲的困境有那些?那些應用場景是傳統(tǒng)存儲不能滿足而必須借助云存儲來實現(xiàn)的? 分享一: ...

    zlyBear 評論0 收藏0
  • 云存儲主要技術路線選型比較

    摘要:云存儲主要技術路線有哪些各有哪些優(yōu)缺點分享一存儲虛擬化存儲虛擬化更多是對傳統(tǒng)塊的虛擬化。也是云存儲的主流當家花旦。 哪些應用場景適合云存儲?存儲虛擬化、分布式存儲、對象存儲這幾種技術主要解決什么問題?技術產(chǎn)品選型如何考慮?企業(yè)哪些應用場景適合借助云存儲來實現(xiàn)?傳統(tǒng) IT 環(huán)境中使用傳統(tǒng)存儲的困境有那些?那些應...

    阿羅 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<