Number of warm-up runs should not be the same every time
I found an irregularity on a handful of benchmarks where the duration was 10 times the typical duration, just because the assigned number of warm-up runs led to garbage collection on the timed run (or something like that).
In my example, select row took ~6ms when the number of warm-up runs was 0, 10, or 20. But it took 60ms with 5 warm-up runs.
I was using tinygo to compile to wasm, so it could be that specific allocator / runtime that leads to this issue.
The difference is easy to see in the screenshot below. goui-alt is the same app compiled with the standard go compiler. Tinygo performs better than Go for the most part, but the warm-up runs in a few instances can cause tinygo's runtime to be slow in a consistent way.
Just changing the number of warm-up runs to 8 completely changed the results:
Suggestion
Instead of 5 warm-ups for everything, why don't we make it rand(5), rand(10), or nth-run % 5?
Source: krausest/js-framework-benchmark