跳至内容

性能

go-slides 构建演示文稿有多快、占用多少内存,在同一台机器上与 marp-cli 对比测量。

下文的 PPTX 数据针对 v0.5.0,矢量 PDF 数据针对 v0.4.0。 第一张表针对 v0.3.0, 即当时的上一个版本,该版本并行渲染幻灯片,并且只解析一次字体 (go-slides/slides#11)。

go-slides 和 marp-cli 4.5.1 以子进程方式在相同的演示文稿上运行,机器为 Apple M4 Max(16 个 CPU), 1 分钟平均负载低于 8,预热后交错进行五轮测试。 时间为实际耗时(wall time)的中位数;内存为整个进程树的峰值 (marp-cli 会驱动一个 Chrome,其进程也计算在内)。

演示文稿输出go-slidesmarp-cligo-slides 内存marp-cli 内存
100 张幻灯片HTML36 ms315 ms47 MiB140 MiB
100 张幻灯片PDF1.14 s1.88 s242 MiB1,509 MiB
100 张幻灯片PNG,全部幻灯片0.97 s5.44 s225 MiB1,354 MiB
100 张幻灯片PPTX3.39 s8.03 s530 MiB1,373 MiB
gaia,20 张幻灯片PDF283 ms1.57 s154 MiB1,315 MiB
数学公式与代码,20 张幻灯片PNG,全部幻灯片250 ms2.32 s168 MiB1,286 MiB

矢量 PDF

从 v0.4.0 起,PDF 以矢量方式绘制(参见 命令行)。机器和方法相同, 测于 2026-10-19:

演示文稿go-slidesmarp-cliv0.3.0go-slides 大小marp-cli 大小v0.3.0 大小
100 张幻灯片306 ms1,763 ms1,147 ms758 KiB837 KiB10.0 MiB
gaia,20 张幻灯片93 ms1,546 ms285 ms32 KiB66 KiB582 KiB
数学公式与代码,20 张幻灯片140 ms1,643 ms294 ms124 KiB335 KiB638 KiB

100 张幻灯片 PDF 的内存占用:158 MiB,marp-cli 为 1,512 MiB;CPU 时间 0.9 s,marp-cli 为 2.7 s。

v0.4.0 的 100 张幻灯片 PDF 数据测于 2026-10-19 21:29, 1 分钟平均负载为 7.7,共三轮:go-slides 306 ms、758 KiB、158 MiB;marp-cli 1,838 ms、837 KiB、1,512 MiB。

可编辑 PPTX

自 v0.5.0 起,PPTX 由文本框、形状和图片组成(参见 命令行)。测于 2026-10-19 22:51,1 分钟平均负载为 7.1,共三轮:

演示文稿go-slidesmarp-cligo-slides 大小marp-cli 大小go-slides 内存marp-cli 内存
100 张幻灯片348 ms7,795 ms760 KiB7.2 MiB204 MiB1,370 MiB
gaia,20 张幻灯片112 ms4,608 ms893 KiB4.8 MiB
数学公式与代码,20 张幻灯片207 ms2,780 ms842 KiB1.5 MiB

对于 100 张幻灯片的演示文稿,v0.4.0 耗时 4.7 s,大小 4.8 MiB,内存 540 MiB。marp-cli 的 PPTX 由图片组成。可编辑演示文稿的体积大部分来自内嵌字体。

为什么快

  • 无需启动浏览器。 marp-cli 每次导出 PDF、图片和 PPTX 时都要启动 Chrome;go-slides 则在自己的进程内用 go-webengine 渲染。
  • 幻灯片并行渲染,默认同时渲染四张,每张图片一轮到就立即写出: 长篇演示文稿永远不会以图片形式整体驻留在内存中。
  • 字体每个进程只解析一次,而不是每张幻灯片解析一次。

不占优势的方面

  • v0.3.0 的 PDF 大小。 当时 PDF 中每张幻灯片都是一张图片:100 张幻灯片的演示文稿为 10 MiB, marp-cli 为 837 KiB。上文的矢量 PDF 已经比 marp-cli 的更小。
  • 大型演示文稿的 CPU 时间。 四个工作线程消耗的 CPU 时间多于实际耗时所显示的: 在 v0.3.0 中,100 张幻灯片的 PDF 为 3.2 s,marp-cli 为 2.7 s (矢量 PDF 为 0.9 s)。
  • marp-cli 的内存是一个上限值:Chrome 的各进程共享内存页,而求和时每个进程都计入了这些页。 其中最大的单个进程为 220–320 MiB。

测试方法、每个演示文稿和模式,以及复现这些数据的命令,见 BENCHMARKS.md。

Created on by tannevaled

Modified on by tannevaled