Какие знаешь таймеры

Ответ

В JavaScript есть несколько способов работы с таймерами:

  1. setTimeout - выполняет функцию один раз через указанное время:
setTimeout(() => {
  console.log('Выполнится через 1 секунду');
}, 1000);
  1. setInterval - повторяет выполнение функции с указанным интервалом:
const interval = setInterval(() => {
  console.log('Повторяется каждую секунду');
}, 1000);

// Для остановки:
clearInterval(interval);
  1. requestAnimationFrame - оптимизирован для анимаций, синхронизируется с частотой обновления экрана:
function animate() {
  // Анимация
  requestAnimationFrame(animate);
}
animate();

Важные нюансы:

  • Таймеры в браузере могут задерживаться из-за вкладки в фоновом режиме или нагрузки процессора
  • Минимальная задержка для setTimeout/setInterval - 4мс (в соответствии со спецификацией)
  • Для точных интервалов лучше использовать performance.now() и корректировать время вручную

Ответ 18+ 🔞

Слушай, ну это ж классика, про таймеры в JavaScript! Как эти ваши будильники, которые звонят, когда им вздумается, а не когда надо. Ну ладно, поехали разбираться, пока не началось.

setTimeout — это как одноразовый поджиг, блядь. Сказал «через секунду», и всё, бабахнуло один раз и свободен. Хули тут думать?

setTimeout(() => {
  console.log('Выполнится через 1 секунду'); // И ведь правда выполнится, если повезёт, сука
}, 1000);

А вот setInterval — это уже наш, родной, заёбистый будильник, который долбит в ухо каждую секунду, пока не вырвешь ему батарейки. Совсем охренел!

const interval = setInterval(() => {
  console.log('Повторяется каждую секунду'); // Да заткнись ты, нахуй!
}, 1000);

// Чтобы этот ад прекратить, надо его пристрелить:
clearInterval(interval);

Ну а requestAnimationFrame — это для гламурных пидоров, которые анимации делают. Он синхронизируется с монитором, чтобы всё плавненько было, без рывков. Красота, блядь, одним словом.

function animate() {
  // Тут что-то крутится-вертится
  requestAnimationFrame(animate); // И пошло-поехало до скончания времён
}
animate();

А теперь, внимание, главная хуйня, которую все забывают! Эти таймеры — они ненадёжные, как последняя падла. Браузер их может тормозить, если вкладка не активна, или если система грузится. Минимальная задержка у них, по бумажке, 4 мс, но на деле — когда захотят, тогда и сработают, пиздец.

Так что если тебе нужна точность до микрона, как у швейцарских часов, забей на setInterval. Бери performance.now(), считай время вручную и корректируй, как настоящий садомазохист. Волнение, блядь, на нуле, а терпения и вовсе ебать ноль.

Вот и вся магия, ёпта. Не так страшен чёрт, как его малюют, ага.