perf(renderer): cache active teammate roster keys

This commit is contained in:
777genius 2026-05-31 06:16:19 +03:00
parent 66ab83a7ce
commit 34c2215c31

View file

@ -45,10 +45,12 @@ const resolvedMemberSelectorCache = new Map<
result: ResolvedTeamMember | null; result: ResolvedTeamMember | null;
} }
>(); >();
let activeRawTeammateNameKeysCache = new WeakMap<TeamViewSnapshot['members'], readonly string[]>();
export function clearResolvedMemberSelectorCaches(): void { export function clearResolvedMemberSelectorCaches(): void {
resolvedMembersSelectorCache.clear(); resolvedMembersSelectorCache.clear();
resolvedMemberSelectorCache.clear(); resolvedMemberSelectorCache.clear();
activeRawTeammateNameKeysCache = new WeakMap<TeamViewSnapshot['members'], readonly string[]>();
} }
export function clearResolvedMemberSelectorCachesForTeam(teamName: string): void { export function clearResolvedMemberSelectorCachesForTeam(teamName: string): void {
@ -162,10 +164,16 @@ function buildConfigFallbackMemberSnapshots(snapshot: TeamViewSnapshot): TeamMem
return fallbackMembers; return fallbackMembers;
} }
function getActiveRawTeammateNameKeys(snapshot: TeamViewSnapshot | null | undefined): string[] { function getActiveRawTeammateNameKeys(
snapshot: TeamViewSnapshot | null | undefined
): readonly string[] {
if (!snapshot) { if (!snapshot) {
return []; return [];
} }
const cached = activeRawTeammateNameKeysCache.get(snapshot.members);
if (cached) {
return cached;
}
const names = new Set<string>(); const names = new Set<string>();
for (const member of snapshot.members) { for (const member of snapshot.members) {
const name = member.name.trim(); const name = member.name.trim();
@ -175,7 +183,9 @@ function getActiveRawTeammateNameKeys(snapshot: TeamViewSnapshot | null | undefi
} }
names.add(key); 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 { function hasActiveRawTeammateRoster(snapshot: TeamViewSnapshot | null | undefined): boolean {