From 24dc90cc0907953efca49189c7acfc8d09bb7d63 Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Fri, 27 Feb 2026 10:49:26 +0100 Subject: [PATCH] perf(room list): clear room list item vm only when changing space Clearing all the item vms at every room list change is causing massive re-render of all the room list items. References to the vms are already removed when out of view (see RoomListViewMode.updateVisibleRooms) and handled by GC. --- .../src/viewmodels/room-list/RoomListViewViewModel.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/apps/web/src/viewmodels/room-list/RoomListViewViewModel.ts b/apps/web/src/viewmodels/room-list/RoomListViewViewModel.ts index a3618b93af..093deba491 100644 --- a/apps/web/src/viewmodels/room-list/RoomListViewViewModel.ts +++ b/apps/web/src/viewmodels/room-list/RoomListViewViewModel.ts @@ -133,9 +133,6 @@ export class RoomListViewViewModel // Update roomsMap immediately before clearing VMs this.updateRoomsMap(this.roomsResult); - // Clear view models since room list changed - this.clearViewModels(); - this.updateRoomListData(); }; @@ -291,11 +288,13 @@ export class RoomListViewViewModel const newSpaceId = this.roomsResult.spaceId; - // Clear view models since room list structure changed - this.clearViewModels(); - // Detect space change if (oldSpaceId !== newSpaceId) { + // Clear view models when the space changes + // We only want to do this on space changes, not on regular list updates, to preserve view models when possible + // The view models are disposed when scrolling out of view (handled by updateVisibleRooms) + this.clearViewModels(); + // Space changed - get the last selected room for the new space to prevent flicker const lastSelectedRoom = SpaceStore.instance.getLastSelectedRoomIdForSpace(newSpaceId);