国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript 高級(jí)技巧——“高級(jí)定時(shí)器”的注意要點(diǎn)

rubyshen / 1293人閱讀

摘要:為了規(guī)避這個(gè)問題,可以使用定時(shí)器對(duì)事件處理程序進(jìn)行節(jié)流。當(dāng)?shù)诙握{(diào)用該函數(shù)時(shí),它會(huì)清除前一次的定時(shí)器,并設(shè)置另一個(gè)。如果前一個(gè)定時(shí)器已經(jīng)執(zhí)行過了,這個(gè)操作就沒有任何意義。然而如果前一個(gè)定時(shí)器尚未執(zhí)行,其實(shí)就是將其替換為一個(gè)新的定時(shí)器。

高級(jí)定時(shí)器

為了解決setInterval的一些執(zhí)行問題, 下面是采用鏈?zhǔn)絪etTimeout的方式來(lái)規(guī)避:

setTimeout(function() {
    // add code here
    setTimeout(arguments.callee, interval);
}, interval);

避免使用arguments.callee:

setTimeout(function func () {
    // body...
    setTimeout(func, interval);
}, interval);
Yielding Processes

腳本長(zhǎng)時(shí)間運(yùn)行的原因: 過長(zhǎng)的、 過深嵌套的函數(shù)調(diào)用; 進(jìn)行大量的處理循環(huán)。
在展開循環(huán)之前, 你需要考慮兩個(gè)重要的問題:

該出事是否必須同步完成?

數(shù)據(jù)是否必須按順序完成?

當(dāng)你發(fā)現(xiàn)有些循環(huán)占用大量的事件, 同時(shí)對(duì)上述兩個(gè)問題答案都是否, 那么可以使用定時(shí)器來(lái)分隔這個(gè)循環(huán)。

setTimeout(function() {
    //取出下一個(gè)條目處理
    var item = array.shift();
    process(item);
    //還有條目,再設(shè)置一個(gè)定時(shí)器
    if (array.length > 0) {
        setTimeout(arguments.callee, interval);
    }
}, interval);

如:

var div = document.getElementById("div");
var arr = [321, 32, 1432, 432, 432, 321, 5435, 6454, 6576, 56434, 2321, 321, 31, 32, 1432, 432, 432, 321, 5435, 6454, 6576, 56434, 2321, 321, 31, 32, 1432, 432, 432, 321, 5435, 6454, 6576, 56434, 2321, 321, 31, 32, 1432, 432, 432, 321, 5435, 6454, 6576, 56434, 2321, 321, 31, 32, 1432, 432, 432, 321, 5435, 6454, 6576, 56434, 2321, 321, 31, 32, 1432, 432, 432, 321, 5435, 6454, 6576, 56434, 2321, 321, 31, 32, 1432, 432, 432, 321, 5435, 6454, 6576, 56434, 2321, 321, 31, 32, 1432, 432, 432, 321, 5435, 6454, 6576, 56434, 2321, 321, 31];

