Roadster: Dynamisches Laden von Menü-Einträgen / Event Listenern

Beitrag lesen

Aloha ;)

Hallo RIDER :)

Also, hab mir jetzt nochmal dein Problem im Detail angesehen. Habe ich das richtig verstanden: Du möchtest einen Teil der Menüpunkte, die sowieso nicht sichtbar sind, auf display:none; stellen und von ihren (klick-bedingten) EventListenern lösen um die Performanz zu steigern?

Genau!

Du kämpfst da gegen Windmühlen ;) Es bringt dir - da bin ich mir sicher - keinerlei Performance-Steigerung, wenn du das umsetzt. Im Gegenteil: Da eine JavaScript-Lösung auf onscroll hören müsste, das beim Scrollen ständig ausgelöst wird, hättest du einen vollkommen nutzlosen Overhead. Bedenke außerdem: Wenn du Elemente aus deiner scrollbaren Liste entfernst änderst du damit die Position aller anderen Elemente. Das führt dann zu einem lustigen Herumhüpfen deiner Elemente - das willst du sicher nicht miterleben ;)

Ja, das Problem, dass sich durch das adden bzw löschen die Position verschiebt, ging mir auch durch den Kopf. :)

Vielleicht hängt da auch ein Grundverständnisproblem (ich glaube ChrisB hat das schon angesprochen): Der EventLISTENER tut nichts (überhaupt nichts), solange das zugehörige Event nicht gefeuert wird.

Und die Frage, wann gefeuert wird, beantwortet der Browser automatisch, hm...

Speichertechnisch ist das auch vollkommen unproblematisch - schließlich hast du (wahrscheinlich) eine einzige Funktion, die von allen EventListenern befeuert wird.

Naja, pro Listenpunkt halt eine "Link"-Funktion: 'lösche aktuellen Screen und lade neue Elemente', oder was meinst du mit 'eine' Funktion?

Das einzige, was du durch das Entfernen von Elementen an Speicherplatz gewinnst, sind die wenigen paar Variablen, die mit den Mini-Funktionen gefüllt sind, die deine Event-Funktion feuern. Das sind lächerliche Mengen an Speicherplatz und vollkommen unproblematisch. Der Overhead, den du ansprichst (dadurch, dass EventListener, die ganze Zeit am "listenen" sind), tritt nicht auf. Das reine "Listenen" verursacht überhaupt keinen Rechenaufwand (in Zahlen: 0). Der Overhead, der durch das Feuern der Events entsteht, kann von deiner Seite aus gar nicht gesteuert werden, das übernimmt die Engine vollautomatisch und unstopable ;)

Ok. Dann habe ich das wohl tatsächlich einfach falsch verstanden. Oh je, dieser Artikel über Performance von JavaScript, den ich mal gelesen habe, hat echt mehr Schaden bei mir angerichtet als geholfen! :D

Da stand halt, mann solle EventListener grundsätzlich nur dann hinzufügen, wenn gerade gebraucht und wieder removen, wenn das Zielelement nicht mehr angezeigt wird. LOL, und ich habe in den vergangenen Wochen einen heiden Aufwand betrieben, jeden einzelnen EventListener, den ich irgendwo geadded habe, direkt nach Gebrauch wieder zu removen und erst vor dem nächsten Einsatz
wieder zu readden!

Also, dass heißt, theoretisch (ich betone theoretisch, Stichwort Benutzbarkeit...) könnte ich auch, sagen wir - TAUSEND - EventListener am Listenen haben, ohne dass sich das negativ auf die Performance auswirkt?

Dann könnte ich mir 'removeEventListener' ja im Prinzip auch komplett sparen und einfach am Anfang meines Scripts in einer episch lange Liste allen sensitiven Elementen meiner Seite ihren EventListener adden...

Tja, wow!

Jedenfalls vielen Dank für die erhellenden Worte (auch an Chris)!

Gruß,

Roadster.