Функция setInterval() в JavaScript не гарантирует точное выполнение кода по таймеру. doka.guide Несколько причин, почему это может происходить:
- Загрузка процессора. learnjs.ru При слишком большой загрузке JavaScript может не успевать обрабатывать таймеры вовремя, из-за чего некоторые запуски setInterval() будут пропущены. maxello.gitbooks.io
- Неактивная вкладка. basicweb.ru learnjs.ru Чтобы уменьшить нагрузку с фоновых вкладок, таймеры регулируются так, что срабатывают не чаще одного раза в секунду. basicweb.ru
- Долгое выполнение функции. maxello.gitbooks.io doka.guide Если функция сложная и занимает больше времени, чем задержка, то она становится в очередь и выполняется, как только браузер освободится. maxello.gitbooks.io
- Вложенность интервалов. developer.mozilla.org Обработчик setInterval() может, в свою очередь, вызывать setInterval() и запускать новый интервал, даже если первый ещё продолжается. developer.mozilla.org
Если есть вероятность, что выполнение логики займёт больше времени, чем интервал времени, рекомендуется использовать вместо setInterval() метод setTimeout(). basicweb.ru developer.mozilla.org