Warning: These results are preliminary - use with caution (they may e.g. be from different browser versions). Official results are published on the results page.

The benchmark was run on a Razer Blade 15 Advanced (i7-8750H, 64 GB RAM, Fedora 33 beta (Linux 5.8.13-300, mitigations=off), Chrome 86.0.4240.75 (64-bit))

Keyed results

Keyed implementations create an association between the domain data and a dom element by assigning a 'key'. If data changes the dom element with that key will be updated. In consequence inserting or deleting an element in the data array causes a corresponding change to the dom.

Duration in milliseconds ± 95% confidence interval (Slowdown = Duration / Fastest)


Duration for...
react-hooks-v17.0.1react-mobx-bucket-v16.14.0 + 6.0.1react-mobX-v17.0.1 + 5.15.4react-redux-v17.0.1 + 7.2.1alpine-v2.7.0angular-v8.2.14angular-ng-v10.0.4angular-noopzone-v8.0.1angular-optimized-v8.0.1angularjs-v1.7.8apprun-v2.23.12attodom-v0.12.0bdc-v0.3.0blazor-wasm-v5.0.100-rc.2.20479.15bobril-v8.11.2choo-v6.13.0crank-v0.2.1dojo-v8.0.0-alpha.1domc-v0.0.12domdiff-v2.2.2dominator-v0.5.0domvm-v3.4.12doz-v3.0.1dyo-v1.0.0elm-v0.19.1-3ember-v3.20.4endorphin-v0.5.2etch-v0.14.1fntags-v0.1.7fullweb-helpers-v0.1.0fullweb-template-v0.1.0ganic-v2.1.2glasgow-v0.2.7glimmer-v0.14.0-alpha.13helix-v0.0.10heresy-v0.26.1hullo-v0.8.2hyperapp-v2.0.4hyperhtml-v2.32.1imba-v1.5.2inferno-v7.2.1isotope-v0.2.0ivi-v0.27.1knockout-v3.5.0ko-jsx-v0.14.1lighterhtml-v2.5.0lit-element-v2.3.1lit-html-v1.1.0ls-element-v1.1.7marionette-v4.0.0-beta.1marionette-jquery-v4.0.0-beta.1marko-v4.12.3mimbl-v0.1.10miso-v1.4.0misojs-v1.1.0.0mithril-v2.0.4mobx-jsx-v0.12.4nervjs-v1.4.3neverland-v3.3.2petit-dom-v0.2.0preact-v10.5.2ractive-v1.3.6rax-v0.6.7react-v17.0.1react-easy-state-v17.0.1 + 6.3.0react-redux-hooks-v17.0.1 + 7.2.1react-tracked-v17.0.1 + 1.4.2reagent-v0.10reaml-preact-v0.15.0 + 10.5.2reaml-react-v0.15.0 + 17.0.1reason-react-v0.7.0redom-v3.27.0resonatejsriot-v4.12.0san-v3.9.2scarletsframe-v0.28.7sifrr-v0.0.5sinuous-v0.15.1skruv-v0.0.5-1solid-v0.20.0solid-state-v0.20.0stage0-v0.0.2stdweb-v0.4.17svelte-vinvalid (no package-lock)uhtml-v1.8.1vanillajsvanillajs-1vanillajs-wcvidom-v0.11.0vue-v2.6.2vue-next-v3.0.0-rc.4vue2-composition-api-v0.6.5vuerx-jsx-v0.0.8wasm-bindgen-v0.2.47yew-v0.17.2
Implementation notes772 772 796 772 800 800 772 772 772 800 800 772 772 800 772 800 800 800 800 796 772 772 772 772 772 772
creating 1,000 rows
162.92.2
(1.00)
195.12.6
(1.20)
210.05.2
(1.29)
214.06.0
(1.31)
updating all 1,000 rows (5 warmup runs).
144.51.3
(1.00)
158.11.1
(1.09)
148.12.7
(1.03)
165.23.8
(1.14)
updating every 10th row for 1,000 rows (3 warmup runs). 16x CPU slowdown.
215.72.0
(1.00)
228.24.5
(1.06)
245.28.3
(1.14)
300.48.5
(1.39)
highlighting a selected row. (no warmup runs). 16x CPU slowdown.
109.57.0
(1.33)
126.32.7
(1.53)
145.31.5
(1.76)
82.41.1
(1.00)
swap 2 rows for table with 1,000 rows. (5 warmup runs). 4x CPU slowdown.
452.12.3
(1.00)
459.04.0
(1.02)
486.924.1
(1.08)
452.22.6
(1.00)
removing one row. (5 warmup runs).
24.50.2
(1.00)
25.00.3
(1.02)
24.50.7
(1.00)
37.30.4
(1.52)
creating 10,000 rows
1,663.930.2
(1.05)
1,837.291.3
(1.15)
1,591.86.3
(1.00)
1,959.542.3
(1.23)
appending 1,000 to a table of 10,000 rows. 2x CPU slowdown
308.03.8
(1.00)
368.79.8
(1.20)
383.21.6
(1.24)
388.91.4
(1.26)
clearing a table with 1,000 rows. 8x CPU slowdown
157.41.4
(1.00)
166.92.2
(1.06)
229.92.6
(1.46)
170.80.9
(1.08)
of all factors in the table1.041.141.201.21NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
compare: Green means significantly faster, red significantly slower

