Web Foundations

Timing and Microtasks

setTimeout, setInterval, requestAnimationFrame, and microtask queue.

Advertisement

Timing and Microtasks

setTimeout, setInterval, requestAnimationFrame, and microtask queue.

Overview

JavaScript timing functions control code execution timing.

Key Concepts

  • setTimeout — Delay execution
  • setInterval — Repeat execution
  • requestAnimationFrame — Optimize animations
  • Microtasks — Promise callbacks
  • Event Loop — Task and microtask execution order

Code Examples

<div id="output"></div>
<button id="start">Start Timing Demo</button>

<script>
const output = document.getElementById('output');

function log(message) {
  output.innerHTML += `<div>${message}</div>`;
}

document.getElementById('start').addEventListener('click', () => {
  output.innerHTML = '';
  
  log('1. Synchronous start');
  
  setTimeout(() => log('5. setTimeout (0ms)'), 0);
  setTimeout(() => log('6. setTimeout (100ms)'), 100);
  
  Promise.resolve().then(() => log('3. Promise resolved'));
  
  requestAnimationFrame(() => log('4. requestAnimationFrame'));
  
  log('2. Synchronous end');
});

// Debounce function
function debounce(func, wait) {
  let timeout;
  return function executedFunction(...args) {
    const later = () => {
      clearTimeout(timeout);
      func(...args);
    };
    clearTimeout(timeout);
    timeout = setTimeout(later, wait);
  };
}

// Throttle function
function throttle(func, limit) {
  let inThrottle;
  return function(...args) {
    if (!inThrottle) {
      func.apply(this, args);
      inThrottle = true;
      setTimeout(() => inThrottle = false, limit);
    }
  };
}

// Usage
const debouncedSearch = debounce((query) => {
  console.log('Searching:', query);
}, 300);

const throttledScroll = throttle(() => {
  console.log('Scroll position:', window.scrollY);
}, 100);

document.getElementById('search').addEventListener('input', (e) => {
  debouncedSearch(e.target.value);
});

window.addEventListener('scroll', throttledScroll);
</script>

Practice

Implement a countdown timer using setTimeout and visual feedback.

Advertisement