ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

plate 项目 Slate v2 基准目标注册表(Benchmark Targets Registry)与 Autoresearch 优化控制平面完全指南

2026/9/14 22:46:09 拓冰建站 浏览量
plate 项目 Slate v2 基准目标注册表(Benchmark Targets Registry)与 Autoresearch 优化控制平面完全指南 plate 项目 Slate v2 基准目标注册表Benchmark Targets Registry与 Autoresearch 优化控制平面完全指南【免费下载链接】plateRich-text editor with AI and shadcn/ui项目地址: https://gitcode.com/GitHub_Trending/pl/plate本文围绕 plate 仓库中 benchmarks/targets/README.md 所定义的 Benchmark Targets 机制展开它是 Slate v2 基准测试工作的迁移主轴migration spine用一份结构化注册表统一回答我们在测什么决策、Agent 如何运行或优化它这两个核心问题。读完本文你将掌握目标注册表的数据契约、全套pnpm bench:targets:*命令的用法与副作用边界、生成报告/历史的读写流程以及如何用dry-run、autoresearch-init驱动一个可审计的基准优化循环。一、为什么需要目标注册表从 Evidence Kit 到单一事实来源在 Slate v2 的性能工作中基准测试长期分散在不同位置benchmarks/editor下的 Evidence Kit历史导入/报告归档、各 runtime/package 包内的基准实现、以及大量散落在docs/plans/中的性能计划文档。benchmarks/targets目录正是为了解决这种分散状态而建立的迁移脊柱基准实现benchmark implementation与被测量的 runtime/package 代码放在一起注册表只负责登记不重复实现注册表benchmarks/targets/slate-v2.json通过一个目标 ID 聚合队列cohort、指标metrics、运行命令command、正确性校验correctness、产物artifacts与证据链接docsAutoresearch 会话一次只优化一个目标 ID且只拥有活跃循环状态active loop state避免多个优化会话互相污染文档与研究文件只是链接证据linked evidence不是基准控制状态。这一设计原则在注册表的policy字段中被显式固化benchmarks/targets/slate-v2.jsonpolicy: { authority: Benchmark targets are the future source of truth. Evidence Kit is a legacy import/report archive during migration., benchmarkCode: Benchmark implementation lives with the runtime/package code it measures., activeLoops: Autoresearch sessions optimize one target id at a time and own only active loop state., docs: Docs and research files are linked evidence, not benchmark control state. }二、目录结构与角色分工benchmarks/targets下当前只有四个文件分工非常清晰路径角色benchmarks/targets/README.md迁移脊柱的说明文档所有权、命令、目标契约、生成输出benchmarks/targets/slate-v2.json注册表本体version、policy与 27 个目标定义唯一输入benchmarks/targets/history/slate-v2-latest.json生成的快照由注册表派生的最新目标历史含产物存在性检查结果benchmarks/targets/reports/slate-v2.md生成的报告人类可读的目标状态汇总表生成类文件history/reports都由pnpm bench:targets:report从注册表派生不要手改——pnpm bench:targets:report:check会以字节级比对校验它们是否与注册表一致见后文。三、命令速查与使用场景原文档给出的命令全集如下均已映射到 package.json 中的同名bench:targets:*脚本底层统一指向 tooling/scripts/bench-targets.mjspnpm bench:targets:list pnpm bench:targets:check pnpm bench:targets:report pnpm bench:targets:report:check pnpm bench:targets:dry-run -- react-active-typing-breakdown pnpm bench:targets:run -- react-active-typing-breakdown node tooling/scripts/bench-targets.mjs autoresearch-init react-active-typing-breakdown各命令的语义与副作用边界结合脚本源码tooling/scripts/bench-targets.mjs逐一说明命令副作用行为说明bench:targets:list只读按 ID 排序输出每个目标的id、family、主指标、运行命令对应脚本listTargetsbench:targets:check只读对注册表执行结构校验validateRegistryversion必须为 1、targets非空、字段齐全、ID 唯一、cwd/artifacts.path必须是仓库相对路径、metrics.direction只能是lower/higher、metrics.printsMetric必须是布尔、correctness.command与artifacts必填任一错误即非零退出bench:targets:report写文件重建 history 与 markdown 报告并写入 benchmarks/targets/history/slate-v2-latest.json 和 benchmarks/targets/reports/slate-v2.mdbench:targets:report:check只读用assertFileEquals逐字节比对两个生成文件与当前注册表的派生结果过期即报错generated file is stalebench:targets:report:dry-run只读仅打印targetsN missingRequiredM概览不落盘bench:targets:dry-run -- target-id只读校验注册表、在内存中构建报告模型并调用 Autoresearch 的setup-plan为指定目标生成设置计划JSON打印autoresearchSetupOk、benchmarkMode等关键结论bench:targets:run -- target-id运行基准读取目标的cwd与command用 shell 同步执行并透传 stdio脚本runTarget使用spawnSync(..., { shell: true, stdio: inherit })退出码透传autoresearch-init target-id写.tmp会话文件调用 Autoresearch 的setup命令创建或替换真实的.tmp/slate-v2/autoresearch.*会话文件autoresearch-setup-plan target-id只读仅打印设置计划setup-plan不写任何会话文件原文档特别强调的安全边界值得重复bench:targets:dry-run是只读的——它只检查注册表并打印该目标的 Autoresearch 设置计划只有当你确实要创建或替换真实的.tmp/slate-v2/autoresearch.*会话文件时才使用autoresearch-init。对操作者operator工作流应优先调用slate-ar*系列技能而不是直接操作包脚本相关示例见 docs/plans/2026-06-01-slate-ar-target-finalize-pagination.md其中记录了pnpm slate:ar:setup-target -- id、pnpm slate:ar:state、pnpm slate:ar:finalize-preview等技能化入口。四、目标契约Target Contract逐字段解析每个目标都是一个自包含的决策单元。以注册表中react-huge-document-legacy-compare为例benchmarks/targets/slate-v2.json{ id: react-huge-document-legacy-compare, question: Does Slate v2 beat legacy Slate for 5,000-block React editing, selection, startup, and full-document replacement?, owner: slate-v2, family: react-large-document, kind: slate-legacy-compare, cwd: .tmp/slate-v2, command: REACT_HUGE_COMPARE_LEGACY_REPO../../../slate REACT_HUGE_COMPARE_DISPOSE_DELAY_MS0 REACT_HUGE_COMPARE_SPLIT_SELECTION1 REACT_HUGE_COMPARE_ISOLATE_SURFACES1 REACT_HUGE_COMPARE_SURFACESv2DefaultRenderAuto,v2DomPresent REACT_HUGE_COMPARE_BLOCKS5000 REACT_HUGE_COMPARE_ITERATIONS5 REACT_HUGE_COMPARE_TYPE_OPS10 bun run bench:react:huge-document:legacy-compare:local, metrics: { primary: react_huge_doc_legacy_compare_worst_p95_ratio, direction: lower, unit: ratio, printsMetric: true, upgrade: Primary metric is the worst p95 ratio across the 5,000-block default/render-auto and DOM-present product lanes versus legacy chunking-on. }, correctness: { command: bun check, policy: Promotion requires the benchmark p95 ratio plus the fast Slate v2 check suite. }, artifacts: [ { path: .tmp/slate-v2/tmp/slate-react-huge-document-legacy-compare-benchmark-compare-v2DefaultRenderAuto-v2DomPresent-blocks-5000-iters-5-ops-10-isolated-surfaces-split-selection-no-profile.json, required: true } ], docs: { sources: [ benchmarks/editor/research/evidence-source-map.md, benchmarks/editor/iterations/003-evidence-control-plane.md, docs/plans/2026-06-01-react-huge-document-legacy-ar-perf.md ] }, thresholds: { promotion: react_huge_doc_legacy_compare_worst_p95_ratio1.5, stop: stop when the promotion target is stable across two correctness-green repeat packets or when the remaining owner needs architecture work }, migration: { importedFrom: benchmarks/editor/research/benchmark-registry.json, evidenceKitId: react-huge-document-legacy-compare, evidenceKitCategory: slate-react-huge-document-legacy-compare, evidenceKitActive: true } }原文档列出的契约字段与含义id面向命令的稳定 ID贯穿dry-run、run、autoresearch-init等所有命令question该基准要回答的决策问题这是目标与普通脚本的关键区别——每个目标绑定一个明确决策ownerruntime/package 所有者当前均为slate-v2family与kind用于报告分组的两个维度——family是主题族如react-large-document、core-comparekind是形态如current、compare、browser-trace、benchmark-suite、rows、slate-legacy-compare、issue-replaycwd与command仓库相对的工作目录与实际执行命令校验器强制cwd不能是绝对路径metrics主指标primary、优化方向direction仅允许lower/higher、单位unit以及printsMetric布尔位——表示命令输出是否原生打印METRIC namevalue行correctness防止提速却破坏编辑器行为的守卫命令多数目标默认bun check个别目标有更精确的定向测试见下节artifacts目标产生的结果文件required标记是否必须存在报告生成时逐文件做存在性检查docs支撑证据链接计划文档、研究文档migrationEvidence Kit 退役期间的临时来源追踪importedFrom、evidenceKitId、evidenceKitCategory、evidenceKitActive。原文档还特别强调输出规范基准输出应逐步向原生METRIC与ARTIFACT行收敛在尚未收敛前Autoresearch 可以用metrics.printsMetric: false来包装计时即由 Autoresearch 自行测量耗时而不是读取基准打印的指标行。这在脚本autoresearchSetupArgs中体现为--benchmark-prints-metric参数tooling/scripts/bench-targets.mjs。五、27 个目标的分族全景与代表性目标深度解析当前注册表登记了27 个目标、27 个产物声明其中 25 个必选可归为以下族数据来自 benchmarks/targets/slate-v2.jsonreact-large-documentReact 大文档react-huge-document-legacy-compare、react-huge-document-full、react-huge-document-overlays、react-huge-document-browser-trace、react-huge-document-virtualized-type-to-paint、react-huge-document-slate-browser-tracereact-localityReact 局部性react-rerender-breadth、react-runtime-node-fanoutreact-typing / react-paginationreact-active-typing-breakdown、react-pagination-virtualized-char-burstcore-current / core-compare核心当前态与对比core-normalization-current、core-query-ref-observation、core-node-transforms、core-text-selection、core-editor-store、core-refs-projection、core-transaction-current、core-huge-document-compare、core-normalization-compare、core-observation-compare、core-rich-text-operations-comparehistoryhistory-compare、history-retained-memoryclipboard / collaboration / browser-rich-text / issue-replayclipboard-large-payload、collab-readiness、browser-rich-text-replay-coverage、issue-6038-transaction-execution。5.1 综合套件react-huge-document-full这是覆盖面最广的目标kind: benchmark-suite一条命令串联核心大文档操作、React legacy 对比、浏览器 type-to-paint、长任务与 overlay 局部性等多个车道command: HUGE_DOC_FULL_LEGACY_REPO../../../slate HUGE_DOC_FULL_BLOCKS5000 HUGE_DOC_FULL_ITERATIONS5 HUGE_DOC_FULL_TRACE_ITERATIONS5 HUGE_DOC_FULL_TYPE_OPS10 bun run bench:react:huge-document:full:local, metrics: { primary: react_huge_doc_full_max_budget_ratio, direction: lower, unit: ratio, printsMetric: true }, thresholds: { promotion: react_huge_doc_full_max_budget_ratio1 and react_huge_doc_full_failure_count0, stretch: react_huge_doc_full_max_budget_ratio0.67, plateau: stop after 2 correctness-green packets with less than 5% gain }它的正确性策略最严格提升promotion要求聚合套件指标达标、react_huge_doc_full_failure_count0且快版 Slate v2 检查套件通过。thresholds中的三档语义值得注意promotion是放行线stretch是理想目标plateau是停止条件连续 2 个正确性绿包且收益 5% 就停止优化避免过度投入。5.2 浏览器追踪react-huge-document-virtualized-type-to-paint该目标回答5000 块虚拟化 React 表面能否把 type-to-paint 延迟控制在交互预算内主指标是react_huge_doc_type_to_paint_p95_ms单位 mscommand: SLATE_BROWSER_TRACE_SURFACESvirtualized SLATE_BROWSER_TRACE_ITERATIONS5 SLATE_BROWSER_TRACE_TYPE_OPS10 SLATE_BROWSER_TRACE_NATIVE_TIMEOUT_MS5000 bun run bench:react:huge-document:browser-trace:local, thresholds: { promotion: react_huge_doc_type_to_paint_p95_ms75, stretch: react_huge_doc_type_to_paint_p95_ms50 }它的correctness.command是 Playwright 定向测试而非bun check用-g过滤出虚拟化 DOM 策略控制与指标暴露动态块高下虚拟化反向滚动稳定两组用例benchmarks/targets/slate-v2.json把性能放行与浏览器行为正确性绑定在一起。5.3 局部性契约react-runtime-node-fanout该目标衡量根插入、重排、全文档替换是否唤醒无关的 runtime-node selector主指标是聚合 fanout 违规计数promotion 线就是 0metrics: { primary: slate_react_runtime_node_fanout_count, direction: lower, unit: count, printsMetric: true }, correctness: { command: cd packages/slate-react bun test:vitest test/provider-hooks-contract.tsx -t \fan out|full-document replacement\, policy: Promotion requires the runtime-node selector fanout contract plus the benchmark metric at 0. }, thresholds: { promotion: slate_react_runtime_node_fanout_count0 }它示范了正确性命令可以高度定向只用 Vitest 过滤出 fan-out 与全文档替换相关的契约用例而不是跑整个套件。5.4 对比族core-rich-text-operations-compare 与 history-compare对比类目标kind: compare衡量 Slate v2 相对 legacy Slate 的 p95 比值。例如core-rich-text-operations-compare通过环境变量控制迭代次数RICH_TEXT_OPS_COMPARE_ITERATIONS51主指标rich_text_structural_ops_p95_ms且设置了多级阈值thresholds: { first: rich_text_structural_ops_p95_ms below 10x legacy, promotion: rich_text_structural_ops_p95_ms below 3x legacy, plateau: stop after 2 packets with less than 5% gain }history-compare则以HISTORY_BENCH_LEGACY_REPO../../../slate指向 legacy 仓库主指标history_compare_worst_p95_ratiopromotion 线为≤2.0 且 bun check 绿。5.5 关于 legacy 对比的前提说明所有*_compare*目标都通过XXX_LEGACY_REPO../../../slate这类环境变量显式指向同级的 legacy Slate 仓库且cwd统一为.tmp/slate-v2从脚本视角看是benchmarks/相对工作区的构建/运行暂存区。这意味着这些目标依赖本地存在 legacy Slate 源码树属仓库外部前提运行前需要自行准备对应 checkout。六、生成输出history 快照与报告报告pnpm bench:targets:report写出的两个文件是Evidence Kit 活跃健康/报告表面的注册表替代品——它们只汇总注册目标与已登记产物的状态不运行昂贵的基准benchmarks/targets/history/slate-v2-latest.json结构化快照含registryPath、policy、counts目标数、产物数、必选/可选产物、缺失统计、状态计数与每个目标的展开明细含status与产物exists标记benchmarks/targets/reports/slate-v2.mdMarkdown 汇总报告首部是 Summary 块主体是 27 行目标状态表。报告生成逻辑在 tooling/scripts/bench-targets.mjs 的buildTargetHistory与renderMarkdownReport中实现其中状态判定规则清晰可读status: missingArtifacts.length 0 ? missing-required-artifact : missingOptionalArtifacts.length 0 ? missing-optional-artifact : ok当前快照benchmarks/targets/history/slate-v2-latest.json显示27 个目标、25 个必选产物全部存在、缺 2 个可选产物core-transaction-current与history-retained-memory的产物被标记为required: false状态分布为ok25, missing-optional-artifact2missing-required-artifact0。报告表格的 Metric output 列区分yes基准原生打印 METRIC 行与wrapped需 Autoresearch 包装计时。七、实操一个完整的目标优化工作流把上述机制串起来一个规范化的基准优化闭环如下登记/校验确认目标已在 benchmarks/targets/slate-v2.json 中定义运行pnpm bench:targets:check保证注册表结构合法预演运行pnpm bench:targets:dry-run -- target-id只读它会校验注册表、在内存中构建报告模型并让 Autoresearch 输出该目标的setup-plan——若autoresearchSetupOktrue说明设置计划可生成这是开始真实优化循环前必须确认的一步建会话确认要创建/替换真实会话文件后运行node tooling/scripts/bench-targets.mjs autoresearch-init target-id等价于pnpm slate:ar:setup-target -- target-id技能化入口运行基准pnpm bench:targets:run -- target-id在目标cwd下以 shell 执行其command正确性门禁按目标correctness.command跑校验默认bun check定向目标则跑对应 Vitest/Playwright 用例确保性能提升没有破坏编辑器行为评估阈值对照目标thresholds.promotion及stretch/plateau判断是否可以放行、是否应停止刷新产出pnpm bench:targets:report重新生成 history 与报告pnpm bench:targets:report:check验证生成文件与注册表一致CI 可复用该检查防止生成物过期漂移。八、迁移与演进Evidence Kit 的退役路径pnpm bench:targets:import-evidence-kit仅在从 benchmarks/editor/research/benchmark-registry.json 迁移活跃行时使用。脚本importEvidenceKittooling/scripts/bench-targets.mjs读取 legacy 注册表将每个 artifact 映射为新式目标decision→question、cwd/path归一化为仓库相对路径、自动按family/kind推断默认指标名metricNameFor如react-typing族 →typing_seconds、browser-trace形态 →browser_trace_seconds、core-*族 →core_benchmark_seconds并写入migration追踪块。不带--write时仅打印映射结果供预览。迁移完成后直接在注册表中编辑目标定义即可不再需要回写 Evidence Kitmigration块只保留从哪来的临时来源信息importedFrom、evidenceKitId、evidenceKitCategory、evidenceKitActive供审计追溯。这也解释了为什么当前 27 个目标中大多数仍带有migration块而 2026-06 之后新增的目标如react-runtime-node-fanout、react-huge-document-virtualized-type-to-paint、react-pagination-virtualized-char-burst已不再需要——它们从诞生起就是注册表原生目标migration: null。九、小结Benchmark Targets 注册表把 Slate v2 的基准工作收敛为一个 JSON、一套脚本、两个生成物的控制平面注册表是唯一输入校验命令保证结构合法dry-run/autoresearch-init 支撑可审计的 Agent 优化循环report/check 保证产物可追溯。对于需要在该仓库上开展性能工作的开发者或 Agent 而言正确姿势是先list找到目标 ID再dry-run预演、autoresearch-init建会话优化期间用目标自带的correctness.command守住行为底线最后用report与report:check落盘并验证产出——全程不触碰注册表以外任何控制状态。【免费下载链接】plateRich-text editor with AI and shadcn/ui项目地址: https://gitcode.com/GitHub_Trending/pl/plate创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考