javascript中的定時器

2021-07-02 05:15:12 字數 1943 閱讀 5965

在settimeout()和setinterval()我們能夠設定時間間隔,來讓下個事件大致發生在哪個時間段。假如我們設定時間間隔是0的話,那是不是就會在0ms之後執行呢,也就是立即執行。我們可以採用下面的**輸出一下:

function

get()

}, 0);

}get();

我們把每次執行setinterval()前後的時間差列印到螢幕中(以下資料使用chrome 42.0.2311.90版本測試):

1429545782409 (1)    

1429545782412 (3)

1429545782414 (2)

1429545782420 (6)

1429545782425 (5)

1429545782430 (5)

1429545782437 (7)

1429545782443 (6)

1429545782449 (6)

1429545782454 (5)

1429545782460 (6)

1429545782466 (6)

1429545782471 (5)

1429545782476 (5)

...

從列印出的資料可以看出,setinterval()的時間間隔為0ms時,輸出的時間差基本都在1~10ms之間,也是能在可以接受的範圍內。ie11下的測試與chrome的資料基本一致,而在firefox下能夠出現0的時間差。

其實不管是把時間間隔設定為0ms還是其他的時間間隔,執行時都會有時間誤差的,比設定的間隔多1~16ms毫秒左右,有的時候還會相差更多。

我們有時會在某個場合對標題進行閃動,提示給使用者當前標籤頁有新訊息產生:

var backup = document.title; //

儲存原標題

function

blink()

blink();

timer = setinterval(blink, 500);

上面的**能夠進行500ms的標題輪流閃動,當我們處在當前標籤頁時,基本感覺不出定時器產生的誤差。可是如果我們切換到其他的標籤頁或者最小化時,我們就能夠看到,標題的閃動變慢了很多,差不多提公升到1000ms左右了。

為了更加準確的記錄時間間隔的變化,我們特此將上面的**進行如下的補充,標題進行閃動時記錄當前的毫秒時間戳,同時標記出當前標籤頁可見時的狀態和不可見時的狀態【檢視演示】:

執行後,我們能夠看到程式記錄下的資料有(以下僅是部分資料):

1429547223336 (505)   

1429547223837 (501)

*****= 離開 *****=

1429547225296 (1459)

1429547226296 (1000)

1429547227296 (1000)

1429547228297 (1001)

++++++ 回來 ++++++

1429547229137 (840)

1429547229637 (500)

我們很清楚的看到,當標籤頁不可見時(「離開」後),時間差上公升了1000ms左右;標籤頁可見時(「回來」後),時間差又恢復到了500ms左右。不過在標籤頁剛切換完的時候,時間差的變化比較大,後來就趨於穩定了。其實瀏覽器為了在標籤頁不可見時減少cpu的利用率和電池等的消耗,特地將時間間隔進行提高。

不過這裡要指出的是,在ie11下,標籤的可見狀態不會影響定時器的時間間隔。

上面的**中,我們設定的時間間隔是500ms,標籤頁不可見時,時間間隔就會提公升到1000ms;如果我們把時間間隔設定到1500ms呢,2500ms,可以修改程式執行一下,是否能發現什麼規律。

javascript的定時器

a 用以指定在一段特定的時間後執行某段程式 b settimeout setinterval c 格式 定時器的物件名 settimeout 表示式 毫秒數 setinterval 也是一樣 d 功能 settimeout 執行表示式一次 setinterval 不斷重複執行,直至視窗 框架被關閉或...

JavaScript之 定時器

定時器是window物件提供的方法。1.設定定時器 settimeout 只執行一次。用於在指定的毫秒數後呼叫函式或計算表示式,返回乙個 id 數字 如 settimeout function 3000 setinterval 週期性執行。按照指定的週期 以毫秒計 來呼叫函式或計算表示式,返回乙個 ...

JavaScript中定時器函式的用法

最近寫了一些js指令碼,經常用到定時器,以下是我個人使用的一些總結。settimeout code,millisec code 定時器時間到了之後呼叫的函式 串 millisec 執行 前等待的毫秒數 型別1 定時器呼叫不帶引數的函式 function one 用法1 settimeout one,...