KOReader UI plugins benchmark, round 2: latest releases, real 2,692-book library, and a mistake I fixed in round 1
Bottom line (real library, 2,692 EPUBs; lower is better)
Stack Restart → library Live Lua heap after stress Close book Verdict Stock 269 ms 14.1 MiB 29 ms baseline Project:Title (covers on) 279 ms 13.9 MiB 28 ms light, close to Stock Bookshelf 273 ms 20.3 MiB 30 ms light, close to Stock VOS 291 ms 15.6 MiB 46 ms light, close to Stock ZenOS 461 ms 22.3 MiB 60 ms in between SimpleUI 466 ms 66.0 MiB 232 ms heaviest (66–86 MiB with VOS/Bookshelf) Other measurements Stock With the plugin Bookends: page turn in a book 4.7 ms 16.7 ms Bookends: close book 27 ms 49 ms Bookends: live Lua heap 14.3 MiB 18.0 MiB (+3.7) Bookshelf's own shelf: page turn 17.5 ms (Stock's list) 133 ms default animation, ~38 ms animation off Library paging, every stack 15–17.5 ms per page distributions overlap, no rankingBookends is small in absolute terms, but not free.
Compared with my previous round
Mixed, with no plugin better across the board. Each plugin is compared with Stock of the same round (the rounds ran on different setups, so absolute times aren't comparable):
- ZenOS: retained heap above Stock fell from +23 to +8 MiB; library render 1.4x → 1.2x Stock. Restart, open and close got relatively slower.
- SimpleUI: library render improved (~3.5x → 2.4x Stock), heap about the same (+56 → +52 MiB), closing a book much slower (2.7x → 8.1x).
- Bookshelf: close to Stock in both rounds (+5 → +6 MiB), but its own shelf pages slower (84 → 133 ms default, 26 → 38 ms animation off).
- VOS: about the same, a bit heavier.
Several releases and the setup changed at once, so this shows direction, not cause.
Correction
In my first post Project:Title looked like the clear winner. That was my mistake: the harness never switched it to its cover list, while everything else ran covers. With covers on it is about as light as Stock (14 MiB, fastest book open at 98 ms) but its sort change is slower. A cover list costs roughly +20 ms on a sort change and +17 ms on first render for every stack that uses it.
Thanks, Andy
Caveat
This is an emulator comparison, not Kindle hardware: 100 ms here is not 100 ms on a Kindle (no E-Ink delays, different CPU/storage, no real memory pressure). The memory figure is one forced-GC checkpoint per stack. I also included my own unpublished minimal plugin as a reference point; it was indistinguishable from Stock.
Full tables, charts, reports and reproduction steps: https://github.com/d1-m4ss/kindle_benchmark
-----------
For scale: the same full matrix takes about 20 minutes on a Mac emulator. On the real Paperwhite it’s roughly 6–8.5 hours, plus charging and cooldown pauses. If I find that much time, there’ll be a real-device benchmark soon; this is just for context.
Scenario (Stock, 250 books) Mac emulator Paperwhite Slower by Library paging (sequential) 17.6 ms 172.7 ms 10× Library paging (cached) 19.5 ms 264.3 ms 14× Library first render 26.8 ms 373.3 ms 14× Change sort mode 32.5 ms 620.9 ms 19× Close book 36.6 ms 1012.0 ms 28× Open book 39.3 ms 1512.8 ms 39×