Startup metrics (lighthouse with mobile simulation)

react-hooks-v17.0.1react-mobx-bucket-v16.14.0 + 6.0.1react-mobX-v17.0.1 + 5.15.4react-redux-v17.0.1 + 7.2.1alpine-v2.7.0angular-v8.2.14angular-ng-v10.0.4angular-noopzone-v8.0.1angular-optimized-v8.0.1angularjs-v1.7.8apprun-v2.23.12attodom-v0.12.0bdc-v0.3.0blazor-wasm-v5.0.100-rc.2.20479.15bobril-v8.11.2choo-v6.13.0crank-v0.2.1dojo-v8.0.0-alpha.1domc-v0.0.12domdiff-v2.2.2dominator-v0.5.0domvm-v3.4.12doz-v3.0.1dyo-v1.0.0elm-v0.19.1-3ember-v3.20.4endorphin-v0.5.2etch-v0.14.1fntags-v0.1.7fullweb-helpers-v0.1.0fullweb-template-v0.1.0ganic-v2.1.2glasgow-v0.2.7glimmer-v0.14.0-alpha.13helix-v0.0.10heresy-v0.26.1hullo-v0.8.2hyperapp-v2.0.4hyperhtml-v2.32.1imba-v1.5.2inferno-v7.2.1isotope-v0.2.0ivi-v0.27.1knockout-v3.5.0ko-jsx-v0.14.1lighterhtml-v2.5.0lit-element-v2.3.1lit-html-v1.1.0ls-element-v1.1.7marionette-v4.0.0-beta.1marionette-jquery-v4.0.0-beta.1marko-v4.12.3mimbl-v0.1.10miso-v1.4.0misojs-v1.1.0.0mithril-v2.0.4mobx-jsx-v0.12.4nervjs-v1.4.3neverland-v3.3.2petit-dom-v0.2.0preact-v10.5.2ractive-v1.3.6rax-v0.6.7react-v17.0.1react-easy-state-v17.0.1 + 6.3.0react-redux-hooks-v17.0.1 + 7.2.1react-tracked-v17.0.1 + 1.4.2reagent-v0.10reaml-preact-v0.15.0 + 10.5.2reaml-react-v0.15.0 + 17.0.1reason-react-v0.7.0redom-v3.27.0resonatejsriot-v4.12.0san-v3.9.2scarletsframe-v0.28.7sifrr-v0.0.5sinuous-v0.15.1skruv-v0.0.5-1solid-v0.20.0solid-state-v0.20.0stage0-v0.0.2stdweb-v0.4.17svelte-vinvalid (no package-lock)uhtml-v1.8.1vanillajsvanillajs-1vanillajs-wcvidom-v0.11.0vue-v2.6.2vue-next-v3.0.0-rc.4vue2-composition-api-v0.6.5vuerx-jsx-v0.0.8wasm-bindgen-v0.2.47yew-v0.17.2
a pessimistic TTI - when the CPU and network are both definitely very idle. (no more CPU tasks over 50ms)
2,586.00.3
(1.00)
2,940.77.3
(1.14)
3,089.52.7
(1.19)
2,703.10.6
(1.05)
the total ms required to parse/compile/evaluate all the page's scripts
55.10.2
(1.00)
74.76.2
(1.35)
79.21.4
(1.44)
69.30.4
(1.26)
network transfer cost (post-compression) of all the resources loaded into the page.
271.60.0
(1.00)
324.30.0
(1.19)
349.70.0
(1.29)
289.80.0
(1.07)
of all factors in the table1.001.231.301.12NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN

Memory allocation in MBs ± 95% confidence interval

