You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Taking this up as the performance owner, with one sequencing note before work starts.
The first acceptance item is currently blocked
提供可重复执行的测量脚本与环境说明,在大工程上输出各项耗时并记录工程规模。
The storage side of that baseline does not produce numbers today. #260 records that the nightly cold-open and delete fixtures expire their edit session during preparation, so the lane reports SUITE/INCOMPLETE and fails instead of emitting storage.coldOpen.snapshot, storage.coldOpen.open, storage.delete.clientSnapshot and storage.delete.trash. I reproduced it locally at the configured 600-commit / 200-node scale on e1f2246a:
#270 renews the fixture's lease during preparation (outside the timed region) and both scenarios then produce every tracked measurement on my machine. That is the change that makes "可比较的基线" possible at all.
So the order I propose is:
Land #270, confirm the next nightly run emits all four storage measurements.
Then use those numbers as the fixed reference for this issue's before/after comparison.
Only then set thresholds (the issue's 待确认 item) — a threshold picked before the fixture is trustworthy would just freeze noise.
What I can take
The measurement harness and environment record: extend tests/browser/reference_drag_performance.mjs's isolation/profile pattern for the canvas interactions listed here, and pin the storage side to the nightly lane that #270 restores.
The分段耗时 attribution: separate front-end render, snapshot/version payload, and backend history replay, so a stall is not attributed to the wrong layer.
The "撤销后再编辑 → future 清空" regression, which is the one correctness item hiding inside a performance issue.
What I would rather not take unilaterally
The rework direction in 待确认: "若瓶颈来自每次撤销的全量快照拉取,是否接受按需增量读取的改造". That changes creationClient.undo()'s contract and every caller, so it needs your call rather than a performance-driven decision.
Also worth stating up front: src/canvas/history.ts keeps up to 80 whole-document snapshots and sameContent compares node by node, while undo() re-fetches the full project snapshot per gesture. Those two facts alone predict a large-project stall, but I will not claim them as the cause until the profile says so — the issue's own requirement is that the conclusion distinguish the three layers.
Activity
kunkunblueberry commentedon Nov 10, 2026
Taking this up as the performance owner, with one sequencing note before work starts.
The first acceptance item is currently blocked
The storage side of that baseline does not produce numbers today.
#260records that the nightly cold-open and delete fixtures expire their edit session during preparation, so the lane reportsSUITE/INCOMPLETEand fails instead of emittingstorage.coldOpen.snapshot,storage.coldOpen.open,storage.delete.clientSnapshotandstorage.delete.trash. I reproduced it locally at the configured 600-commit / 200-node scale one1f2246a:#270renews the fixture's lease during preparation (outside the timed region) and both scenarios then produce every tracked measurement on my machine. That is the change that makes "可比较的基线" possible at all.So the order I propose is:
#270, confirm the next nightly run emits all four storage measurements.What I can take
tests/browser/reference_drag_performance.mjs's isolation/profile pattern for the canvas interactions listed here, and pin the storage side to the nightly lane that#270restores.What I would rather not take unilaterally
The rework direction in 待确认: "若瓶颈来自每次撤销的全量快照拉取,是否接受按需增量读取的改造". That changes
creationClient.undo()'s contract and every caller, so it needs your call rather than a performance-driven decision.Also worth stating up front:
src/canvas/history.tskeeps up to 80 whole-document snapshots andsameContentcompares node by node, whileundo()re-fetches the full project snapshot per gesture. Those two facts alone predict a large-project stall, but I will not claim them as the cause until the profile says so — the issue's own requirement is that the conclusion distinguish the three layers.