定時器的作用和應(yīng)用場景

一只锻、作用
  1. 數(shù)組分塊
    數(shù)組分塊是一種使用定時器分割循環(huán)的技術(shù)谈竿,為要處理的項目創(chuàng)建一個隊列,然后使用定時器取出下一個要處理的項目進行處理构订,接著再設(shè)置另一個定時器。
    function chunk(array,process,context){
    setTimeout(function(){
    //取出下一個條目并處理
    var item = array.shift();
    process.call(context,item);
    //若還有條目避矢,再設(shè)置另一個定時器
    if(array.length > 0){
    setTimeout(arguments.callee,100);
    }
    },100);
    }

    var data = [1,2,3,4,5,6,7,8,9,0];
    function printValue(item){
        var div = document.getElementById('myDiv');
        div.innerHTML += item + '<br>';
    }
    chunk(data,printValue);
    

    數(shù)組分塊的重要性在于它可以將多個項目的處理在執(zhí)行隊列上分開悼瘾,在每個項目處理之后囊榜,給予其他的瀏覽器處理機會運行,這樣就可能避免長時間運行腳本的錯誤.
    <b>一旦某個函數(shù)需要花50ms以上的時間完成亥宿,那么最好看看能否將任務(wù)分割為一系列可以使用定時器的小任務(wù).</b>

  2. 函數(shù)節(jié)流
    連續(xù)嘗試進行過多的DOM相關(guān)操作可能會導(dǎo)致瀏覽器掛起卸勺,有時候甚至?xí)罎ⅰ?br> <b>解決辦法:</b>函數(shù)節(jié)流背后的基本思想是指,某些代碼不可以在沒有間斷的情況連續(xù)重復(fù)執(zhí)行烫扼。第一次調(diào)用函數(shù)曙求,創(chuàng)建一個定時器,在指定的時間間隔之后運行代碼映企。當(dāng)?shù)诙握{(diào)用該函數(shù)時圆到,它會清除前一次的定時器并設(shè)置另一個。
    var processor = {
    timeoutId: null,
    //實際進行處理的方法
    performProcessing: function(){
    //實際執(zhí)行的方法
    },
    //初始處理調(diào)用的方法
    process: function(){
    clearTimeout(this.timeoutId);
    var that = this;
    this.timeoutId = setTimeout(function(){
    that.performProcessing();
    },100);
    }
    }
    processor.process();

二卑吭、應(yīng)用
  1. 使用定時器來調(diào)整事件發(fā)生順序
    網(wǎng)頁開發(fā)中芽淡,某個事件先發(fā)生在子元素,然后冒泡到父元素豆赏,即子元素的事件回調(diào)函數(shù)挣菲,會早于父元素的事件回調(diào)函數(shù)觸發(fā)。如果掷邦,我們先讓父元素的事件回調(diào)函數(shù)先發(fā)生白胀,就要用到setTimeout(f, 0)。例如:
    div.onclick = function(){
    setTimeout(function(){
    alert(0);
    })
    }
    document.onclick = function(){
    alert(1);
    } //先執(zhí)行1 后 0了
  2. 用戶自定義的回調(diào)函數(shù)抚岗,通常在瀏覽器的默認動作之前觸發(fā)或杠。比如,用戶在輸入框輸入文本宣蔚,keypress事件會在瀏覽器接收文本之前觸發(fā)向抢。因此,下面的回調(diào)函數(shù)是達不到目的.
    <input type="text" id="myInput">
    <script>
    myInput.onkeypress = function(event) {
    this.value = this.value.toUpperCase();
    }
    </script>
    用setTimeout改寫
    <input type="text" id="myInput">
    <script>
    myInput.onkeypress = function(event) {
    setTimeout(function(){
    myInput.value = myInput.value.toUpperCase();
    });
    }
    </script>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胚委,一起剝皮案震驚了整個濱河市挟鸠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌亩冬,老刑警劉巖艘希,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異硅急,居然都是意外死亡覆享,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門营袜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撒顿,“玉大人,你說我怎么就攤上這事连茧『苏海” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵啸驯,是天一觀的道長客扎。 經(jīng)常有香客問我,道長罚斗,這世上最難降的妖魔是什么徙鱼? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮针姿,結(jié)果婚禮上袱吆,老公的妹妹穿的比我還像新娘。我一直安慰自己距淫,他們只是感情好绞绒,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著榕暇,像睡著了一般蓬衡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上彤枢,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天狰晚,我揣著相機與錄音,去河邊找鬼缴啡。 笑死壁晒,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的业栅。 我是一名探鬼主播秒咐,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼碘裕!你這毒婦竟也來了反镇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤娘汞,失蹤者是張志新(化名)和其女友劉穎歹茶,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體你弦,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡惊豺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了禽作。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尸昧。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖旷偿,靈堂內(nèi)的尸體忽然破棺而出烹俗,到底是詐尸還是另有隱情爆侣,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布幢妄,位于F島的核電站兔仰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蕉鸳。R本人自食惡果不足惜乎赴,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望潮尝。 院中可真熱鬧榕吼,春花似錦、人聲如沸勉失。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乱凿。三九已至度宦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間告匠,已是汗流浹背戈抄。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留后专,地道東北人划鸽。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像戚哎,于是被迫代替她去往敵國和親裸诽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 工廠模式類似于現(xiàn)實生活中的工廠可以產(chǎn)生大量相似的商品型凳,去做同樣的事情丈冬,實現(xiàn)同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 7,729評論 2 17
  • 單例模式 適用場景:可能會在場景中使用到對象甘畅,但只有一個實例埂蕊,加載時并不主動創(chuàng)建,需要時才創(chuàng)建 最常見的單例模式疏唾,...
    Obeing閱讀 2,058評論 1 10
  • 介紹 JavaScript 提供了兩個方法供我們設(shè)置一個定時器蓄氧,它們分別是 setTimeout() 和 setI...
    ghwaphon閱讀 882評論 0 4
  • topics: 1.The Node.js philosophy 2.The reactor pattern 3....
    宮若石閱讀 1,064評論 0 1
  • Find命令是linux中最常用且重要的命令之一,用于檢索文件所在的位置槐脏,可以根據(jù)多種參數(shù)組合進行檢索:文件名稱喉童,...
    閑睡貓閱讀 1,417評論 1 12