Blitzschnelle Domain-Vorschläge: Die Kunst des Sofortigen
Wie ich eine Domain-Suche gebaut habe, die sich wie Magie anfühlt
Du kennst das bestimmt: Du tipnst irgendwo etwas ein und VOR dem zweiten Tastendruck erscheint schon der richtige Vorschlag. Sieht aus wie Zauberei, ist aber reine Ingenieurskunst. Vor allem, wenn du 240 Millionen Domains im Hintergrund verwalten musst.
Warum jede Millisekunde zählt
Wenn jemand in ein Suchfeld tippt, erwartet er sofort Ergebnisse. Nielsen Norman Group hat herausgefunden, dass 0,1 Sekunden die Grenze sind. Alles, was länger dauert, fühlt sich zäh an und reißt den Nutzer aus seinem Denkfluss.
Bei Wirewiki – einem Tool zur DNS-Abfrage – ist die Autovervollständigung das Herzstück. Der Nutzer will das Gefühl haben, das Tool liest seine Gedanken. Nicht, dass er auf einen Server wartet.
Der Trick mit dem Vorabladen
Das Schöne daran: Der eigentliche Trick hat nichts damit zu tun, die API schneller zu machen. Obwohl das natürlich hilft. Nein – der Clou ist, Zeit vom Tastendruck selbst zu klauen.
Beim keyDown-Event lädst du Vorschläge für das, was der Nutzer gerade tippt PLUS das vermutlich nächste Zeichen. Beim keyUp-Event zeigst du an, was bereits bereitsteht. So wird dein Zeitbudget nicht die API-Latenz, sondern die Dauer von zwei Tastendrücken plus der Pause dazwischen.
Bei 60Hz bleiben dir 16,7 Millisekunden pro Frame. Für schnelle Tipper bei p99 ergibt das etwa 121 Millisekunden. Das ist dein Fenster. Liefern die Ergebnisse, bevor der zweite Tastendruck endet, empfindet der Nutzer das als sofortig.
Performant auch bei 240 Millionen Einträgen
Die API muss 240 Millionen Domains verwalten, ohne ins Schwitzen zu kommen. Der Trick: Beliebte Domains werden anders behandelt als der lange Rest.
Die Spitze: Top-Domains liegen in einem Trie im Arbeitsspeicher. Präfix-Suchen sind nur Zeiger-Sprünge – schnell und vorhersagbar. Die acht besten Vorschläge für jedes denkbare Präfix sind vorberechnet. Im schlimmsten Fall? O(Länge der Eingabe). Also quasi nix.
Der Rest: Alles andere liegt auf einer SSD mit einem speicherabgebildeten Block-Index. Domains sind sortiert, delta-komprimiert und in festen Blöcken organisiert. Eine kleine Verzeichnisstruktur im RAM ermöglicht binäre Suche. Die 240 Millionen Domains belegen etwa 2,5 GB, und das Betriebssystem cached automatisch die heißen Seiten.
Beide Strukturen haben begrenzte Eingaben – weder die Domain-Anzahl noch die Abfragelänge wachsen unbegrenzt. Das macht die effektive Komplexität praktisch O(1) und hält die p99-Latenz konstant niedrig.
Die Zahlen sprechen für sich
Lasttests zeigten Erstaunliches: Die API selbst beantwortet die meisten Anfragen in unter 2 Millisekunden. Selbst unter Volllast bei 1.600 Requests pro Sekunde antwortet Nginx plus API in 15ms bei p99. Solide.
Aber dann kommt die Realität: das Netzwerk. Die tatsächliche Latenz ist die Round-Trip-Zeit vom Browser über Cloudflare zum Server, plus etwa 10ms Overhead. Nutzer in der gleichen Region? Kein Problem. Alle anderen? Da taucht der Stern auf.
Der Stern
p99 0ms* bedeutet: 99% der Anfragen liefern Ergebnisse, BEVOR der Nutzer seinen Tastendruck beendet – vorausgesetzt, er ist nah am Server. Addiere 100–200ms transatlantische Latenz, und plötzlich bist du über dem Budget.
Die Lösung wären geo-verteilte Server mit Load Balancing. Aber für ein Nebenprojekt? Da kommt einiges an Infrastruktur zusammen. Manchmal reicht "gut genug" eben doch – besonders wenn die Zielgruppe europäische Entwickler sind, die Domains checken.
Was du für dein nächstes Projekt mitnimmst
Die wichtigste Lektion geht weit über Domain-Suchen hinaus: Vorab laden, aber schlau. Wenn du weißt, was Nutzer als nächstes suchen könnten, lade es, bevor sie danach fragen. Lass die UI auf das reagieren, was bereitsteht – nicht darauf warten, dass alles 100% sicher ist.
Die zweite Lektion betrifft die Datenstruktur. Ein Trie für heiße Daten, ein gut indizierter sortierter Aufbau für den Rest. Du musst nicht 240 Millionen Einträge im RAM halten, wenn du deine Zugriffsmuster um das actually Wahrscheinliche herum gestaltest.
Und schließlich: Miss dein tatsächliches Budget. Hier waren es zwei Tastendrücke plus Lücke. Was ist dein Äquivalent? Finde es heraus, optimiere dafür – und hör auf, darüber hinaus zu optimieren.
Das Ergebnis fühlt sich an wie Magie. Aber es beginnt damit, genau zu verstehen, wie viel Zeit du tatsächlich hast.