setInterval будет дрейфовать?

Одна точка с запятой является операцией NOP:

if(cond0) { /*...*/ }
else if(cond1) ;  //is correct and does nothing 
else { /*...*/} 

Оператор запятой:

a = (++i, k);  //eq: ++i; a = k;
38
задан Deniz Dogan 12 June 2009 в 08:53
поделиться

2 ответа

Вот тест, который вы можете запустить в Firefox:

var start = +new Date();
var count = 0;
setInterval(function () {
    console.log((new Date() - start) % 1000,
    ++count,
    Math.round((new Date() - start)/1000))
}, 1000);

Первое значение должно быть как можно ближе к 0 или 1000 (любое другое значение показывает, насколько «не на месте» время триггера было.) Второе значение - это количество раз, когда код был запущен, а третье значение - сколько раз могло должно было сработать. Вы заметите, что если вы перегружаете свой процессор, он может выйти из строя, но, похоже, он исправляется.

20
ответ дан 27 November 2019 в 03:46
поделиться

Краткий ответ: Нет, вы не можете быть уверены. Да, это может дрейфовать.

Длинный ответ: Джон Ресиг о Точности времени JavaScript и Как работают таймеры JavaScript .

Из второй статьи:

In Чтобы понять, как таймеры работают внутри, необходимо изучить одну важную концепцию: задержка таймера не гарантируется. Поскольку весь JavaScript в браузере выполняется в одном потоке, асинхронные события (такие как щелчки мышью и таймеры) запускаются только тогда, когда в их исполнении было открытие.

Обе статьи (и все на этом сайте) отлично читаются, поэтому

33
ответ дан 27 November 2019 в 03:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: