В чем причина того, что JavaScript setTimeout такой неточный?
Я получил этот код здесь:
var date = new Date();
setTimeout(function(e) {
var currentDate = new Date();
if(currentDate - date >= 1000) {
console.log(currentDate, date);
console.log(currentDate-date);
}
else {
console.log("It was less than a second!");
console.log(currentDate-date);
}
}, 1000);
В моем компьютере это всегда выполняется правильно, с 1000 на выходе консоли. Заинтересован в другом компьютере, тот же код, время ожидания обратного вызова начинается менее чем за секунду, и разницаcurrentDate - date
между 980 и 998.
Я знаю существование библиотек, которые решают эту неточность (например,Tock).
В основном мой вопрос:Каковы причины, потому чтоsetTimeout
не срабатывает в заданную задержку? Может ли это быть компьютер, который работает слишком медленно, и браузер автоматически пытается адаптироваться к медленности и запускает событие раньше?
PS: Вот скриншот кода и результатов, выполненных в консоли Chrome JavaScript: