mmofacts.com

Javascript Leaks erkennen

gepostet vor 16 Jahre, 2 Monate von Fobby

Heo,

im Moment läuft eine kleine, geschlossene Runde bei www.chaosreturns.de und das relativ stabil. Zur Techik: Sehr viel AJAX / JS. Die Seite wird nie neu geladen, sondern immer nur Teile der Seite aktualisiert / gewechselt. Als Framework nutze ich jQuery.

Jetzt ist das ein Rollenspiel, vor dem man auch gut und gerne mal mehrere Stunden sitzt. Aber je länger es läuft desto mehr bläht sich der Browser auf - gestern Abend nach 3 Stunden spielen wog mein Fox saftige 500MB und das hat sich auch auf die Performance niedergeschlagen - das einzige was hilft, ist ein Browserneustart.

Kann mir jemand sagen, ob es Tools gibt, bzw. wie man solche Leaks erkennen kann? Denn bevor ich das Spiel öffentlich machen möchte, sollte das behoben oder zumindest arg eingegrenzt sein.

gepostet vor 16 Jahre, 2 Monate von Isogames

Also mir sind nur Drip und sIEve bekannt. Ich hatte das Problem bei Prototype und Draggables. Pro Drag&Drop hat sich der IE 2 MB Speicher gegönnt.

gepostet vor 16 Jahre, 2 Monate von Fobby

Mit drag&drop hatte ich auch schon Leaks aber daran dürfte es nicht mehr liegen, da ich die nun immer "zerstöre" bevor ich die Objekte entferne. Aber es muss ja irgendwas grobes sein, denn 500MB müssen ja irgendwo herkommen.

gepostet vor 16 Jahre, 2 Monate von SysWar-Admin

mit welcher version des FF hast du es denn getestet?

wir haben ein ähnliches problem bei unserem Spiel Uniteria.de, aber dies erst seit dem FF3.

Im FF2 lief alles bestens, aber seit der neuen Version wird alles im cache gespeichert. Wir verwenden unser eigenes AJAX framework, dieses haben wir extra für Uniteria.de entwickelt, um es so schlank wie möglich zu halten.

Das cachen ist ein Problem von FF3, weil auch nicht AJAX anwendungen zu massiver Speicherausnutzung führen.

gepostet vor 16 Jahre, 2 Monate von Biki

Original von Fobby

Mit drag&drop hatte ich auch schon Leaks aber daran dürfte es nicht mehr liegen, da ich die nun immer "zerstöre" bevor ich die Objekte entferne.

Hi,
habe in meinem Game selbst viel Ajax / JS und auch Drag & Drop Parts. Kannst du bitte deine Aussage ein bissl konkretisieren, bez. "zerstören"?

Gruß,

Biki

gepostet vor 16 Jahre, 2 Monate von Fobby

Original von SysWar-Admin

mit welcher version des FF hast du es denn getestet?

FF3, bei anderen Browsern muss ich noch Langzeittests durchführen.

@Biki:

Das ist durchaus wörtlich zu nehmen :) in jQuery erstelle ich ein draggable Objekt mit $("#foo").draggable() und zerstöre es mit $("#foo").draggable("destroy")

Was ich aussagen wollte ist, dass ich mir mitlerweile sicher bin, dass ich sämtliche draggables mit $("#foo").draggable("destroy") auflöse, bevor ich den entsprechenden HTML-Teil einfach entferne.

gepostet vor 16 Jahre, 2 Monate von Biki

Original von Fobby

Original von SysWar-Admin

mit welcher version des FF hast du es denn getestet?

FF3, bei anderen Browsern muss ich noch Langzeittests durchführen.

@Biki:

Das ist durchaus wörtlich zu nehmen :) in jQuery erstelle ich ein draggable Objekt mit $("#foo").draggable() und zerstöre es mit $("#foo").draggable("destroy")

Was ich aussagen wollte ist, dass ich mir mitlerweile sicher bin, dass ich sämtliche draggables mit $("#foo").draggable("destroy") auflöse, bevor ich den entsprechenden HTML-Teil einfach entferne.

Ich danke dir. Werde mal checken ob ich das auch so umgesetzt habe (mit PT und scriptaculous), die JS-Performance kann nie gut genug sein ;)

gepostet vor 16 Jahre, 2 Monate von Fobby

Gern geschehen :)

Habe jetzt mal in FF2 und Opera9.5 versucht, dieselben leaks zu provozieren und es ging problemlos. Schlimm find ich auch, dass in keinem Browser ein f5 reicht, um das problem zu beheben. Ohne Browserneustart wird der RAM nicht leer.

gepostet vor 16 Jahre, 2 Monate von Klaus
  • Nutzt du auch die neuesten Versionen von jQuery bzw. jQuery UI?
  • Werden Eventhandler auch korrekt abgemeldet?
  • Versuch anonyme Funktionen zu vermeiden.
  • Werden Objekte nach Verwendung gelöscht?
  • globale Variabeln vermeiden.
gepostet vor 16 Jahre, 2 Monate von Fobby

Original von Klaus

  • Nutzt du auch die neuesten Versionen von jQuery bzw. jQuery UI?
  • Werden Eventhandler auch korrekt abgemeldet?
  • Versuch anonyme Funktionen zu vermeiden.
  • Werden Objekte nach Verwendung gelöscht?
  • globale Variabeln vermeiden.

Ich fürchte, dass ich das größtenteils nicht beachtet habe (bis auf Punkt 1, der ist leicht einzuhalten ;))

Da habe ich wohl noch eine Menge Arbeit vor mir ... danke für die Hinweise.

Auf diese Diskussion antworten