成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

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

chengtao1633 / 1306人閱讀

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

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

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

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

function delayCall(fn, delay) {
  let arr = [] //用來(lái)儲(chǔ)存每次調(diào)用傳入的參數(shù)
  //延遲調(diào)用函數(shù)
  const _delayCall = function(context) {
    setTimeout(() => {
      //隊(duì)列最前面的參數(shù)出隊(duì)列
      arr.shift()
      //如果隊(duì)列中還有未調(diào)用的參數(shù), 則遞歸調(diào)用直到耗盡隊(duì)列中的參數(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)用時(shí)立即調(diào)用
      fn.apply(context, arguments)
      _delayCall(context)
    }
  }
}







可以用一段代碼測(cè)試

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


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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/90458.html

相關(guān)文章

  • 精讀《高性能 javascript》

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

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

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

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

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

    wujl596 評(píng)論0 收藏0
  • 云存儲(chǔ)主要技術(shù)路線選型比較

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

    zlyBear 評(píng)論0 收藏0
  • 云存儲(chǔ)主要技術(shù)路線選型比較

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

    阿羅 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<