Some people asked for an updated – and there were some interesting updates and contributions, so it’s a good time for a new round of the js web framework benchmark.

What’s changed

Angular moved to version 4.1

Polymer reached version 2

Mithril moved to 1.1

Marko and Glimmer were added

as well as a few smaller frameworks: ivi, surplus, rx-domh, Datum, pico-dom, hyperapp, svelte. stemjs and slimjs

A new benchmark that measures startup duration

A result table with filtering and sorting – the static table was getting bigger and bigger…

About the benchmark

If this is the first time you look at the benchmarks or you’ve somehow managed to forget about them you can read here what the benchmarks measure.

Here’s an article about how we use webdriver to extract the duration from the timeline for the measurement, though in the mean time we’ve switched to a typescript implementation of the test driver. What’s important is that we measure the duration as reported in the chrome timeline and measure from the event start until repainting in the browser finished (i.e. this is much longer than the time the pure javascript code needs).

This link allows you to play with the benchmark in your browser. All benchmarks report some approximate duration on the console. But please note that this is just for fun. The results table’s measurement is as described above.

There are two categories for the measurements, “keyed” and “non-keyed”. Details can be read here, put shortly non-keyed implementations can be faster, because they are allowed to freely choose the fastest way to update the DOM. This may cause problems e.g. with css transitions.

Please note that as with all benchmarks the data should be interpreted carefully. Measurement has some inaccuracy, such that each run varies a bit. We’re reporting the average of 20 runs per benchmark and framework here.

Results





(Click here for a filterable and sortable version or here a for static version if your browser doesn’t support es6 yet.)

Conclusions