Details
-
Bug
-
Resolution: Unresolved
-
Major
-
17.4.0
-
None
-
Unknown
-
Description
Each Live Data cell registers a listener on the edit bus when it is mounted (BaseDisplayer.vue, logic.getEditBus().onAnyEvent(...)) and never removes it. EditBusService has no way to unregister a listener.
Consequences
- Every page change, sort or filter that displays new rows adds one permanent listener per displayed cell. With 15 rows and 6 columns, 10 page changes leave about 900 listeners.
- The listeners keep the unmounted cell components reachable, so they are never garbage collected.
- Every edit event (start, cancel, save) calls all the listeners ever registered, so inline editing gets slower the longer the user browses the Live Data.
Steps to reproduce
- Open a page with a Live Data, for instance the document index.
- Navigate between pages of the Live Data several times.
- Take a heap snapshot: the detached BaseDisplayer instances stay alive, held by the edit bus listeners.
Expected: a cell removes its listener when it is unmounted.
Attachments
Issue Links
- is related to
-
XWIKI-25700 Starting or stopping the edition of a Live Data cell re-renders every cell
-
- Open
-