From 34c2215c3198d4a8770b000c9ac8a0b15f1d5a65 Mon Sep 17 00:00:00 2001 From: 777genius Date: Sun, 31 May 2026 06:16:19 +0300 Subject: [PATCH] perf(renderer): cache active teammate roster keys --- src/renderer/store/team/teamResolvedMembers.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/renderer/store/team/teamResolvedMembers.ts b/src/renderer/store/team/teamResolvedMembers.ts index 1f5b093f..dbeb4db9 100644 --- a/src/renderer/store/team/teamResolvedMembers.ts +++ b/src/renderer/store/team/teamResolvedMembers.ts @@ -45,10 +45,12 @@ const resolvedMemberSelectorCache = new Map< result: ResolvedTeamMember | null; } >(); +let activeRawTeammateNameKeysCache = new WeakMap(); export function clearResolvedMemberSelectorCaches(): void { resolvedMembersSelectorCache.clear(); resolvedMemberSelectorCache.clear(); + activeRawTeammateNameKeysCache = new WeakMap(); } export function clearResolvedMemberSelectorCachesForTeam(teamName: string): void { @@ -162,10 +164,16 @@ function buildConfigFallbackMemberSnapshots(snapshot: TeamViewSnapshot): TeamMem return fallbackMembers; } -function getActiveRawTeammateNameKeys(snapshot: TeamViewSnapshot | null | undefined): string[] { +function getActiveRawTeammateNameKeys( + snapshot: TeamViewSnapshot | null | undefined +): readonly string[] { if (!snapshot) { return []; } + const cached = activeRawTeammateNameKeysCache.get(snapshot.members); + if (cached) { + return cached; + } const names = new Set(); for (const member of snapshot.members) { const name = member.name.trim(); @@ -175,7 +183,9 @@ function getActiveRawTeammateNameKeys(snapshot: TeamViewSnapshot | null | undefi } names.add(key); } - return Array.from(names).sort((left, right) => left.localeCompare(right)); + const result = Array.from(names).sort((left, right) => left.localeCompare(right)); + activeRawTeammateNameKeysCache.set(snapshot.members, result); + return result; } function hasActiveRawTeammateRoster(snapshot: TeamViewSnapshot | null | undefined): boolean {