Avoid hitting the SettingsStore thousands of times when generating room lists

Should fix https://github.com/vector-im/riot-web/issues/7646 to some degree
pull/21833/head
Travis Ralston 2018-11-01 14:43:15 -06:00
parent 57b99893e5
commit 5558b7a3b2
1 changed files with 7 additions and 5 deletions

View File

@ -217,11 +217,16 @@ class RoomListStore extends Store {
} }
}); });
// Note: we check the settings up here instead of in the forEach or
// in the _recentsComparator to avoid hitting the SettingsStore a few
// thousand times.
const pinUnread = SettingsStore.getValue("pinUnreadRooms");
const pinMentioned = SettingsStore.getValue("pinMentionedRooms");
Object.keys(lists).forEach((listKey) => { Object.keys(lists).forEach((listKey) => {
let comparator; let comparator;
switch (RoomListStore._listOrders[listKey]) { switch (RoomListStore._listOrders[listKey]) {
case "recent": case "recent":
comparator = this._recentsComparator; comparator = (roomA, roomB) => this._recentsComparator(roomA, roomB, pinUnread, pinMentioned);
break; break;
case "manual": case "manual":
default: default:
@ -262,10 +267,7 @@ class RoomListStore extends Store {
} }
} }
_recentsComparator(roomA, roomB) { _recentsComparator(roomA, roomB, pinUnread, pinMentioned) {
const pinUnread = SettingsStore.getValue("pinUnreadRooms");
const pinMentioned = SettingsStore.getValue("pinMentionedRooms");
// We try and set the ordering to be Mentioned > Unread > Recent // We try and set the ordering to be Mentioned > Unread > Recent
// assuming the user has the right settings, of course // assuming the user has the right settings, of course