Zum Hauptinhalt springen

Die Hälfte von Velocity, die Nutzer spüren. Nichts davon macht den Server schneller.

Optimistische Mutation

Beide Spalten sprechen mit demselben simulierten Server. Die eine wartet darauf, die andere wendet die Absicht sofort an und gleicht danach ab.

Naiv

Blockiert 500ms pro Klick.

Velocity

Wendet sofort an; dieselbe Bestätigung nach 500ms folgt.

Nur für umkehrbare, vorhersehbare Aktionen. Zahlungen, Löschungen und Rechteänderungen sind niemals optimistisch — ein Rollback, das ein nie vorhandenes Recht wiederherstellt, ist schlimmer als Warten.

Absichtsbasiertes Preloading

Sechs Spekulationsstufen über SvelteKits eigene Auslöser. Die Attribute unten stammen aus dem Modul, sie sind nicht abgetippt.

AbsichtCodeDatenWofür
noneoffoffTeure, selten benutzte oder verändernde Links.
codeviewportoffEine teure Route: Chunk vorwärmen, den Server nichts kosten.
datahoverhoverDer Normalfall, passend zum app-weiten Hover-Standard.
code-dataviewporttapLinks mit hoher Wahrscheinlichkeit: Chunk früh, Daten beim Drücken.
idleoffoffVon preloadOnIdle gesteuert, sobald die Seite interaktiv ist — nicht von einem Attribut.

Daten werden nie allein durch Sichtbarkeit geladen. Auf einer Seite mit vierzig Links würde ein Viewport-Trigger vierzig Route-Loads für jemanden auslösen, der nur vorbeigescrollt ist.

Virtualisiertes Rendering

Eine lange Liste sollte so viel kosten wie das Sichtfeld, nicht wie die Datenmenge. Wechsle die Zeilenzahl und beobachte, was im DOM bleibt.

10000 Zeilen in den Daten, etwa 19 im DOM.

Bewusst nur einheitliche Zeilenhöhen: variable Höhen brauchen Messung und eine laufende Offset-Tabelle, und beides erzeugt Scroll-Sprünge. Pfeiltasten, Bild auf/ab, Pos1 und Ende bewegen eine wandernde Auswahl — die Zeilen, durch die man sonst tabben würde, existieren größtenteils nicht.

Geht dieses Pattern noch besser? Sag uns, wie.

Feedback geben