Profile, bevor du irgendetwas änderst: Nimm eine Tippsitzung auf und schau, ob die Zeit in die Filterberechnung, ins Rendern der Zeilen oder in Layout und Paint geht. Die üblichen Fixes, nach Wirkung sortiert, sind Virtualisierung, damit nur sichtbare Zeilen rendern, den gefilterten Wert mit useDeferredValue oder einer Transition verzögern, die Zeilen-Komponente memoisieren und den State des Inputs von der Liste trennen.
Warum Interviewer das fragen
Das ist eine Performance-Frage mit einer offensichtlich falschen Antwort, nämlich raten und überall useMemo streuen. Der Interviewer will einen Messen-zuerst-Ansatz sehen, korrektes Lesen der Profiler-Ausgabe und Wissen darüber, welcher Hebel in dieser Größenordnung wirklich zählt. Er will außerdem hören, dass du die zwei getrennten Probleme auseinanderhältst, ein Input, das klebt, und eine Liste, die zu lange rendert.
So baust du deine Antwort auf
- Sag, dass du zuerst misst, und nenn das Werkzeug.
- Teil das Problem auf: träges Tippgefühl gegen langsamen Listen-Render.
- Gib die Fixes nach Wirkung sortiert, mit Virtualisierung am Ende.
- Erwähn, dass du den Fix mit derselben Messung überprüfst.
Beispielantwort
Ich würde es im React Profiler und im Performance-Panel des Browsers aufzeichnen, bevor ich Code anfasse, denn es gibt drei verschiedene Ursachen, die sich identisch anfühlen. Ist der Commit riesig, sind es die Zeilen. Steckt die Scripting-Zeit in meiner Filterfunktion, sind es die Daten. Ist es Layout Thrashing, misst irgendwo etwas pro Zeile das DOM. Bei ein paar tausend Zeilen ist es in neun von zehn Fällen schlicht so, dass alle rendern, Virtualisierung ist also der große Gewinn, es rendert nur das sichtbare Fenster plus ein kleines Overscan. Obendrauf trenne ich die zwei Updates: Das Input bleibt dringend, damit sich Tippen sofort anfühlt, und das gefilterte Ergebnis läuft über eine Transition oder useDeferredValue, damit React veraltete Arbeit wegwerfen kann, sobald der nächste Tastendruck kommt. Die Zeilen-Komponente zu memoisieren hilft, sobald die Liste virtualisiert ist, davor deutlich weniger. Ich habe das an einer Kundenliste gemacht, die sich ab rund viertausend Zeilen unbenutzbar anfühlte, und Virtualisierung plus ein Deferred Value haben die Interaktion von etwa vierhundert Millisekunden auf unter sechzehn gebracht.
Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.
So funktioniert esNachfragen, mit denen du rechnen solltest
- Welchen Overscan-Wert würdest du wählen und warum?
- Wie wirkt sich Virtualisierung auf Barrierefreiheit und die Seitensuche des Browsers aus?
- Würdest du das Filtern auf den Server verlagern, und ab wann?
Weitere Fragen für React-Entwickler
Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.
Meine Fragen vorhersagen