Debounce in Vanilla JavaScript – ohne Bibliothek
Eine Suche, die bei jedem Tastendruck feuert, überlastet den Server. Mit einer kleinen debounce-Funktion wartest du, bis der Nutzer kurz Pause macht – in wenigen Zeilen, ganz ohne Framework.
Ein Klassiker: Du hast ein Suchfeld, das bei jedem Tastendruck eine Anfrage schickt. Tippt jemand „Berlin", sind das schon sechs Anfragen. Mit Debounce wartest du, bis kurz nichts mehr passiert, und feuerst erst dann. Dafür brauchst du keine Bibliothek – ein Timer reicht.
Die Funktion
debounce gibt eine neue Funktion zurück, die einen laufenden Timer bei jedem Aufruf zurücksetzt. Erst wenn wait Millisekunden lang Ruhe herrscht, läuft die eigentliche Funktion.
function debounce(fn, wait = 300) {
let timer;
return function (...args) {
clearTimeout(timer);
timer = setTimeout(() => fn.apply(this, args), wait);
};
}Anwenden
const input = document.querySelector('#suche');
const suche = debounce((event) => {
const q = event.target.value.trim();
if (q.length < 2) return;
console.log('Suche nach:', q);
// hier z. B. fetch(`/api/suche?q=${encodeURIComponent(q)}`)
}, 400);
input.addEventListener('input', suche);Tippt jemand jetzt zügig „Berlin", passiert genau eine Suche – 400 Millisekunden nach dem letzten Tastendruck. Das entlastet deinen Server und macht die Oberfläche ruhiger.
Kleiner Hinweis zur Abgrenzung: Debounce wartet auf eine Pause. Willst du stattdessen höchstens alle X Millisekunden feuern (etwa beim Scrollen), brauchst du Throttle – ein verwandtes, aber anderes Muster.
Solche kleinen Performance-Kniffe stecken in jeder Website, die ich baue. Wenn du eine schnelle, moderne Seite brauchst, schau auf bymw.de vorbei.
Quellen
Du brauchst mehr als ein Snippet?
Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.
Projekt anfragen →Verwandte Snippets
Web Worker – rechnen, ohne die Oberfläche einzufrieren
JavaScript hat im Browser genau einen Faden für alles: Klicks, Animationen, Layout – und deine Rechenschleife. Dauert die zwei Sekunden, ist die Seite zwei Sekunden lang tot. Ein Worker nimmt die Arbeit auf einen eigenen Faden.
CustomEvent – Bausteine, die sich gegenseitig Bescheid sagen, ohne sich zu kennen
Sobald zwei Teile einer Seite aufeinander reagieren sollen, landet man schnell bei globalen Variablen oder Funktionsaufrufen quer durchs Projekt. Eigene Events entkoppeln das – mit denselben Mitteln, die der Browser selbst benutzt.
Formulare ohne Neuladen abschicken – FormData und fetch
Ein Formular per JavaScript abzuschicken heißt nicht, jedes Feld einzeln auszulesen. FormData nimmt das ganze Formular, fetch schickt es weg – inklusive Dateien, und mit einer Fehlermeldung, die der Besucher versteht.