Vue: Speicherverlust bei Verwendung von asynchronen Komponenten

Erstellt am 31. Aug. 2018  ·  3Kommentare  ·  Quelle: vuejs/vue

Ausführung

2.5.17

Reproduktionslink

https://codesandbox.io/s/4k43rylw0

Schritte zum Reproduzieren

  1. Laden Sie den Reproducer und machen Sie einen Snapshot des Speicherhaufens. Beim Durchsuchen des Heaps finden Sie 4 VueComponents (App, Container, Child, Async Child)
    image

  2. Klicken Sie auf die Schaltfläche Zerstören. Dadurch wird ein v-if umgeschaltet, wodurch die untergeordnete Komponente und damit auch die AsyncChild-Komponente entfernt werden.

  3. Zu diesem Zeitpunkt wird die Seite wie erwartet aktualisiert
  4. Machen Sie einen weiteren Snapshot des Speicherhaufens. Durchsuchen Sie den Heap erneut nach "VueComponent" und Sie werden sehen, dass noch 4 VueComponents vorhanden sind
    image
    image

Was wird erwartet?

Nach dem Zerstören der untergeordneten Komponente sollten die Komponente und ihre asynchron geladene untergeordnete Komponente zerstört und der Speicher freigegeben werden.

Was passiert eigentlich?

Vue hält an einer Kontextreferenz fest, die verhindert, dass diese Komponenten durch Müll gesammelt werden


Dies geschieht aufgrund der Logik der asynchronen Auflösungskomponente, die sich hier befindet: https://github.com/vuejs/vue/blob/52719ccab8fccffbdf497b96d3731dc86f04c1ce/src/core/vdom/helpers/resolve-async-component.js#L57 -68

In der forceRender-Funktion in Zeile 64 sollte nach dem Aufruf von $ forceUpdate das Contexts-Array gelöscht werden, um diese Referenzen freizugeben, damit die Komponenten zu einem späteren Zeitpunkt mit Müll gesammelt werden können

bug has PR

Hilfreichster Kommentar

Ich kann auch eine PR für das Update für dieses Problem einreichen, danke

Alle 3 Kommentare

Ich kann auch eine PR für das Update für dieses Problem einreichen, danke

Hallo @LinusBorg

Ich sehe, dass Sie dieser Ausgabe einige Bezeichnungen hinzugefügt haben. Muss ich noch etwas tun, um den Überprüfungsprozess der referenzierten Pull-Anforderung zu starten?

Vielen Dank!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

6pm picture 6pm  ·  3Kommentare

robertleeplummerjr picture robertleeplummerjr  ·  3Kommentare

hiendv picture hiendv  ·  3Kommentare

seemsindie picture seemsindie  ·  3Kommentare

franciscolourenco picture franciscolourenco  ·  3Kommentare