Skip to content

Performance

How fast go-slides builds a deck, in how much memory, measured against marp-cli on the same machine.

The PPTX figures below are for v0.5.0 and the vector PDF figures for v0.4.0. The first table is for v0.3.0, the previous release, which renders slides concurrently and parses its fonts once (go-slides/slides#11).

go-slides and marp-cli 4.5.1 were run as subprocesses on the same decks, on an Apple M4 Max (16 CPUs) with a 1-minute load average under 8, five interleaved rounds after a warm-up. Time is the median wall time; memory is the peak of the whole process tree (marp-cli drives a Chrome, whose processes count).

DeckOutputgo-slidesmarp-cligo-slides memorymarp-cli memory
100 slidesHTML36 ms315 ms47 MiB140 MiB
100 slidesPDF1.14 s1.88 s242 MiB1,509 MiB
100 slidesPNG, every slide0.97 s5.44 s225 MiB1,354 MiB
100 slidesPPTX3.39 s8.03 s530 MiB1,373 MiB
gaia, 20 slidesPDF283 ms1.57 s154 MiB1,315 MiB
math and code, 20 slidesPNG, every slide250 ms2.32 s168 MiB1,286 MiB

Vector PDF

In v0.4.0 the PDF is drawn as vectors (see Command line). Same machine and method, 2026-10-19:

Deckgo-slidesmarp-cliv0.3.0go-slides sizemarp-cli sizev0.3.0 size
100 slides306 ms1,763 ms1,147 ms758 KiB837 KiB10.0 MiB
gaia, 20 slides93 ms1,546 ms285 ms32 KiB66 KiB582 KiB
math and code, 20 slides140 ms1,643 ms294 ms124 KiB335 KiB638 KiB

Memory for the 100-slide PDF: 158 MiB, against 1,512 MiB for marp-cli; CPU time 0.9 s against 2.7 s.

The v0.4.0 figures for the 100-slide PDF were measured on 2026-10-19 at 21:29, with a 1-minute load average of 7.7, over three rounds: go-slides 306 ms, 758 KiB and 158 MiB; marp-cli 1,838 ms, 837 KiB and 1,512 MiB.

Editable PPTX

Since v0.5.0 the PPTX is made of text boxes, shapes and pictures (see Command line). Measured on 2026-10-19 at 22:51, with a 1-minute load average of 7.1, over three rounds:

Deckgo-slidesmarp-cligo-slides sizemarp-cli sizego-slides memorymarp-cli memory
100 slides348 ms7,795 ms760 KiB7.2 MiB204 MiB1,370 MiB
gaia, 20 slides112 ms4,608 ms893 KiB4.8 MiB
math and code, 20 slides207 ms2,780 ms842 KiB1.5 MiB

For the 100-slide deck, v0.4.0 took 4.7 s, 4.8 MiB and 540 MiB. marp-cli’s PPTX holds pictures. Most of an editable deck’s size is the embedded fonts.

Why it is fast

  • No browser to start. marp-cli launches Chrome for every PDF, image and PPTX export; go-slides renders with go-webengine inside its own process.
  • Slides render in parallel, four at a time by default, and each image is written as soon as it is its turn: a long deck is never held in memory as images.
  • Fonts are parsed once per process, not once per slide.

What it does not win

  • PDF size, in v0.3.0. Each slide was an image in the PDF: 10 MiB against 837 KiB for the 100-slide deck. The vector PDF above is smaller than marp-cli’s.
  • CPU time on big decks. Four workers spend more CPU than the wall time shows: in v0.3.0, 3.2 s against marp-cli’s 2.7 s for the 100-slide PDF (0.9 s for the vector PDF).
  • Memory is an upper bound for marp-cli: Chrome’s processes share pages that the sum counts in each. Its largest single process is 220–320 MiB.

The method, every deck and mode, and the commands to reproduce the figures are in BENCHMARKS.md.

Created on by tannevaled

Modified on by tannevaled