Zum Inhalt springen

JavaScript setTimeout und setInterval

In JavaScript sind Timing-Funktionen entscheidend, um Web-Apps dynamisch und interaktiv zu gestalten. setTimeout() und setInterval() sind wichtig, um den Ausführungszeitpunkt von Code zu steuern. Dieser Leitfaden behandelt diese Funktionen im Detail und bietet praktische Tipps sowie Code-Beispiele für eine effektive Nutzung.

Einführung in JavaScript-Timing-Funktionen

JavaScript, das für die Webentwicklung unverzichtbar ist, verfügt über Timing-Funktionen, die Code zu festgelegten Zeiten ausführen. Besonders nützlich zur Aufgabenplanung sind hier setTimeout und setInterval.

Die setTimeout()-Funktion

Die Funktion setTimeout() ermöglicht es, einen Codeblock einmal nach einer angegebenen Verzögerung auszuführen. Sie akzeptiert zwei Parameter: eine auszuführende Funktion und eine Verzögerung in Millisekunden vor der Ausführung.

Syntax:


javascript
setTimeout(function, delay);

Beispiel:


Output appears here after Run.

Die setInterval()-Funktion

Im Gegensatz dazu führt setInterval() eine Funktion wiederholt in einem angegebenen Intervall aus. Wie setTimeout() akzeptiert sie eine Funktion und eine Verzögerung in Millisekunden. Beachten Sie, dass Ausführungen überlappen oder sich verschieben können, wenn ein Callback länger dauert als das Intervall. Für präzise Timing-Anforderungen sollten Sie stattdessen setTimeout() rekursiv verwenden.

Syntax:


javascript
setInterval(function, interval);

Beispiel:


Output appears here after Run.

Abbrechen geplanter Ausführungen

JavaScript bietet außerdem Methoden zum Abbrechen der von setTimeout() und setInterval() geplanten Ausführungen, nämlich clearTimeout() und clearInterval().

Abbrechen von setTimeout():

Um einen Timeout abzubrechen, speichern Sie die von setTimeout() zurückgegebene ID und übergeben Sie sie an clearTimeout().

Beispiel:


Output appears here after Run.

Abbrechen von setInterval():

Ebenso speichern Sie zur Beendigung eines Intervalls die ID von setInterval() und verwenden sie mit clearInterval().

Beispiel:


Output appears here after Run.

Praktische Anwendungen und Tipps

Das Verständnis und die Nutzung von setTimeout() und setInterval() gehen über die grundlegende Syntax hinaus. Hier sind einige fortgeschrittene Tipps und Best Practices für eine effektive Anwendung:

  • Debouncing mit setTimeout(): Debouncing ist eine Technik, um die Ausführungshäufigkeit einer Funktion zu begrenzen. Dies ist besonders nützlich bei Szenarien wie Sucheingaben, bei denen Sie keine API-Anfrage bei jeder Tastatureingabe auslösen möchten.

html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Debounced Input Example</title>
<script>
    // Debounce function to limit the rate at which a function is executed
    function debounce(func, wait) {
        let timeout;

        return function executedFunction(...args) {
            const later = () => {
                clearTimeout(timeout);
                func(...args);
            };

            clearTimeout(timeout);
            timeout = setTimeout(later, wait);
        };
    }

    // Function to be debounced
    function fetchData(input) {
        alert(`API call with input: ${input}`); // Placeholder for an API call
    }

    // Create a debounced version of fetchData
    const debouncedFetchData = debounce(fetchData, 300);

    // Add the debounced function to an event listener
    function setup() {
        document.getElementById('searchInput').addEventListener('input', (event) => {
            debouncedFetchData(event.target.value);
        });
    }

    // Ensure setup is called once the document is fully loaded
    document.addEventListener('DOMContentLoaded', setup);
</script>
</head>
<body>
    <h3>Type in the input field:</h3>
    <input type="text" id="searchInput" placeholder="Start typing..." />
</body>
</html>

Result

  • Throttling mit setTimeout(): Throttling stellt sicher, dass eine Funktion höchstens alle angegebenen Millisekunden einmal ausgeführt wird. Dies kann nützlich sein, um Scroll-Ereignisse zu verarbeiten, ohne die Event-Loop des Browsers zu überlasten. Beachten Sie, dass das folgende Beispiel einen Leading-Edge-Ansatz verwendet (sofortige Ausführung beim ersten Aufruf), der im Vergleich zu Trailing-Edge-Alternativen nicht für alle Anwendungsfälle geeignet sein könnte.

html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Throttled Scroll Event</title>
<style>
  /* Simple styling for demonstration */
  body, html {
    height: 200%; /* Make the page scrollable */
    margin: 0;
    padding: 0;
    font-family: Arial, sans-serif;
  }
  #log {
    position: fixed;
    top: 0;
    left: 0;
    background: white;
    border: 1px solid #ccc;
    padding: 10px;
    width: 300px;
  }
</style>
</head>
<body>
<div id="log">Scroll to see the effect...</div>
<script>
// Throttle function using setTimeout
function throttle(func, limit) {
  let lastFunc;
  let lastRan;
  return function() {
    const context = this;
    const args = arguments;
    if (!lastRan) {
      func.apply(context, args);
      lastRan = Date.now();
    } else {
      clearTimeout(lastFunc);
      lastFunc = setTimeout(function() {
        if ((Date.now() - lastRan) >= limit) {
          func.apply(context, args);
          lastRan = Date.now();
        }
      }, Math.max(0, limit - (Date.now() - lastRan)));
    }
  }
}

// Function to be throttled
function handleScroll() {
  const log = document.getElementById('log');
  log.textContent = `Scroll event triggered at: ${new Date().toLocaleTimeString()}`;
}

// Add event listener for scroll
window.addEventListener('scroll', throttle(handleScroll, 1000));
</script>
</body>
</html>

Result

  • Verzögerungen durch die Event Loop: Beachten Sie, dass die Verzögerungen bei setTimeout() und setInterval() Mindestwerte sind. Die tatsächliche Ausführung kann verzögert werden, wenn die JavaScript-Event-Loop ausgelastet ist oder der Browser Hintergrund-Tabs drosselt.
  • Maximale Verzögerungsgrenzen: Die JavaScript-Spezifikation begrenzt Verzögerungen über 2147483647 (2^31 - 1) Millisekunden auf 1. Verzögerungen außerhalb dieses Bereichs warten nicht länger; sie werden fast sofort ausgeführt.
  • Einsatz in Webanwendungen: Diese Timing-Funktionen können die Benutzererfahrung verbessern, indem sie Animationen hinzufügen, zeitbasierte Aktionen verarbeiten (wie das automatische Speichern von Formular-Eingaben) und asynchrone Operationen effektiver verwalten.

Fazit

Die Beherrschung von setTimeout() und setInterval() ist für jeden JavaScript-Entwickler entscheidend. Diese Funktionen sind unverzichtbar für die Aufgabenplanung und tragen dazu bei, Webanwendungen dynamisch und reaktionsschnell zu gestalten. Durch die Anwendung der Praktiken und Beispiele in diesem Leitfaden können Entwickler zeitgesteuerte Aufgaben effektiv verwalten, was sowohl die Anwendungsleistung als auch die Benutzererfahrung verbessert.

Praxis

Welche der folgenden Aussagen treffen auf die Verwendung von `setTimeout()` und `setInterval()` in JavaScript zu?

Finden Sie das nützlich?

Dual-run-Vorschau — vergleichen Sie mit den Symfony-Routen live.