![](/img/trans.png)
[英]What is the value of "this" within an anonymous function in setTimeout below?
[英]What is minimum millisecond value of setTimeout?
我想放
var minValue = 0;
if ( typeof callback == 'function' ) {
setTimeout( callback, minValue );
}
當我使用JavaScript實現回調函數時,此代碼。
但是我發現現代的瀏覽器和一些舊的瀏覽器
具有不同的最小超時值。
我知道零不能是最小值。
setTimeout的最小值是多少
現代瀏覽器和某些舊版瀏覽器是否存在兼容性問題?
我認為10是所有瀏覽器中最可靠的最小值,因為我已經看到很多使用它的代碼。
但是, HTML5最少需要4毫秒
實際上,HTML5規范指定了4毫秒,並且在2010年及以后發布的瀏覽器中保持一致。 在(Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)之前,嵌套超時的最小超時值為10 ms。
在現代瀏覽器中,最小值為4毫秒(從HTML5開始),在此之前為10毫秒。 請注意,這些時間永遠不會100%准確。
setTimeout
最有可能調用sleep
或Sleep
系統調用 。
setTimeout
的實際機制(包括最短毫秒)是專有的和/或系統相關的,因為它們不在ECMA官方規范中。 它取決於Javascript運行時以及運行它的系統。 給定的是,您的Javascript運行時不會增加很多開銷,最小毫秒數由操作系統和硬件的時間片分辨率確定。 最小的“可睡眠”時間通常是系統的調度算法將進程分配給另一個時間片所花費的時間 。
例如,在Windows(XP后)上, 睡眠系統調用的文檔顯示:
值為零會導致線程將其時間片的其余部分放棄給准備運行的任何其他線程。 如果沒有其他線程可以運行,該函數將立即返回,並繼續執行該線程。
這意味着,在某些極為罕見的情況下,當前沒有其他進程正在等待運行Javascript運行時進程的硬件線程 ,它可能在調用者執行完后立即繼續運行,具體取決於Javascript運行時的方式被實施。 您可能不會經常觀察到這種情況:)
本文測試Firefox,Safari和Opera,並繪制性能圖:
http://ejohn.org/blog/analyzing-timer-performance/
Firefox 2,Opera和Safari的底部都有10毫秒的延遲窗口
對於較舊的瀏覽器,您可以像該文章中那樣進行測試。 我剛剛使用IE6中的10ms間隔運行了一段時間前的setInterval
進行的測試,平均得到了55ms 。 setTimeout
似乎更低,為35ms 。
我在Chromium中進行了測試,並在10ms的超時時間內獲得了平均11ms的時間。 我以4ms和1ms的間隔嘗試了一下,兩者都達到了〜4.5ms 。 另外,請記住,數字在操作系統之間可能會有所不同。
如果您有興趣,這里是測試代碼:
<script>
// number of times to call setTimeout before calculating average
var ITERATIONS = 200;
window.onload = function()
{
testTimeout(10, +new Date, 0, 0);
}
// calls setTimeout repeatedly at a specified interval, tracking the amount
// of time that passes between successive calls
function testTimeout(interval, last, sum, ii)
{
var time = +new Date;
var difference = time - last;
sum += difference;
if (ii % ITERATIONS == 1)
{
document.body.innerHTML = sum / ITERATIONS;
sum = 0;
}
window.setTimeout(
function() {
testTimeout(interval, time, sum, ii + 1)
}, interval);
}
</script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.