本文件定义测量方法;正式结果由同机实际测试填入。当前文档不把“约 80%”目标写成已达成的性能结论。
旧方案使用 DBX 插件 0.1.1 的 WebView 覆盖层,新方案使用 LOLPing Lite 独立桌面版。记录 CPU、系统版本、显示器分辨率和缩放,固定音量、动画时长、信号大小及表情资源。
统计每个应用的完整进程树,包括输入 helper、旧 WebView 的所有渲染/浏览器/GPU 进程,以及打开时的新设置子进程。分别记录工作集、私有提交、空闲 CPU;系统 GPU 内存不包含在工作集内。避免把共享宿主中其他功能的开销归给插件。
每种方案、每个场景至少重复三次,以中位数作为正文数字,并保留各次原始数据:
- 启动并关闭设置,等待空闲缓冲回收后的后台空闲。
- 固定频率连续打信号。
- 固定动态表情播放。
- 设置窗口打开且停止交互。
- 关闭设置,等待子进程退出与缓存回收。
额外连续打开、关闭设置 20 次,核对设置进程全部退出、helper 不被重启、内存没有持续增长。内存降幅按 (旧方案中位数 − 新方案中位数) / 旧方案中位数 计算;不同统计指标分别报告,不能混算工作集和私有提交。
先完成打包和桌面 smoke 检查,再执行:
node scripts/benchmark-windows.mjs --baseline <0.1.1-windows-x64.dbxp>生产单实例和设置生命周期单独运行 node scripts/windows-lifecycle.mjs:验证重复启动复用同一进程、设置关闭后 helper 不变、--quit 清理完整进程树,并在连续 20 次设置开关后记录主进程工作集与私有提交。报告 dist/windows-lifecycle-report.json 给出前后五次中位数和每周期私有提交斜率;不把受系统回收影响的工作集硬编码为通过阈值。
默认使用 .stage/windows-x64 的独立版,通过 --benchmark --background 启动生产托盘、单实例和输入 helper,只额外启用继承管道用于测试控制。脚本用独立临时数据目录,不读取已安装应用设置。旧包保持原二进制,通过它原有的 framed RPC 启动。
两种方案交替顺序分别测三次。先预热相同信号、等待 22 秒回收空闲缓存,再采样;连续信号每 200 ms 预览一次,同一份动态 WebP 每 1.8 秒重播。每个采样窗默认 6 秒,记录窗末的内存及整个窗口的 CPU 时间差。CPU 为单核等效百分比,并非任务管理器按逻辑处理器总数归一化的比例;若子进程在窗口内退出,CPU 可能低估,原始数据记录其数量。
Windows 可能复用进程编号,因此每条亲子关系都要求子进程创建时间不早于当前父进程。实际读取内存与 CPU 时再核对 Get-Process.StartTime 和枚举时的 CreationDate,允许小于 1 ms 的时间表示误差;身份变化、根进程丢失或计数器读取失败会终止测量,不能作为零样本。可运行 pwsh -NoProfile -File scripts/benchmark/test-process-tree.ps1 验证模拟 PID 重用、根进程缺失与时间信息缺失的处理。
旧插件的设置界面依赖共享 DBX 宿主,因此“设置打开”和“关闭设置后”两项明确标为未测,不能与独立版直接同比。旧覆盖层使用机器当前安装的 WebView2 runtime。两方案均静音;预览调用实际渲染器但不注入真实键鼠输入,因此不覆盖音频内存、物理手势或输入到显示器延迟。
输出 dist/performance-windows.json 和 docs/performance-results-windows.md。原始 JSON 包含系统版本、CPU 型号、显示器尺寸/缩放、匿名进程名称、采样结果和二进制校验;不包含用户名、机器名、命令行、个人路径或进程 ID。只有 complete: true 的完整报告可以进入 Release。
Release 的 *.artifact.json 记录每个包的真实字节数、SHA-256 及暂存布局字节数。主包与可选 35 表情扩展包分别统计。对比上游 Electron v0.5.1 时,应注明 Windows 约 158 MiB、macOS 约 175 MiB 的原始安装包基线,以及本版本只内置默认 9 表情的资源边界。Linux AppImage 还包含 GTK 等平台依赖,不与 Windows 直接比较。
来源:lolPing v0.5.1。