for (var i = 0, len = arr.length; i < len; i++) {
    div.innerHTML += arr[i] + "
"; }; //16ms 用時(shí) setTimeout(function shiftArr() { var item = arr.shift(); div.innerHTML += item + "
"; if (arr.length > 0) { setTimeout(shiftArr, 0); } }, 0) //58.2ms 用時(shí)
函數(shù)節(jié)流

對(duì)一些持續(xù)不斷觸發(fā)的事件, 如果建立的事件處理程序不夠好的話, 會(huì)導(dǎo)致瀏覽器崩潰或者其他的事故。 為了規(guī)避這個(gè)問題, 可以使用定時(shí)器對(duì)事件處理程序進(jìn)行節(jié)流。

函數(shù)節(jié)流背后的基本思想是: 一些代碼不可以在沒有間斷的情況下連續(xù)重復(fù)執(zhí)行。 具體做法是: 第一次調(diào)用函數(shù), 創(chuàng)建一個(gè)定時(shí)器, 在指定的時(shí)間間隔后運(yùn)行代碼。 當(dāng)?shù)诙握{(diào)用該函數(shù)時(shí), 它會(huì)清除前一次的定時(shí)器, 并設(shè)置另一個(gè)。 如果前一個(gè)定時(shí)器已經(jīng)執(zhí)行過了, 這個(gè)操作就沒有任何意義。 然而如果前一個(gè)定時(shí)器尚未執(zhí)行, 其實(shí)就是將其替換為一個(gè)新的定時(shí)器。 目的就是執(zhí)行函數(shù)的請(qǐng)求停止了一段時(shí)間之后才執(zhí)行。 以下是該模式的基本形式:

var processor = {
    timeoutId: null,

    performProcessing: function() {
        //實(shí)際執(zhí)行的處理程序
    },
    process: function() {
        clearTimeout(this.timeoutId);
        var that = this;
        this.timeoutId = setTimeout(function() {
            that.performProcessing();

        }, 1000);
    }
};
processor.process(); //嘗試開始執(zhí)行

只要代碼是周期性執(zhí)行的, 都應(yīng)該用節(jié)流。 處理的速率根據(jù)需求設(shè)置, 上面的例子是1000毫秒。

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

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

相關(guān)文章

  • JavaScript 高級(jí)技巧

    摘要:如果直接調(diào)用構(gòu)造函數(shù),那么會(huì)指向全局對(duì)象然后你的代碼就會(huì)覆蓋的原生。凍結(jié)對(duì)象最嚴(yán)格的防篡改就是凍結(jié)對(duì)象。中央定時(shí)器動(dòng)畫地址參考書籍高級(jí)程序設(shè)計(jì)忍者秘籍 1 安全類型檢測(cè) javascript內(nèi)置類型檢測(cè)并不可靠 safari某些版本( var person = {name: wdd}; undefined > Object.preventExtensions(person); Obj...

    wean 評(píng)論0 收藏0
  • JS程序設(shè)計(jì)高級(jí)技巧

    摘要:關(guān)于定時(shí)器要記住的最重要的事情是指定的時(shí)間間隔表示何時(shí)將定時(shí)器的代碼添加到隊(duì)列,而不是何時(shí)實(shí)際執(zhí)行代碼。多個(gè)定時(shí)器之間的執(zhí)行間隔會(huì)比預(yù)期的小解決辦法處理中數(shù)組分塊,,函數(shù)節(jié)流,實(shí)際進(jìn)行處理的方法實(shí)際執(zhí)行的代碼初始處理調(diào)用的方法 一、高級(jí)函數(shù) 安全類型檢測(cè) Object.protitype.toString.call(value) 作用域安全的構(gòu)造函數(shù) function Pers...

    Codeing_ls 評(píng)論0 收藏0
  • JS高級(jí)定時(shí)器

    摘要:高級(jí)定時(shí)器高級(jí)技巧異步首先,中沒有代碼是立即執(zhí)行的,而是一旦進(jìn)程空閑則立即執(zhí)行。針對(duì)第二種問題,使用定時(shí)器是解決方法之一。為定時(shí)器設(shè)定的時(shí)間間隔使得進(jìn)程有時(shí)間在處理項(xiàng)目的事件之間轉(zhuǎn)入空閑。該函數(shù)首先清除之前設(shè)置的任何定時(shí)器。 title: 高級(jí)定時(shí)器 date: 2016-12-13 tag: JS高級(jí)技巧 0x00 異步 首先,JavaScript 中沒有代碼是立即執(zhí)行的,...

    leeon 評(píng)論0 收藏0
  • 關(guān)于javascript高級(jí)定時(shí)器若干問題

    摘要:閉包閉包是指有權(quán)訪問另一個(gè)函數(shù)作用域中的變量的函數(shù)當(dāng)某個(gè)函數(shù)被調(diào)用時(shí),會(huì)創(chuàng)建一個(gè)執(zhí)行環(huán)境及相應(yīng)的作用域鏈。要注意通過第句聲明的這個(gè)方法屬于構(gòu)造函數(shù)生成的對(duì)象,而不屬于構(gòu)造函數(shù)的變量對(duì)象,也就是說(shuō),并不存在于作用域鏈中。 看到評(píng)論里有仁兄建議我試試箭頭函數(shù),真是受寵若驚,本來(lái)寫這篇文章也只是想記錄寫要點(diǎn)給自己日后看的。今天早上看到一篇總結(jié)javascript中this的文章JavaScr...

    zr_hebo 評(píng)論0 收藏0
  • 初窺JavaScript事件機(jī)制實(shí)現(xiàn)(二)—— Node.js中定時(shí)器實(shí)現(xiàn)

    摘要:下面通過幾個(gè)的定時(shí)器示例以及相關(guān)源碼來(lái)分析在中,功能到底是怎么實(shí)現(xiàn)的。我們知道,中的定時(shí)器并不同于計(jì)算機(jī)底層的定時(shí)中斷。補(bǔ)充資料在高級(jí)程序設(shè)計(jì)第三版第章高級(jí)技巧中對(duì)高級(jí)定時(shí)器以及有較詳細(xì)的討論。至此,這類定時(shí)器函數(shù)已經(jīng)可以為所用了。 上一篇博文提到,在Node中timer并不是通過新開線程來(lái)實(shí)現(xiàn)的,而是直接在event loop中完成。下面通過幾個(gè)JavaScript的定時(shí)器示例以及N...

    novo 評(píng)論0 收藏0

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<