Speicherverlust beim Protokollieren komplexer Objekte

8

Ich bin gerade damit beschäftigt, eine Javascript-Bibliothek zu schreiben. In dieser Bibliothek möchte ich etwas über das, was zur Konsole läuft, protokollieren.

%Vor%

Der obige Code zeigt meine Log-Funktion. Bei Aufruf gebe ich mindestens eine Severity, eine Nachricht und optional einige Objekte (können DOM-Objekte wie IDBTransaction, IDBDatabase, ... sein).

%Vor%

Jetzt habe ich das Problem, dass dies zu einem Speicherverlust führt. Das Problem besteht darin, dass die Objekte, die ich übergeben habe, durch die Methode console.log im Speicher bleiben. Gibt es eine Möglichkeit, dies zu vermeiden oder dies zu bereinigen?

    
Kristof Degrave 21.10.2012, 08:17
quelle

1 Antwort

13

Es ist verständlich, dass Objekte, die an console.log übergeben werden, nicht GC-basiert sind, da Sie sie nach dem Ausführen des Codes in Entwicklertools überprüfen können. Ich würde dies nicht als ein Problem bezeichnen, denn so muss es sein, wenn Sie Ihre Anwendung debuggen, aber der Produktionscode sollte keine Konsolenprotokollierung durchführen.

Wenn Sie noch Zeug in der Produktion protokollieren müssen (oder es irgendwo senden), würde ich stringify dein Objekt:

%Vor%

Der zusätzliche Bonus hier ist, dass Sie den Status des Objekts zum Zeitpunkt der Protokollierung (während der Protokollierung einer Objektreferenz nicht Garantie das 1 ).

Da Sie versuchen, große Objekte zu protokollieren, sollten Sie sich darüber im Klaren sein, dass dadurch die Leistung beeinträchtigt wird. Denken Sie also zweimal darüber nach, ob Sie dies in der Produktion tun möchten.

1 - wurde anscheinend in behoben neuesten Chrome

    
Dmitry Pashkevich 21.10.2012, 20:38
quelle

Tags und Links