perf(renderer): cache sidebar team signatures
This commit is contained in:
parent
c90d8b9577
commit
614d69beb8
1 changed files with 33 additions and 17 deletions
|
|
@ -269,33 +269,49 @@ let cachedSidebarTeamsDerived: SidebarTeamsDerived = {
|
||||||
statusSummaries: [],
|
statusSummaries: [],
|
||||||
memberColorByTeam: new Map(),
|
memberColorByTeam: new Map(),
|
||||||
};
|
};
|
||||||
|
const cachedSidebarTeamSignatureByTeam = new WeakMap<TeamSummary, string>();
|
||||||
let cachedLeadOfflineTeamsSource: Partial<Record<string, LeadActivityState>> | null = null;
|
let cachedLeadOfflineTeamsSource: Partial<Record<string, LeadActivityState>> | null = null;
|
||||||
let cachedLeadOfflineTeamsSignature = '';
|
let cachedLeadOfflineTeamsSignature = '';
|
||||||
let cachedLeadOfflineTeamNames: string[] = [];
|
let cachedLeadOfflineTeamNames: string[] = [];
|
||||||
|
|
||||||
function pushSignaturePart(parts: string[], part: unknown): void {
|
function encodeSignaturePart(part: unknown): string {
|
||||||
const text = part == null ? '' : String(part);
|
const text = part == null ? '' : String(part);
|
||||||
parts.push(`${text.length}:${text}|`);
|
return `${text.length}:${text}|`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function pushSignaturePart(parts: string[], part: unknown): void {
|
||||||
|
parts.push(encodeSignaturePart(part));
|
||||||
|
}
|
||||||
|
|
||||||
|
function getSidebarTeamSignature(team: TeamSummary): string {
|
||||||
|
const cached = cachedSidebarTeamSignatureByTeam.get(team);
|
||||||
|
if (cached !== undefined) return cached;
|
||||||
|
|
||||||
|
let signature = '';
|
||||||
|
signature += encodeSignaturePart(team.teamName);
|
||||||
|
signature += encodeSignaturePart(team.displayName);
|
||||||
|
signature += encodeSignaturePart(team.projectPath);
|
||||||
|
signature += encodeSignaturePart(team.lastActivity);
|
||||||
|
signature += encodeSignaturePart(team.partialLaunchFailure ? 1 : 0);
|
||||||
|
signature += encodeSignaturePart(team.teamLaunchState);
|
||||||
|
for (const member of team.members ?? []) {
|
||||||
|
const colorMember = member as TeamMemberColorInput;
|
||||||
|
signature += encodeSignaturePart(colorMember.name);
|
||||||
|
signature += encodeSignaturePart(colorMember.color);
|
||||||
|
signature += encodeSignaturePart(colorMember.agentType);
|
||||||
|
signature += encodeSignaturePart(colorMember.removedAt);
|
||||||
|
}
|
||||||
|
|
||||||
|
cachedSidebarTeamSignatureByTeam.set(team, signature);
|
||||||
|
return signature;
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildSidebarTeamsSignature(teams: readonly TeamSummary[]): string {
|
function buildSidebarTeamsSignature(teams: readonly TeamSummary[]): string {
|
||||||
const signatureParts: string[] = [];
|
let signature = '';
|
||||||
for (const team of teams) {
|
for (const team of teams) {
|
||||||
pushSignaturePart(signatureParts, team.teamName);
|
signature += getSidebarTeamSignature(team);
|
||||||
pushSignaturePart(signatureParts, team.displayName);
|
|
||||||
pushSignaturePart(signatureParts, team.projectPath);
|
|
||||||
pushSignaturePart(signatureParts, team.lastActivity);
|
|
||||||
pushSignaturePart(signatureParts, team.partialLaunchFailure ? 1 : 0);
|
|
||||||
pushSignaturePart(signatureParts, team.teamLaunchState);
|
|
||||||
for (const member of team.members ?? []) {
|
|
||||||
const colorMember = member as TeamMemberColorInput;
|
|
||||||
pushSignaturePart(signatureParts, colorMember.name);
|
|
||||||
pushSignaturePart(signatureParts, colorMember.color);
|
|
||||||
pushSignaturePart(signatureParts, colorMember.agentType);
|
|
||||||
pushSignaturePart(signatureParts, colorMember.removedAt);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return signatureParts.join('');
|
return signature;
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildTeamNamesIdentityKey(teams: readonly TeamSummary[]): string {
|
function buildTeamNamesIdentityKey(teams: readonly TeamSummary[]): string {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue