2.5.17
https://codesandbox.io/s/4k43rylw0
Chargez le reproducteur et prenez un instantané du tas de mémoire. En recherchant le tas, vous trouverez 4 VueComponents (App, Container, Child, Async Child)
Cliquez sur le bouton Détruire. Cela bascule un v-if qui supprimera également le composant Child et donc le composant AsyncChild.
Après avoir détruit le composant enfant, le composant et son composant enfant chargé de manière asynchrone doivent être détruits et la mémoire libérée.
Vue tient à une référence de contexte qui empêche ces composants d'être ramassés
Cela se produit en raison de la logique de résolution-async-composant située ici: https://github.com/vuejs/vue/blob/52719ccab8fccffbdf497b96d3731dc86f04c1ce/src/core/vdom/helpers/resolve-async-component.js#L57 -L68
Dans la fonction forceRender à la ligne 64, après avoir appelé $ forceUpdate, le tableau des contextes doit être effacé pour libérer ces références afin que les composants puissent être récupérés ultérieurement.
Je peux également soumettre un PR pour le correctif de ce problème, merci
PR soumis ici: https://github.com/vuejs/vue/pull/8755
Salut @LinusBorg
Je vois que vous avez ajouté quelques étiquettes à ce problème. Dois-je faire autre chose pour lancer le processus d'examen de la demande d'extraction référencée?
Merci!
Commentaire le plus utile
Je peux également soumettre un PR pour le correctif de ce problème, merci