跳转至

本地常量 BrowserWindow 选项 — Joplin 验证

本记录涵盖 #4366,涉及 #3536 和 #4027 的一部分。未经改动的官方 Joplin 桌面版 3.7.21 ASAR 在 ElectronAppWrapper.js:238–263 中包含 const windowOptions = {...},另有一个无关的条件性 icon 赋值,以及第 268 行的 new BrowserWindow(windowOptions)。该限定的公共工作流会分析上述源码和 package.json,然后通过 inspect_analysis_view 读取窗口。它不会执行 Joplin。

基线返回一个动态窗口,且没有任何显式偏好设置。候选版本保留四个字面量布尔值(nodeIntegration: true、contextIsolation: false、spellcheck: true、enableRemoteModule: true)和显式动态 session 表达式。原始窗口标识和构造函数位置均被保留。常量关联是推断得出的,带有原始对象的源码范围;被省略的偏好不会获得 Electron 默认值。弹出窗口覆盖和字面量展开仍是 #3536 下的独立工作。

精简测量数据 保留了两组试验顺序、精确输入、运行时/harness/源码指纹、原始结果行、CLI/MCP 证据一致性和观察者回执。ASAR SHA256 为 767df409b18effe60421fbefcca873de237c7e813eac744ecdeebbc5e825a33a;39,972 字节源码的 SHA256 为 dcd2260e46dd1b4922449090e268773b052d58ba24ff977b08b978bee6cc9da1。下载/复现来源见更早的 Joplin 记录。可下载的应用程序和完整导出未提交。

正确性

两组试验均与独立的导出-过滤预言机以及完整的 CLI/MCP 视图证据完全匹配。固定的 Joplin 检查器 验证精确设置、显式未知项、源码范围和稳定窗口标识。手动阴性对照会拒绝错误的布尔值、以数字 0 代替 false、被更改的标识,以及“观察到”而非“推断出”的来源。

原始语义图摘要会变化,因为语义图提交了其父级 application_graph_id。最终记录在精确排除该外键及其依赖的顶层 graph_id 之后,单独检查完整语义内容;原始摘要仍被记录,并与独立的完整 CLI 观测结果关联。这些排除遵循规范语义图模式和构建器,而不是过滤存在差异的节点或关系。

成本与限制

试验顺序 变体 首次回答(秒) CPU(秒) 回答时 cgroup 峰值字节 预计任务 BPE
先基线后候选 基线 70.283 69.258 1578196992 13337
先基线后候选 候选 42.701 42.437 1523793920 13432
先候选后基线 候选 44.793 44.766 1527357440 13432
先候选后基线 基线 42.958 42.946 1533308928 13337

基线工具工作流无法提供这些设置;额外的人工源码阅读成本未被测量。这是一项正确性收益,预计结构化任务 token 增加 +95(若计入完整工具回复则为 +203)。两者都使用相同的 8,069-token 选定目录。最初显现的延迟优势并未重现:反向配对使候选版本慢约 1.8 秒。这些样本不能确立任何加速或通用性能结果。首次视图检索为 106–121 毫秒;同一会话内的后续读取为 22–35 毫秒。未添加持久化分析缓存。

所有高成本任务均以串行方式运行,使用一个 CPU 10、8 GiB 硬限制、6 GiB 提前停止、无交换分区和 192 个任务,并固定使用 Node 24.18.0/npm 11.16.0。cgroup 内存包含文件缓存,并非 RSS。回答时计数器先于重复读取、诊断导出、全图哈希、CLI 一致性和分词。完整验证器的观察者回执单独测量这些额外工作。观察者报告未出现 OOM,并在每次限定运行中验证了有效载荷清理。

每个任务都会启动全新的 MCP 进程;输入哈希会预热文件缓存,而构建/操作系统缓存不受控制。三次检索样本并非三次冷分析。cl100k_base/tiktoken 0.12.0 的推算包含准备、首次回答和选定的输入模式;输出模式、实际计费、推理、智能体上下文峰值、宿主渲染和系统冷启动行为均未被测量。本文未对实时模型或 Electron 运行时作出任何声明。

验证与可重现性

集成式聚焦调用在 9 个文件中通过了 156/157 个案例。一个未改动的上游生成器 CLI/MCP 案例在分组执行中超出了其原本的 30 秒截止时间;在相同截止时间下的隔离运行中,主线版本和候选版本均通过(18.590/18.034 秒)。分组失败被保留;其根本原因尚未确定,其截止时间也未更改。项目自有的 CLI/MCP/事实视图、源码变更/转义/身份以及容量回归测试均通过。静态/文档检查记录在 JSON 验证回执中。

最初的真实应用验证器尝试失败,因为其覆盖断言只处理产物路径。独立的选择器和工具已经支持源码范围路径。该验证器断言在两个有效配对之前已得到修正;那次失败的尝试被排除在性能样本之外。源码预言机最初转录的结束行 264 在重新阅读未改动的源码后被修正为 263。这两个修正均不改变生产分析。

