最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談JavaScript中setInterval和setTimeout的使用問題

 更新時(shí)間:2015年08月01日 16:55:34   作者:Libuchao''s blog  
這篇文章主要介紹了淺談JavaScript中setInterval和setTimeout的使用問題,作者建議在任務(wù)龐大時(shí)盡量避免使用setInterval,需要的朋友可以參考下

說到setInterval,就不得不提到setTimeout,二者都是用于定時(shí)執(zhí)行某函數(shù),區(qū)別在于setTimeout 只執(zhí)行一次,而setInterval可以一直連續(xù)不斷執(zhí)行下去,典型用法如下:

function do_sth() { console.log('Hello...'); }

setTimeout(do_sth, 2500);  // 2.5 秒后,執(zhí)行 do_sth 函數(shù)(只執(zhí)行一次)
setInterval(do_sth, 3500); // 3.5 秒后,執(zhí)行 do_sth 函數(shù)(每隔 3.5 秒執(zhí)行一次,一直執(zhí)行下去)

表面看上去,二者各有各的用途,沒什么問題。但是如果setInterval所執(zhí)行的函數(shù)是比較耗時(shí)的動(dòng)作,setInterval仍然會(huì)按照原計(jì)劃安排調(diào)用那個(gè)函數(shù),而不考慮之前的任何阻塞,這樣隨著時(shí)間的推移,隊(duì)列中等待執(zhí)行的函數(shù)就會(huì)越來越多。而對(duì)于此問題解決方案仍然是采用遞歸調(diào)用setTimeout 的方法,如:

function do_sth() {
 console.log('Hello...');  // 即使這里執(zhí)行比較耗時(shí)的動(dòng)作也沒問題,
                  // 等這里執(zhí)行完了才會(huì)再去調(diào)用 setTimeout

 setTimeout(do_sth, 2500); // 安排后續(xù)執(zhí)行
}

do_sth();             // 初次執(zhí)行

這種遞歸調(diào)用的方式,既可以達(dá)到循環(huán)執(zhí)行某函數(shù)的目的,有可以防止后續(xù)任務(wù)不斷堆積。

如果你覺得這種方式有點(diǎn)羅嗦,還可以再寫得精煉一些:

(function() {
 console.log('Hello...');  // do something here
 setTimeout(arguments.callee, 2500);
})();

說是這么說,但是如果定時(shí)執(zhí)行的任務(wù)開銷很少,setInterval一般是沒什么問題的,但是如果任務(wù)開銷比較大,請(qǐng)務(wù)必使用setTimeout。

相關(guān)文章

最新評(píng)論

曲周县| 济宁市| 隆尧县| 华阴市| 平顺县| 望奎县| 漳浦县| 三门县| 花垣县| 奇台县| 沙雅县| 岳阳县| 建德市| 台北市| 连山| 南充市| 腾冲县| 清丰县| 阿城市| 弥渡县| 油尖旺区| 若羌县| 鸡泽县| 龙海市| 麻江县| 辽中县| 中江县| 宜昌市| 巧家县| 松滋市| 色达县| 郧西县| 河池市| 广元市| 化州市| 微博| 博野县| 乌审旗| 玉屏| 东乌| 同仁县|