Blog

Core Web Vitals: was INP wirklich misst, und wie scheduler.yield() den Hauptthread rettet

Im Artikel über Mikrointeraktionen schrieb ich, dass transform und opacity auf dem Compositor-Thread animiert werden, sodass selbst eine schwere Seite die Button-Animation nicht zum Stocken bringen sollte. Das stimmt weiterhin – mit einer Einschränkung, über die jener Artikel schwieg: Ist der Hauptthread durch eine lange JS-Aufgabe blockiert, bekommt die Animation womöglich nie die Chance zu starten, weil schon der Klick-Handler in der Warteschlange wartet. INP ist die Metrik, die genau diese Lücke misst – und scheduler.yield() ist eines der wenigen Mittel, sie wirklich zu schließen.

Optimistic UI in React: die Oberfläche, die bewusst lügt

Der „Gefällt mir"-Button reagiert sofort, das Herz füllt sich, der Zähler steigt – noch bevor der Server überhaupt geantwortet hat. Das ist nicht die Geschwindigkeitsillusion aus dem Artikel über Mikrointeraktionen, das geht weiter: Die Oberfläche zeigt einen Zustand, der noch nicht existiert, und nimmt an, dass er gleich existieren wird. Ich schaue mir an, wie man das sicher baut – mit einem echten Rückzug aus der Lüge, wenn sich die Annahme nicht bestätigt, und warum manuelles setState plus catch die schlechtere Variante dessen ist, was useOptimistic bietet.

Animierte Mikrointeraktionen im E-Commerce

Zwei Shops, dasselbe Produkt, dieselbe Server-Antwortzeit – und trotzdem wirkt der eine schneller und vertrauenswürdiger. Der Unterschied liegt in Mikrointeraktionen: ein paar hundert Millisekunden Animation, die darüber entscheiden, ob Nutzer dem trauen, was sie auf dem Bildschirm sehen. Ich zerlege sie bis auf die Grundlagen – Trigger/Feedback-Modell, was im Rendering-Prozess des Browsers wirklich passiert, und prefers-reduced-motion.