在独立检出中构建固定的基线和候选版本后,请按基线→候选、候选→基线的顺序串行运行同一条命令,并使用为每个配对记录的匹配 harness 哈希:

query='{"kind":"javascript-facts","where":{"paths":["ElectronAppWrapper.js"],"kinds":["browser-window"]},"property_keys":["options_status","web_preferences_status","web_preferences","preload_path","resolution_sources"],"offset":0,"limit":64}'
node scripts/verify/javascript/retained-facts.mjs \
  --artifact /absolute/path/to/app.asar --mode view --query "$query" \
  --source-path ElectronAppWrapper.js --source-path package.json \
  --rounds 3 --cli-parity --tokenizer-python /absolute/python-with-tiktoken-0.12.0
python3 experiments/analysis-efficiency/joplin-window-options-check.py \
  docs/verification/javascript-window-options-2026-10-16.json

将早期 Joplin 记录中的关联资源观察器应用于每个高开销命令。完整的 CLI 观察通过 analyze-javascript-application --format json 使用相同的源选择。保留的内容比较器接收基线 CLI JSON、候选 CLI JSON 和此测量记录,然后输出语义证明,同时保留原始图标识符和原始摘要。它按顺序读取,并在失败时报告简洁信息,而非打印完整图。基线后端为未更改的主分支 2c7583599b9ac1c847bd77b1940930fd8d4594c7;仅在此处应用了匹配的验证框架。源和运行时固定项将测量版本与后续文档更改区分开来。

排序审查后续

Codex 审查发现了一个引入的生产者排序回归:内联窗口在遍历期间被追加,而延迟常量在之后才被追加。新的混合常量/内联/未解析回归复现了 [4, 3, 5, 6],而不是源顺序 [3, 4, 5, 6]。生产集合现在在模块归因和公共图消费者之前从保留的源偏移量恢复顺序;没有添加下游适配器修复。复用的选项对象在逃逸到第一个构造函数后仍保持动态。

修复后,五个文件中的全部 49 个目标用例均通过,包括公共 CLI/MCP/fact-view 工作流以及容量/身份用例。在源修订版 3fd71cba2 上额外运行了一次真实 Joplin,返回的完整答案和语义指纹与原始候选完全一致,CLI/MCP 视图 Evidence 完全对等。它得到答案耗时 44.028 秒 / 43.960 CPU 秒 / 峰值 cgroup 字节 1,524,555,776,投影任务令牌数相同,为 13,432。这是一次后续验证,而非额外的配对延迟比较。该 JSON 分别存储其运行时和当前源固定项;原始试验收据和历史源固定项保持不变。

共享查询性能审查后续

审查中提出的存储别名示例在被审查的生产代码上已经返回 unknown:精确的负向源用例通过,公共 CLI 返回一个具有零显式偏好的动态窗口。共享的 reference-store 生产者记录构造前的赋值逃逸。没有更改任何变更规则;负向回归得以保留。

重复效应开销是可复现的。候选发现只需要词法身份,却收集了完整的变更报告;每次后续捕获也会在检查先前的逃逸之前物化每个效应。共享索引现在提供仅词法查找和提前退出谓词。窗口和请求分析使用这些操作。同一所有者仍然向 require-source 消费者提供完整效应,该消费者需要经过过滤的效应种类;没有添加第二次解释或持久缓存。

保留的扩展控制用于在合成容量输入上测量真实生产源码分析;这不是真实应用或代理任务。所有样本和模块哈希均被保留。三个连续样本的 CPU 中位数如下:

共享选项构造函数 之前 (CPU 秒) 之后 (CPU 秒)
256 0.29703 0.17821
512 0.96105 0.08709
1024 4.41298 0.20032

第一个 256 样本是每个进程中的首次算法执行;后续轮次和更大规模可以使用预热后的 V8 代码。这些中位数混合了这种推进过程,并不能建立跨应用的冷任务扩展性。一个确定性回归另行将 128 次捕获的逃逸效应读取限制在至多 4N,同时要求未索引的未知项、有效的首次捕获和未知的复用内容。计时不是测试门禁。在构建每个固定检出后,使用相同的资源观察器,通过 node experiments/analysis-efficiency/window-option-scaling.mjs LABEL 256,512,1024 复现容量控制。

重构后,10 个聚焦文件中的 107 个用例均通过,包括请求 CLI/MCP、require-source、worker-schema、身份、容量和保留事实工作流。在 9207ece2090208c272d2689c4002438ceda41145 上进行的一次新真实 Joplin 运行保留了精确的完整答案和语义指纹,包括 CLI/MCP 对等性和相同的 13,432 个投影任务令牌。其测量结果为 44.607 秒 / 43.883 CPU 秒 / 峰值 cgroup 字节 1,666,560,000。因此,对于测试的模式,容量改进是明确的,但不声称对一般真实应用有任何加速。新阶段分别存储当前源/运行时固定项和验证;所有先前的收据保持不变。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 rea2/rea