Как setInterval обрабатывает функции обратного вызова, которые занимают больше времени, чем желаемый интервал?
Я считал, что обратный вызов может получить количество миллисекунд поздно как его первый аргумент, но я был неспособен найти, почему будет поздно (дрожание или длительные функции).
И замечательные продолжают, это ведет себя по-другому для общих браузеров?
Позвольте мне процитировать отличную статью о таймерах Джона Резига:
setTimeout(function(){
/* Some long block of code... */
setTimeout(arguments.callee, 10);
}, 10);
setInterval(function(){
/* Some long block of code... */
}, 10);
Эти два кода могут показаться так. сначала быть функционально эквивалентным взгляд, но это не так. Примечательно, что setTimeout код всегда будет на с задержкой не менее 10 мс после предыдущего выполнение обратного вызова (может закончиться больше, но никогда не меньше) в то время как SetInterval попытается выполнять обратный вызов каждые 10 мс независимо от того, когда последний звонок было выполнено.
Интервалы могут выполнять back-to-back без задержки, если они занимают достаточно много времени для выполнения (дольше указанной задержки).