japgolly / scalajs-benchmark   0.10.0

Apache License 2.0 Website GitHub

Benchmarks: write in Scala or JS, run in your browser. Live demo:

Scala versions: 3.x 2.13
Scala.js versions: 1.x

scalajs-benchmark

Build Status

Benchmarks: write in Scala or JS, run in your browser.

See an online demo here: https://japgolly.github.io/scalajs-benchmark/.
The tiny source code is here: gh-pages/demo.

ChangelogsLatest: 0.10.0.

How do I use it?

  1. Include scalajs-benchmark as a dependency in your Scala.JS project.
libraryDependencies += "com.github.japgolly.scalajs-benchmark" %%% "benchmark" % "0.10.0"
  1. You write benchmarks.
import japgolly.scalajs.benchmark._ import japgolly.scalajs.benchmark.gui._ object Example { val suite = GuiSuite( Suite("Example Benchmarks")( // Benchmark #1 Benchmark("foreach") { var s = Set.empty[Int] (1 to 100) foreach (s += _) s }, // Benchmark #2 Benchmark("fold") { (1 to 100).foldLeft(Set.empty[Int])(_ + _) } ) ) }

(Hey, can you make that 1 to 100 configurable in the GUI? You sure can.)

  1. Add a tiny loader HTML like this.

  2. Create a main app and point scalajs-benchmark at your suite of benchmarks.

import org.scalajs.dom.document import japgolly.scalajs.benchmark.gui.BenchmarkGUI object Main { def main(args: Array[String]) = { val body = document getElementById "body" BenchmarkGUI.renderSuite(body)(Example.suite) } }

If you have a library of different benchmarks, instead of using renderSuite, you use renderMenu to create an app that lets the user navigate the library and run benchmarks.

Example:

BenchmarkGUI.renderMenu(body)( suites.example.Examples.all, suites.scala.all)
  1. Compile; run in browser. Done.

Support

If you like what I do —my OSS libraries, my contributions to other OSS libs, my programming blog— and you'd like to support me, more content, more lib maintenance, please become a patron! I do all my OSS work unpaid so showing your support will make a big difference.


Note: This is not affiliated with the official Scala.JS project; it's just named to be informative rather than interesting.