react-hooks-v17.0.1react-mobx-bucket-v16.14.0 + 6.0.1react-mobX-v17.0.1 + 5.15.4react-redux-v17.0.1 + 7.2.1alpine-v2.7.0angular-v8.2.14angular-ng-v10.0.4angular-noopzone-v8.0.1angular-optimized-v8.0.1angularjs-v1.7.8apprun-v2.23.12attodom-v0.12.0bdc-v0.3.0blazor-wasm-v5.0.100-rc.2.20479.15bobril-v8.11.2choo-v6.13.0crank-v0.2.1dojo-v8.0.0-alpha.1domc-v0.0.12domdiff-v2.2.2dominator-v0.5.0domvm-v3.4.12doz-v3.0.1dyo-v1.0.0elm-v0.19.1-3ember-v3.20.4endorphin-v0.5.2etch-v0.14.1fntags-v0.1.7fullweb-helpers-v0.1.0fullweb-template-v0.1.0ganic-v2.1.2glasgow-v0.2.7glimmer-v0.14.0-alpha.13helix-v0.0.10heresy-v0.26.1hullo-v0.8.2hyperapp-v2.0.4hyperhtml-v2.32.1imba-v1.5.2inferno-v7.2.1isotope-v0.2.0ivi-v0.27.1knockout-v3.5.0ko-jsx-v0.14.1lighterhtml-v2.5.0lit-element-v2.3.1lit-html-v1.1.0ls-element-v1.1.7marionette-v4.0.0-beta.1marionette-jquery-v4.0.0-beta.1marko-v4.12.3mimbl-v0.1.10miso-v1.4.0misojs-v1.1.0.0mithril-v2.0.4mobx-jsx-v0.12.4nervjs-v1.4.3neverland-v3.3.2petit-dom-v0.2.0preact-v10.5.2ractive-v1.3.6rax-v0.6.7react-v17.0.1react-easy-state-v17.0.1 + 6.3.0react-redux-hooks-v17.0.1 + 7.2.1react-tracked-v17.0.1 + 1.4.2reagent-v0.10reaml-preact-v0.15.0 + 10.5.2reaml-react-v0.15.0 + 17.0.1reason-react-v0.7.0redom-v3.27.0resonatejsriot-v4.12.0san-v3.9.2scarletsframe-v0.28.7sifrr-v0.0.5sinuous-v0.15.1skruv-v0.0.5-1solid-v0.20.0solid-state-v0.20.0stage0-v0.0.2stdweb-v0.4.17svelte-vinvalid (no package-lock)uhtml-v1.8.1vanillajsvanillajs-1vanillajs-wcvidom-v0.11.0vue-v2.6.2vue-next-v3.0.0-rc.4vue2-composition-api-v0.6.5vuerx-jsx-v0.0.8wasm-bindgen-v0.2.47yew-v0.17.2
Memory usage after page load.
1.3
(1.00)
1.7
(1.28)
1.5
(1.13)
1.4
(1.06)
Memory usage after adding 1000 rows.
4.1
(1.00)
5.8
(1.42)
5.5
(1.35)
7.4
(1.81)
Memory usage after clicking update every 10th row 5 times
4.9
(1.00)
6.5
(1.33)
6.2
(1.27)
8.3
(1.72)
Memory usage after clicking create 1000 rows 5 times
4.9
(1.00)
7.6
(1.57)
7.3
(1.49)
8.2
(1.69)
Memory usage after creating and clearing 1000 rows 5 times
3.0
(1.00)
4.3
(1.41)
4.1
(1.35)
3.1
(1.03)
of all factors in the table1.001.401.311.42NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN

Non keyed results

Non keyed implementations are allowed to reuse existing dom elements. In consequence inserting or deleting an element in the data array might append after or delete the last table row and update the contents of all elements after the inserting or deletion index. This can perform better, but can cause problems if dom state is modified externally.

Duration in milliseconds ± 95% confidence interval (Slowdown = Duration / Fastest)


