Registrieren Sie sich an einer bewussten Lebenszyklusgrenze
Vermeiden Sie das Anhängen eines Fenster-Keydown-Handlers aus einer Renderfunktion oder jedem Frame. Fügen Sie das szenenspezifische Setup in eine Start- oder Mount-Funktion ein und stellen Sie sicher, dass die Funktion nicht zweimal ohne Bereinigung ausgeführt werden kann. Behalten Sie einen Verweis auf den Rückruf bei, wenn Sie „removeEventListener“ verwenden. Wiederholt erstellte anonyme Rückrufe lassen sich später nur schwer zuordnen. Alternativ können Sie einer Gruppe verwandter Handler einen AbortController geben und dessen Signal in den Listener-Optionen übergeben und dann diese Gruppe abbrechen, wenn die Szene endet.
Wählen Sie Veranstaltungsziele sorgfältig aus. Ein globaler Fenster-Listener kann für Tasten geeignet sein, während ein Spiel aktiv ist, aber der Click-Handler einer Schaltfläche gehört zu dieser Schaltfläche. Registrieren Sie nicht sowohl einen übergeordneten Delegationshandler als auch einen direkten Handler für dieselbe Aktion, es sei denn, die Ereignisweitergabe ist absichtlich Teil des Entwurfs.
Testen Sie den wiederholten Szeneneintritt als Symptomprüfung
Öffnen Sie eine Szene, drücken Sie einmal auf ihre Aktion, verlassen Sie sie und öffnen Sie sie erneut. Eine Eingabe sollte immer noch einen Effekt hervorrufen. Wiederholen Sie den Zyklus fünfmal und stellen Sie sicher, dass die Antwortanzahl pro Tastendruck bei eins bleibt. Hierbei handelt es sich um eine Funktionsprüfung, nicht um eine Speichermessung. Stellen Sie außerdem sicher, dass die Eingabe aus der alten Szene nach dem Verlassen nicht mehr ihre Punktzahl oder ihren Status ändert. MDN dokumentiert die AbortSignal-Unterstützung für die Gruppierung von Listenern und weist darauf hin, dass anonyme Funktionen für die explizite Entfernung beibehaltene Referenzen benötigen.
Halten Sie den Abriss im Einklang mit den Eigentumsverhältnissen
Wenn eine Szene ersetzt wird, brechen oder entfernen Sie ihre Listener, bevor Sie die Objekte entsorgen, auf die sie verweisen. Wenn einige Listener zur gesamten Anwendungs-Shell gehören, behalten Sie diese bei einem langlebigeren Besitzer, anstatt sie in jeder Runde zu entfernen. Fügen Sie einen Regressionsfall für Neustart-, Pausen- und Rückkehr-zum-Menü-Abläufe hinzu, da jeder Übergang versehentlich dieselbe Szene zweimal mounten oder deren Bereinigung überspringen kann.
Fragen zu Verhindern Sie doppelte Spielereignis-Listener
Warum löst ein Tastendruck mehrere Spielaktionen aus?
Für dieselbe Aktion können mehrere Handler registriert sein, oder sowohl ein Vorfahr als auch ein Kind können das Ereignis verarbeiten. Zählen Sie Registrierungen und überprüfen Sie die Ereignisausbreitung an der Grenze des Szenenlebenszyklus.
Kann AbortController Ereignis-Listener entfernen?
Ja. Fügen Sie verwandte Listener mit demselben Signal hinzu und brechen Sie die Gruppe ab, wenn der Besitzer endet. Dies gibt einer Gruppe einen klaren Abbauweg; es ersetzt nicht die Entscheidung darüber, welcher Eigentümer sie kontrolliert.
Weiterlesen
Etwas nicht mehr aktuell? Korrektur melden