环境
本页所有数据均来自同一台电脑:开发这款应用的笔记本,一套普通的集成显卡配置。Windows 版尚未在此测量,macOS 版仍在开发,完成后会在此添加对应数据。
| 机器 | 操作系统 | 显示器 | 备注 |
|---|---|---|---|
| 笔记本,Intel i5-11300H,23 GB,Iris Xe(Mesa 25.2) | Ubuntu 24.04,GNOME,X11 | 2560×1440 @ 180 Hz | 发布构建 1.0.0,提交 183cc22 |
测试文档:tools/perf/fixtures/doc100k.md(100 KB,874 行)· 运行 3 次,取中位数 · 指针停在窗口外 · 真实会话总线。
空闲帧
主张:没有操作时,mori 不进行绘制。在即时视图中打开文档,让编辑器失去焦点(插入符不闪烁),并在 10 秒内无任何输入(启动后 t = 5–15 s),统计编辑器自身的快照次数,即 GTK 每次要求编辑器绘制的次数。
| 平台 | 10 s 内的帧数 | CPU,平均 | 方法 |
|---|---|---|---|
| Linux | 0 | 0.0% | 通过 tools/perf/gate.sh 统计编辑器快照 |
启用插入符闪烁时(窗口获得焦点时的默认状态),每次闪烁只会触发一次编辑器重绘 — 变化的只有插入符 — 窗口失去焦点后立即停止。这个闪烁是应用唯一允许保留的计时器;空闲时没有其他重复触发源。
输入延迟
结论:从按键到像素,第 95 百分位 18.2 ms。 由 tools/perf/index/e2e_latency.sh 在进程之外测量:用 XTest 注入按键,然后轮询屏幕直到光标行发生变化。100 KB 文档,实时视图,2560×1440 · 180 Hz。119 次按键:p50 14.1、p95 18.2、p99 19.1、最大 20.4 ms。
这个数字包含按键到像素之间的一切:工具包、合成器,以及等待下一帧的时间。这段等待会落在 0 到一个刷新间隔之间的任意位置——在 180 Hz 下最多 5.6 ms、平均 2.8 ms——所以它只能与同样刷新率下测得的其他编辑器并列。显示器自身的响应时间没有计入;我们没有测过。
冷启动
结论:在什么都没有缓存的情况下打开 100 KB 文件,从启动到窗口 387 ms。 冷启动指全新进程并清空页缓存,二进制、库和文件都从磁盘读取。缓存尚在的日常情况下,同样的启动是 259 ms。计时从 exec 开始,到窗口出现在屏幕上结束;首次绘制是同一个计时停在编辑器第一次绘出文档的时刻。
| 编辑器 | exec → 窗口 | 缓存尚在 | 首次绘制 | 进程数 |
|---|---|---|---|---|
| mori | 387 ms | 259 ms | 377 ms | 1 |
| Typora | 814 ms | 511 ms | — | 9 |
| Obsidian | 2,975 ms | 2,862 ms | — | 7 |
| MarkText | 2,042 ms | 1,872 ms | — | 6 |
方法:tools/perf/run-index.sh,冷启动=清空页缓存的全新进程,启动时打开 100 KB 文件,测五次。内存是文档排版完成、应用进入空闲后从 /proc 读到的 PSS,再减去用空文档测得的同一读数——也就是文档本身对我们的开销:70 MB 中的 9.4 MB。其余是这台机器上每个 GTK4 应用都要付的工具包与 GPU 底座,它会随驱动而变,所以我们公布的是其中属于我们的那一份。 二进制文件为 6.1 MB。首次绘制读自编辑器自身的帧计数器,而那只有我们的 dev 构建才有,所以另外三个用 — 而不是猜测。
同一台电脑,同一份文档
Typora、Obsidian 和 MarkText,各自在其内联编辑视图(Typora 的所见即所得、Obsidian 的实时预览、MarkText)中打开同一份 100 KB 文档,在上述机器上,与我们的数字来自同一次运行。内存是文档排版完成、应用进入空闲后整个进程树的 PSS;空闲 CPU 是窗口获得焦点且无输入的三十秒内进程树的 CPU;输入 CPU 是以人的速度每 150 ms 键入一个字符、共约 700 字期间进程树的 CPU。
| 编辑器 | 版本 | PSS | 空闲 CPU | 输入 CPU | 进程数 |
|---|---|---|---|---|---|
| mori | 1.0.0,提交 183cc22 | 70 MB | 0.0% | 7.2% | 1 |
| Typora | 1.14.9 | 457 MB | 1.1% | 30.5% | 9 |
| Obsidian | 1.12.7 | 346 MB | 1.6% | 32.5% | 7 |
| MarkText | 0.20.0-rc.1 | 405 MB | 1.4% | 62.3% | 6 |
引擎最先分道扬镳的是空闲:窗口开着却什么都不做时,mori 用不到可测量的 CPU,每秒唤醒 0 次;三个 Electron 编辑器则停在 1.1–1.6 % 与每秒 29–75 次。第二处是输入:一个核的几分之一,对上三分之一到三分之二。第三处是内存:一个进程对六到九个,70 MB 对 346–457 MB。
MarkText 以 --no-sandbox 运行(它的沙箱在这个内核上启动不了);Obsidian 在单独的用户数据目录中运行。原始数据:tools/perf/results/2026-09-09-linux-myasus-180hz.json。
复现测试
测量脚本和结果文件都在仓库里;包含语料与原始数据的公开仓库正在准备,暂无日期。tools/perf/run-index.sh 运行全部指标,tools/perf/check.sh 按预算校验结果。如果你测出的数字与我们的相差超过 15 %,请 告诉我们;我们会公开这个差异。
最近一次运行:2026-09-09,针对提交 183cc22 运行了一次 tools/perf/run-index.sh——本页的所有数字,我们的和其他编辑器的,都来自那一次运行。每次发布都会重测。