Duration for...
angular-v8.0.1apprun-v2.23.12aurelia-v1.3.0bdc-v0.3.0delorean-v0.1.0dojo-vinvalid (no package-lock)domc-v0.0.12domdiff-v2.2.2domvm-v3.4.12doz-v3.0.1elm-v0.19.1-3endorphin-v0.5.2etch-v0.14.1halogen-v5.0.0heresy-v0.26.1hullo-v0.8.2imba-v1.5.2incr_dom-v0.13.0inferno-v7.2.1lighterhtml-v2.5.0lit-element-v2.3.1lit-html-v1.1.0literaljs-v7.0.1mimbl-v0.1.10miso-v1.4.0moon-v1.0.0-beta.4neow-v0.0.11neverland-v3.3.2polymer-v2.0.0ractive-v1.3.6react-v16.8.6redom-v3.27.0riot-v4.12.0san-v3.9.2scarletsframe-v0.28.7seed-v0.6.0sifrr-v0.0.3simi-v0.2.0-dev1simulacra-v2.1.5slim-js-v3.3.0stage0-v0.0.2stdweb-v0.4.17svelte-v3.18.1uhtml-v1.8.1vanilla-dom-framework-v0.0.13vanillajsvanillajs-1vue-v2.6.2vue-next-v3.0.0-rc.4vuera-v0.2.2
Implementation notes772 796 772 800 800 800 772 800 800 800 772 772 772 772
creating 1,000 rows
updating all 1,000 rows (5 warmup runs).
updating every 10th row for 1,000 rows (3 warmup runs). 16x CPU slowdown.
highlighting a selected row. (no warmup runs). 16x CPU slowdown.
swap 2 rows for table with 1,000 rows. (5 warmup runs). 4x CPU slowdown.
removing one row. (5 warmup runs).
creating 10,000 rows
appending 1,000 to a table of 10,000 rows. 2x CPU slowdown
clearing a table with 1,000 rows. 8x CPU slowdown
of all factors in the tableNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
compare: Green means significantly faster, red significantly slower

Startup metrics (lighthouse with mobile simulation)

angular-v8.0.1apprun-v2.23.12aurelia-v1.3.0bdc-v0.3.0delorean-v0.1.0dojo-vinvalid (no package-lock)domc-v0.0.12domdiff-v2.2.2domvm-v3.4.12doz-v3.0.1elm-v0.19.1-3endorphin-v0.5.2etch-v0.14.1halogen-v5.0.0heresy-v0.26.1hullo-v0.8.2imba-v1.5.2incr_dom-v0.13.0inferno-v7.2.1lighterhtml-v2.5.0lit-element-v2.3.1lit-html-v1.1.0literaljs-v7.0.1mimbl-v0.1.10miso-v1.4.0moon-v1.0.0-beta.4neow-v0.0.11neverland-v3.3.2polymer-v2.0.0ractive-v1.3.6react-v16.8.6redom-v3.27.0riot-v4.12.0san-v3.9.2scarletsframe-v0.28.7seed-v0.6.0sifrr-v0.0.3simi-v0.2.0-dev1simulacra-v2.1.5slim-js-v3.3.0stage0-v0.0.2stdweb-v0.4.17svelte-v3.18.1uhtml-v1.8.1vanilla-dom-framework-v0.0.13vanillajsvanillajs-1vue-v2.6.2vue-next-v3.0.0-rc.4vuera-v0.2.2
a pessimistic TTI - when the CPU and network are both definitely very idle. (no more CPU tasks over 50ms)
the total ms required to parse/compile/evaluate all the page's scripts
network transfer cost (post-compression) of all the resources loaded into the page.
of all factors in the tableNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN

Memory allocation in MBs ± 95% confidence interval

angular-v8.0.1apprun-v2.23.12aurelia-v1.3.0bdc-v0.3.0delorean-v0.1.0dojo-vinvalid (no package-lock)domc-v0.0.12domdiff-v2.2.2domvm-v3.4.12doz-v3.0.1elm-v0.19.1-3endorphin-v0.5.2etch-v0.14.1halogen-v5.0.0heresy-v0.26.1hullo-v0.8.2imba-v1.5.2incr_dom-v0.13.0inferno-v7.2.1lighterhtml-v2.5.0lit-element-v2.3.1lit-html-v1.1.0literaljs-v7.0.1mimbl-v0.1.10miso-v1.4.0moon-v1.0.0-beta.4neow-v0.0.11neverland-v3.3.2polymer-v2.0.0ractive-v1.3.6react-v16.8.6redom-v3.27.0riot-v4.12.0san-v3.9.2scarletsframe-v0.28.7seed-v0.6.0sifrr-v0.0.3simi-v0.2.0-dev1simulacra-v2.1.5slim-js-v3.3.0stage0-v0.0.2stdweb-v0.4.17svelte-v3.18.1uhtml-v1.8.1vanilla-dom-framework-v0.0.13vanillajsvanillajs-1vue-v2.6.2vue-next-v3.0.0-rc.4vuera-v0.2.2
Memory usage after page load.
Memory usage after adding 1000 rows.
Memory usage after clicking update every 10th row 5 times
Memory usage after clicking create 1000 rows 5 times
Memory usage after creating and clearing 1000 rows 5 times
of all factors in the tableNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN

Known Issues

634
The HTML structure for the implementation is not fully correct.
694
Keyed implementations must move the DOM nodes for swap rows
772
Implementation uses manual DOM manipulations
796
Implementation uses explicit requestAnimationFrame calls
800
View state on the model
801
Implementation uses manual event delegation