perf: 减少工作流设计器重复计算与序列化
- 缓存节点汇聚模式拓扑分析结果 - 草稿保存复用内容序列化结果
This commit is contained in:
@@ -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}`,
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user