Non-persistent components aren't garbage collected
@mnajdova is already working on this.
Since Apr 3, 2023.
- Dominant language
- JavaScript
- Stars
- 99.1k
- Forks
- 32.5k
- Avg merge
- 2d 17h
- Merged PRs (30d)
- 106
Description
Duplicates
- I have searched the existing issues
Latest version
- I have tested the latest version
Steps to reproduce 🕹
Link to live example:
Example
Steps:
- Copy the example for a basic menu and run locally in your own app
- Start the app and note the DOM Node count, manually garbage collect to confirm the count is correctly low
- Open and close the menu and note the DOM Node count increase
- Manually garbage collect and note they stay higher than before the menu was first opened
- Continue steps 3 and 4 and watch the DOM Node count continue every higher each time
Current behavior 😯
It seems like the components that don't persist (like menus and tool tips) that they are not garbage collected, or that I'm implementing them very wrong.
If it's a rarely clicked button, that's not so much of an issue, but we have a large virtualised list of Accordions with these components in the summary whose data is changing quite regularly. Scrolling through this list dramatically increases the DOM nodes and the tooltips become detached and sit in memory forever until a page refresh.
I can understand if it stays in memory because the button calling the menu is still there and it's not inefficient, but to keep creating new nodes every time while not clearing out the old ones appears wrong.
Is this a known issue, or have I just implemented it wrong?
Expected behavior 🤔
Dom Nodes should not continue to increase on multiple open/close events on the same component
Context 🔦
No response
Your environment 🌎
npx @mui/envinfo
System:
OS: Windows 10 10.0.19045
Binaries:
Node: 19.4.0 - C:\Program Files\nodejs\node.EXE
Yarn: 1.22.19 - C:\Program Files\nodejs\yarn.CMD
npm: 9.2.0 - C:\Program Files\nodejs\npm.CMD
Browsers:
Chrome: master_preferences
Edge: Spartan (44.19041.1266.0), Chromium (111.0.1661.62)
npmPackages:
@emotion/react: ^11.7.0 => 11.10.4
@emotion/styled: ^11.6.0 => 11.10.4
@mui/base: 5.0.0-alpha.97
@mui/core-downloads-tracker: 5.10.5
@mui/icons-material: ^5.2.0 => 5.10.3
@mui/lab: ^5.0.0-alpha.60 => 5.0.0-alpha.99
@mui/material: ^5.2.1 => 5.10.5
@mui/private-theming: 5.10.3
@mui/styled-engine: 5.10.5
@mui/styled-engine-sc: ^5.1.0 => 5.10.3
@mui/system: 5.10.5
@mui/types: 7.2.0
@mui/utils: 5.10.3
@types/react: 18.0.20
react: ^17.0.2 => 17.0.2
react-dom: ^17.0.2 => 17.0.2
styled-components: ^5.3.3 => 5.3.5
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.