环境
本页所有数据均来自同一台电脑:开发这款应用的笔记本,一套普通的集成显卡配置。macOS 和 Windows 版本仍在开发,完成后会在此添加对应数据。
| 机器 | 操作系统 | 显示器 | 备注 |
|---|---|---|---|
| 笔记本,Intel i5-11300H,23 GB,Iris Xe(Mesa 25.2) | Ubuntu 24.04,GNOME,X11 | 2560×1440 @ 60 Hz | 发布构建,提交 04cf7dc |
测试文档:tools/perf/fixtures/doc100k.md(100 KB,874 行)· 运行 3 次,取中位数 · 指针停在窗口外 · 真实会话总线。
空闲帧
主张:没有操作时,mote 不进行绘制。在即时视图中打开文档,让编辑器失去焦点(插入符不闪烁),并在 10 秒内无任何输入(启动后 t = 5–15 s),统计编辑器自身的快照次数,即 GTK 每次要求编辑器绘制的次数。
| 平台 | 10 s 内的帧数 | CPU,平均 | 方法 |
|---|---|---|---|
| Linux | 0 | 0.0% | 通过 tools/perf/gate.sh 统计编辑器快照 |
启用插入符闪烁时(窗口获得焦点时的默认状态),每次闪烁只会触发一次编辑器重绘 — 变化的只有插入符 — 窗口失去焦点后立即停止。这个闪烁是应用唯一允许保留的计时器;空闲时没有其他重复触发源。
输入延迟
主张:从按键到像素的第 95 百分位延迟为 9.7 ms。按键 → 处理完成:p95 0.29 ms。按键 → 像素(包含垂直同步):p95 9.7 ms。由 tools/perf/typing.sh 在进程内测量,使用 100 KB 文档和即时视图。
“处理完成”指输入事件已更新文档,并使受影响的布局失效;“像素”指下一次快照结束,由于需要等待帧时钟,因此下限受垂直同步约束(60 Hz 时为 16.7 ms)。在 300 次按键中,两组分布分别为 p50 0.01 / p95 0.29 / max 0.48 ms 和 p50 2.6 / p95 9.7 / max 12.7 ms;于 2026-09-02 在 M3 构建上测得,该提交早于下方的门槛测试。输入测试尚未放入结果目录,信任该数据前请重新运行。未计入显示器自身的响应时间;我们尚未测量。
冷启动
主张:启动并打开 100 KB 文件,到窗口出现用时 211 ms。冷启动指启动全新进程并同时打开文件;不做任何预热,也不清理页面缓存。计时从 exec 开始,到窗口映射时结束;首次绘制使用同一时钟,并在编辑器首次生成文档快照时停止。
| 平台 | exec → 窗口 | 首次绘制 | 二进制大小 | 载入后的 RSS(PSS) |
|---|---|---|---|---|
| Linux | 211 ms | 231 ms | 3.1 MB | 69 MB |
方法:tools/perf/gate.sh,冷启动 = 全新进程,启动时打开 100 KB 文件。PSS 在十五秒后从 /proc 读取,此时文档布局已完成,应用进入空闲状态。
同一台电脑,同一份文档
Typora、Obsidian 和 MarkText 分别在各自的行内编辑视图中打开同一份 100 KB 文档(Typora 的 WYSIWYG、Obsidian 的 Live Preview、MarkText),在上述电脑上由同一脚本测试。内存取启动十二秒后整个进程树的 PSS;空闲 CPU 取窗口获得焦点且无输入时第 5–10 秒的进程树 CPU;输入 CPU 取以每 30 ms 一个字符的速度输入约 150 个字符期间的进程树 CPU。每款编辑器运行七次,舍弃一次预热结果后取平均值。
| 编辑器 | 版本 | PSS | 空闲 CPU | 输入 CPU | 进程数 |
|---|---|---|---|---|---|
| mote | 预发布,提交 b17c3bf | 78 MB | 0.0% | 10.9% | 1 |
| Typora | 1.14.9 | 453 MB | 0.1% | 102.6% | 8 |
| Obsidian | 1.12.7 | 361 MB | 0.8% | 152.5% | 7 |
| MarkText | 0.19.1 | 416 MB | 0.6% | 135.8% | 6 |
Typora 的空闲 CPU 与我们一样低 — 我们如实说明。Chromium 在真正空闲时会节流,因此空闲一栏区分的是 mote 与 Obsidian、MarkText,而非 Typora。引擎间真正拉开差距的是内存和输入开销:一个进程对六至八个进程,每次按键的 CPU 开销约为十分之一。此处的 78 MB 高于上方的 69 MB,是因为这里统计了另一次会话中的完整进程树;GTK 和 Mesa 的基础占用在不同会话间会浮动十几兆字节。
MarkText 使用 --no-sandbox 运行(其沙盒无法在此内核上启动);Obsidian 在仅启用三个核心插件的新建库中运行。原始数据:experiments/2026-09-03-apps-idle-startup/raw.csv。
复现测试
测试工具、语料、原始 CSV 和结果 JSON 将随测试版发布到 GitHub 上的公开基准测试仓库。tools/perf/gate.sh <binary> :1 3 运行门槛测试;tools/perf/bench-apps.sh 运行对比测试。如果你的结果与我们相差超过 15 %,请告诉我们;我们会公布差异。
最近运行:门槛测试于 2026-09-03,针对提交 04cf7dc;对比测试针对 b17c3bf;输入延迟于 2026-09-02 在 M3 构建上测试。每次发布均重新运行。