// Throttle updates for performance (update every 200ms max) textarea.addEventListener('input', () => const now = Date.now(); if (now - lastUpdate > 200) lastUpdate = now; updateStats(); else // still update but async for smoothness requestAnimationFrame(() => updateStats());
resetBtn.addEventListener('click', resetCounter); words per minute
// If text is empty, reset timer if (charCount === 0) startTime = null; timeSpan.textContent = '0'; wpmSpan.textContent = '0'; return; // Throttle updates for performance (update every 200ms