setInterval最短極限有多快?

2021-10-08 12:26:51 字數 968 閱讀 8791

在幾年前的一次測試裡,幾乎所有瀏覽器的定時器最短間隔都是64/1000秒,於是我預設了這個答案。但在今天無意中去測試了下,發現結果大不一樣,所以要更新下過去的結論。

平時我們為了最頻繁的速度執行某段**,一般都寫成setinterval(***, 1)。雖然明知是達不到1ms的間隔的,但我們總希望瀏覽器能盡可能快些。但瀏覽器究竟能到達多快呢?我們寫個計數器測試下:

var n = 0;

var max = 0;

function tick()

function report()

setinterval(tick, 1);

setinterval(report, 1000);

在ie裡,仍然是那經典的數字:64,每15.625ms觸發一次。當然這並不是瀏覽器的bug,如果你做過windows程式開發的話,應該知道settimer api的精度是很低的,差不多每秒64次,顯然ie裡是用了這個。這意味著如果你要做動畫或者遊戲的話,最高的fps可以到達64。不過對於如今清一色的液晶顯示器來說,這個速度還是足夠了,因為液晶只有60hz的重新整理率。事實上,實際應用中能達到64的fps已是相當不錯了,畢竟一次複雜的渲染要控制在16ms內,還是比較有挑戰的。而且64fps也遠超人眼的分辨,給人的感覺已是非常平滑了。

當然,上述只代表ie的測試結果。事實上其他的瀏覽器在一次次更新後,如今已是各不相同了。下面列出了在各個瀏覽器下,測試了一段時間後記錄到的最大值:

ie: 64

firefox: 75

opera: 512

safari: 94

chrome: 207

顯然,用setinterval(***, 1)來追求最快的渲染是很不合理的,不僅浪費了大量的資源,而且在不同的瀏覽器下表示出的速度也各不一樣。因此對於簡單的介面渲染,用最簡單的辦法就是setinterval(***, 17)或者再高點。如果是複雜的介面,那就得自己維護乙個定時器,並且控制跳幀了。

setInterval與setTimeout的區別

說明 setinterval與settimeout都是dhtm window物件的方法 區別 setinterval 表示式,時間 頁面載入後,每經過指定毫秒值後執行指定表示式,是間隔多次執行的 settimeout 表示式,時間 頁面載入後,經過指定毫秒值後執行指定表示式,只執行一次 附述 可以通...

關於setInterval 定時

最近專案中,遇到個需求就是獲取停車場剩餘車位數量,想是通過ajax定時抓取介面資料來實現 本想通過signalr 但是專案本身直供少數人使用,感覺定時ajax可以滿足 下面上 var handle 定義標識,防止重複執行setinterval document ready function hand...

setInterval和setTimeout的區別

settimeout遞迴執行的 必須是上一次執行完了並間格一定時間才再次執行 比仿說 settimeout延遲時間為1秒執行,要執行的 需要2秒來執行,那這段 上一次與下一次的執行時間為3秒.而不是我們想象的每1秒執行一次.setinterval是排隊執行的 比仿說 setinterval每次執行時...