First Input Delay bemisst nicht – wie man vielleicht annehmen könnte – die Zeit bis zur Reaktion der Website auf eine Aktion des*r User*in, sondern genau genommen nur die Zeit vom Auslösen des Events (z.B. „click“) bis zur nächsten Idle-Time des Main-Threads. Also bis zum Zeitpunkt, wenn der Main-Thread Luft hat auf das Event zu reagieren. FID berücksichtigt nicht wie lange für die Reaktion auf das Event gebraucht wird oder wie lange es dauert anschließend einen Re-Paint auszuführen.

FID ist eine Metrik, die sich nur in RUM-Data findet, weil eine Aktion des*r Nutzers*in nötig ist. Häufig wird darauf verwiesen, dass für Lab-Tests die TBT-Metrik (Total Blocking Time) herangezogen werden kann, da ein verbesserter TBT-Wert auch dem FID dient.

Guter FID, aber schlechter TBT?

In den Mobil-Ergebnissen von beispielsweise PageSpeed Insights kann die Verbindung zwischen FID und TBT zu Verwirrung führen, wenn man im Field-Data-Bereich einen guten FID-Wert hat, aber im Lab-Data-Bereich einen (sehr) schlechten TBT-Wert. Die Field-Data kommen direkt von echten Benutzer*innen, welche je nach Zielgruppe durchaus gute Endgeräte und schnelle Verbindungen haben können, weshalb der FID-Wert gut ist. Field-Data hat nichts mit dem aktuellen Test zu tun! Lab-Data hingegen sind die Ergebnisse des gerade eben ausgelösten Testlaufs – PageSpeed Insights lässt hierfür einen Test mit dem Tool Lighthouse laufen. Für die Mobil-Simulation arbeitet Lighthouse mit einer Drosselung der Verbindung, was zu den starken Differenzen zwischen Field- und Lab-Data führen kann.

Wieso ist mein FID schlecht?

Das kann sehr unterschiedliche Gründe haben. Generell tragen viele zu ladende Ressourcen (3rd-Party und 1st-Party) und Long-Running-Tasks im JavaScript zu einem erhöhten FID bei. Handelt es sich bei der Website beispielsweise um eine Nachrichtenseite, auf der User*innen eh erstmal nur scrollen und Text lesen und längere Zeit vergeht, bis das erste Mal eine Aktion ausgeführt wird, kann trotz viel 3rd-Party-Code ein niedriger FID-Wert erzielt werden, weil der Browser bis zum Zeitpunkt der Aktion schon wieder einen gelangweilten Main-Thread hat.