2.5.17
https://codesandbox.io/s/4k43rylw0
Carregue o reprodutor e tire um instantâneo do heap da memória. Pesquisando o heap, você encontrará 4 VueComponents (App, Container, Child, Async Child)
Clique no botão Destruir. Isso alterna um v-if que removerá o componente filho e, portanto, o componente AsyncChild também.
Depois de destruir o componente filho, o componente e seu componente filho carregado de forma assíncrona devem ser destruídos e a memória liberada.
O Vue está mantendo uma referência de contexto que está impedindo que esses componentes sejam coletados como lixo
Isso está acontecendo devido à lógica resolve-async-component localizada aqui: https://github.com/vuejs/vue/blob/52719ccab8fccffbdf497b96d3731dc86f04c1ce/src/core/vdom/helpers/resolve-async-component.js#L57 -L68
Na função forceRender na linha 64, depois de chamar $ forceUpdate, a matriz de contextos deve ser limpa para liberar essas referências de modo que os componentes possam ser coletados como lixo em um momento posterior
Também posso enviar um PR para a correção desse problema, obrigado
RP enviado aqui: https://github.com/vuejs/vue/pull/8755
Olá @LinusBorg
Vejo que você adicionou alguns rótulos a este problema. Há mais alguma coisa que preciso fazer para iniciar o processo de revisão da solicitação pull mencionada?
Obrigado!
Comentários muito úteis
Também posso enviar um PR para a correção desse problema, obrigado