摘要:前段時間開發(fā)過程中遇到一個特殊的需求起初寫了一個簡單的爬蟲用來爬取本地文檔中所有的接口數(shù)據(jù)先隨機(jī)訪問一個頁面拿到側(cè)邊欄的所有連接然后寫一個循環(huán)使用訪問各個連接依次拿到所對應(yīng)的數(shù)據(jù)代碼類似但是這時出現(xiàn)了一個問題因?yàn)榻涌跀?shù)量比較多大概個所以方法
前段時間開發(fā)過程中遇到一個特殊的需求:
起初寫了一個簡單的爬蟲, 用來爬取本地showdoc文檔中所有的接口數(shù)據(jù). 先隨機(jī)訪問一個頁面, 拿到側(cè)邊欄的所有連接, 然后寫一個循環(huán), 使用node訪問各個連接依次拿到所對應(yīng)的數(shù)據(jù)
代碼類似
Promise.all(urls.map(url => get(url))).then(resultArr => { ... })
但是這時出現(xiàn)了一個問題, 因?yàn)榻涌跀?shù)量比較多 (大概500個) 所以get方法一次發(fā)送了500個左右請求, 結(jié)果node會報錯 socket hung up , 導(dǎo)致部分請求無法正常返回?cái)?shù)據(jù), 原因大概是請求太多 socket 被耗盡了(也可能是服務(wù)器的原因), 第一個想到的就是節(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(() => { //隊(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)用時立即調(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ù)可以實(shí)現(xiàn)密集調(diào)用, 緩慢執(zhí)行的效果. 不介意的就收藏下,說不定以后用的著呢 ^_^
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/90458.html
摘要:嵌套對象成員會造成重大性能影響盡量少用。一般來說你可以通過這種方法提高代碼的性能將經(jīng)常使用的對象成員數(shù)組項(xiàng)和域外變量存入局部變量中。在反復(fù)訪問的地方使用局部變量存放引用小心地處理集合因?yàn)樗麄儽憩F(xiàn)出存在性總是對底層文檔重新查詢。 前言 本期我來給大家推薦的書是《高性能JavaScript》,在這本書中我們能夠了解 javascript 開發(fā)過程中的性能瓶頸,如何提升各方面的性能,包括代碼...
摘要:它是在的基礎(chǔ)上改進(jìn)的一種方案,通過對文件描述符上的事件狀態(tài)進(jìn)行判斷。檢索新的事件執(zhí)行與相關(guān)的回調(diào)幾乎所有情況下,除了關(guān)閉的回調(diào)函數(shù),它們由計(jì)時器和排定的之外,其余情況將在此處阻塞。執(zhí)行事件的,例如或者。 前言 學(xué)習(xí)Node就繞不開異步IO, 異步IO又與事件循環(huán)息息相關(guān), 而關(guān)于這一塊一直沒有仔細(xì)去了解整理過, 剛好最近在做項(xiàng)目的時候, 有了一些思考就記錄了下來, 希望能盡量將這一塊的...
摘要:高性能小結(jié)文章轉(zhuǎn)載于我的博客最近看完了動物叢書的高性能,覺得那本書的小結(jié)部分寫得非常不錯,簡潔輕快易懂概括性很強(qiáng)。由于局部變量存在于作用域鏈的起始位置,因此訪問局部變量比訪問跨作用域變量更快。 高性能javascript小結(jié) 文章轉(zhuǎn)載于我的CSDN博客:http://blog.csdn.net/hello_world_20/article/details/46793317 最近看完了動...
摘要:云存儲主要技術(shù)路線有哪些各有哪些優(yōu)缺點(diǎn)分享一存儲虛擬化存儲虛擬化更多是對傳統(tǒng)塊的虛擬化。也是云存儲的主流當(dāng)家花旦。哪些應(yīng)用場景適合云存儲?存儲虛擬化、分布式存儲、對象存儲這幾種技術(shù)主要解決什么問題?技術(shù)產(chǎn)品選型如何考慮? 企業(yè)哪些應(yīng)用場景適合借助云存儲來實(shí)現(xiàn)? 傳統(tǒng) IT 環(huán)境中使用傳統(tǒng)存儲的困境有那些?那些應(yīng)用場景是傳統(tǒng)存儲不能滿足而必須借助云存儲來實(shí)現(xiàn)的? 分享一: ...
摘要:云存儲主要技術(shù)路線有哪些各有哪些優(yōu)缺點(diǎn)分享一存儲虛擬化存儲虛擬化更多是對傳統(tǒng)塊的虛擬化。也是云存儲的主流當(dāng)家花旦。 哪些應(yīng)用場景適合云存儲?存儲虛擬化、分布式存儲、對象存儲這幾種技術(shù)主要解決什么問題?技術(shù)產(chǎn)品選型如何考慮?企業(yè)哪些應(yīng)用場景適合借助云存儲來實(shí)現(xiàn)?傳統(tǒng) IT 環(huán)境中使用傳統(tǒng)存儲的困境有那些?那些應(yīng)...
閱讀 2953·2021-11-23 09:51
閱讀 1006·2021-09-26 09:55
閱讀 3935·2021-09-22 14:58
閱讀 1468·2021-09-08 09:35
閱讀 1078·2021-08-26 14:16
閱讀 882·2019-08-23 18:17
閱讀 2054·2019-08-23 16:45
閱讀 700·2019-08-23 15:55