不说“轻量”,而是公布具体数据的理由
“轻量”这个说法没有什么可供验证。mote 明确规定了八个用于说明自身表现的数字,并同时公布测量方法、条件和原始数据。

Markdown 编辑器通常会这样介绍自己。
快速。轻量。流畅。
但如果数字缺少条件,它就和形容词没有区别。空闲 CPU 是在什么时候测的,又测了多久。启动时间是从哪里计算到哪里。因为条件不同的数字无法比较。
所以,mote 将公开的性能指标确定为 8 项。每项指标都记录了测量方法和条件、排除对象、比较规则、注意事项以及预算。还逐一附上了测量脚本。
文档、结果和代码全部使用相同的名称。这样就能立即追踪数字来自哪里。
数字必须附带条件
mote 遵守四项原则。
每个测量值都同时保存数值、单位、统计量、样本数和原始样本。缺少单位的结果会在检查阶段被拒绝。
没有测量过的值就不填写。如果无法测量,就注明原因并留空。不会用估算值填补。
只在同一台机器和同一次会话中进行比较。不会把不同日期、不同设备得出的数字并排放在一起。
测量条件也会与数字一同公开。尤其是刷新率和 CPU governor,始终都会注明。如果这些条件不同,就无法正确比较延迟时间和启动时间。

我们没有重新发明测量方法。
从按键输入到画面发生变化的延迟,完全采用 Pavel Fatin 的 Typometer 所使用的方法。在应用外部输入按键,然后检查像素发生变化所需的时间。启动时间则像 VS Code 那样按阶段拆分,并区分冷启动和热启动。
延迟应该端到端测量,而不是在框架内部测量,这一原则来自 Dan Luu 的文章。
我们亲自在相同条件下进行了比较
对于竞品应用的性能,我们没有引用其他地方的数字,而是亲自在同一台笔记本电脑上进行了测量。
打开同一个 100KB 文档,使用同一份脚本分别运行每款应用 7 次。所有应用都使用行内编辑界面,指针位置也保持一致。
所有进程的内存使用量如下。
- mote:78MB
- Typora:453MB
- Obsidian:361MB
- MarkText:416MB
输入时的 CPU 使用率,以单个核心为基准,分别为 10.9%、103%、152% 和 136%。进程数则分别为 1 个、8 个、7 个和 6 个。
mote 的内存使用量少了 4.6 倍到 5.8 倍。输入时使用的 CPU 少了 9.4 倍到 14 倍。
内存不是按 RSS,而是按 PSS 计算的。RSS 可能会重复计算多个进程共享的内存。PSS 会按照进程数量分摊共享内存后进行计算。这也与系统监视器采用的方式相同。
不利的数字也原样保留
仅仅打开应用而不进行操作时,CPU 使用率分别为 mote 0.0%、Typora 0.1%、Obsidian 0.8%、MarkText 0.6%。
Typora 在空闲状态下也几乎不使用 CPU。因此,不能把“打开后什么也不做”当作比 Typora 更好的地方来宣传。
Web shell 使用了 3.6%,反而比 Typora 更差。
消除应用内部的循环定时器仍然很重要。但应当遵守的原则和竞争优势是两回事。
空闲帧没有与竞品应用进行比较。mote 的目标是在 10 秒内产生 0 帧,但其他应用没有能以相同方式进行确认的帧计数器。
因此,竞品应用对应的栏位保持为空。空白不等于 0。
如果无法比较,就不进行比较
我们还会确认文件打开后,在未经修改的情况下保存,原文是否仍能保持不变。
mote 会检查 652 个 CommonMark 示例。还会打开并重新保存仓库中的所有文档,然后按字节确认是否完全一致。只要有一处不同,就不会将其视为性能问题,而会视为数据丢失缺陷。
我们没有填写竞品应用的结果。因为很难在相同条件下将保存过程自动化。
测量前也会检查机器状态。如果正在进行编译,就不会开始测量。只有当浏览器确实大量占用 CPU 时才会阻止测量。负载平均值、CPU 空闲率、判断标准以及测量当时的数值,都会保留在结果中。
这条规则是在经历失败之后制定的。
在开启大量占用 CPU 的浏览器时测量启动时间,结果看起来像是性能下降了。让此前的提交与当前提交在相同负载下交替接受测量后发现,原因不是代码回归,而是机器负载。
从那以后,我们不再只看一个绝对值来判断启动时间。
超出预算就无法合并
性能预算不只是写在文档里的目标。它是构建要想通过就必须遵守的标准。
标准分为 hard 和 report。
hard 是已通过决策文档确定具体数值的项目。只要有一项超出标准,检查就会失败。也不存在另行批准例外的机制。
report 是依据尚不充分,或受到平台限制较大影响的项目。会记录数值,但不会阻止构建。
如果用依据不足的数字阻止构建,人们就会开始回避测量本身。因此,只有确定无疑的标准才会被用作门禁。

测量脚本、原始 CSV 和结果 JSON 会一同保存在仓库中。在相同条件下运行相同脚本,就能重新生成表格。我们也在准备将测量工具和测试文档作为公开基准测试仓库发布。
只挑选好看的数字不叫公开。
把测量了什么、如何测量、当时是什么条件,以及哪些内容未能测量,全都一起展示出来。这就是 mote 公开数字的方式。