perf(web): 优化大数据量页面切换与聚合性能
This commit is contained in:
@@ -23,6 +23,14 @@ export function calcVersionProgress(
|
||||
const vDevTasks = devTasks.filter((t) => isDevTaskInVersion(t, versionId, vReqIds));
|
||||
const vTestCases = testCases.filter((c) => c.versionId === versionId);
|
||||
|
||||
return calcScopedVersionProgress(vPlans, vDevTasks, vTestCases);
|
||||
}
|
||||
|
||||
export function calcScopedVersionProgress(
|
||||
vPlans: VersionPlan[],
|
||||
vDevTasks: DevTask[],
|
||||
vTestCases: TestCase[],
|
||||
): number {
|
||||
const segments: number[] = [];
|
||||
|
||||
const researchPlans = vPlans.filter((p) => p.type === 'research');
|
||||
@@ -93,9 +101,40 @@ export function buildVersionProgressMap(
|
||||
devTasks: DevTask[],
|
||||
testCases: TestCase[],
|
||||
): Record<string, number> {
|
||||
const plansByVersion = groupByVersionId(plans);
|
||||
const requirementVersionMap = new Map<string, string>();
|
||||
for (const requirement of requirements) {
|
||||
if (!requirement.versionId) continue;
|
||||
requirementVersionMap.set(requirement.id, requirement.versionId);
|
||||
}
|
||||
|
||||
const devTasksByVersion = new Map<string, DevTask[]>();
|
||||
for (const task of devTasks) {
|
||||
const versionId = task.versionId || requirementVersionMap.get(task.requirementId);
|
||||
if (!versionId) continue;
|
||||
const items = devTasksByVersion.get(versionId) ?? [];
|
||||
items.push(task);
|
||||
devTasksByVersion.set(versionId, items);
|
||||
}
|
||||
|
||||
const testCasesByVersion = groupByVersionId(testCases);
|
||||
const map: Record<string, number> = {};
|
||||
for (const v of versions) {
|
||||
map[v.id] = calcVersionProgress(v.id, plans, requirements, devTasks, testCases);
|
||||
map[v.id] = calcScopedVersionProgress(
|
||||
plansByVersion.get(v.id) ?? [],
|
||||
devTasksByVersion.get(v.id) ?? [],
|
||||
testCasesByVersion.get(v.id) ?? [],
|
||||
);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
function groupByVersionId<T extends { versionId: string }>(items: T[]): Map<string, T[]> {
|
||||
const map = new Map<string, T[]>();
|
||||
for (const item of items) {
|
||||
const group = map.get(item.versionId) ?? [];
|
||||
group.push(item);
|
||||
map.set(item.versionId, group);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user