perf: 减少工作流设计器重复计算与序列化

- 缓存节点汇聚模式拓扑分析结果

- 草稿保存复用内容序列化结果
This commit is contained in:
2026-09-04 14:56:20 +08:00
parent c7cac61ce8
commit 386cebf342
5 changed files with 175 additions and 14 deletions

View File

@@ -114,6 +114,23 @@ describe('workflowDraftCache', () => {
).toBe(false);
});
it('写入草稿时只序列化一次工作流内容', () => {
const toJSON = vi.fn(() => draftContent);
expect(
writeWorkflowDraft({
baseContentSignature: createWorkflowContentSignature(serverContent),
content: {toJSON},
workflowId,
}),
).toBe(true);
expect(toJSON).toHaveBeenCalledTimes(1);
expect(readWorkflowDraft(workflowId, serverContent)?.content).toEqual(
draftContent,
);
});
it('忽略结构异常的缓存内容', () => {
sessionStorage.setItem(
`easyflow:workflow-draft:${workflowId}`,

View File

@@ -63,6 +63,25 @@ export function createWorkflowContentSignature(content: unknown) {
}
}
function serializeWorkflowDraft(
options: WriteWorkflowDraftOptions,
contentSignature: string,
) {
return [
'{"baseContentSignature":',
JSON.stringify(options.baseContentSignature),
',"content":',
contentSignature,
',"updatedAt":',
String(Date.now()),
',"version":',
String(WORKFLOW_DRAFT_VERSION),
',"workflowId":',
JSON.stringify(String(options.workflowId)),
'}',
].join('');
}
export function readWorkflowDraft(
workflowId: unknown,
serverContent: unknown,
@@ -124,15 +143,11 @@ export function writeWorkflowDraft(
return true;
}
const snapshot: WorkflowDraftSnapshot = {
baseContentSignature: options.baseContentSignature,
content: options.content,
updatedAt: Date.now(),
version: WORKFLOW_DRAFT_VERSION,
workflowId: String(options.workflowId),
};
try {
storage.setItem(storageKey, JSON.stringify(snapshot));
storage.setItem(
storageKey,
serializeWorkflowDraft(options, contentSignature),
);
return true;
} catch {
return false;