Performance of ES6 features relative to the ES5 baseline operations per second.
node chrome firefox edge safari
6.9.3 10.15.1 13.8.0 18.9.1 55 72 80 106 53 65 72 105 15.14959 18.17763 105 10
arrow tests babel 1.2x slower Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical 1.2x slower Identical Identical Identical
typescript Identical Identical Identical Identical Identical Identical Identical Identical Identical 1.2x slower Identical Identical 1.2x faster 1.2x slower Identical Identical
es6 Identical Identical Identical Identical Identical Identical Identical Identical Identical 1.3x slower Identical Identical 1.2x faster 1.2x slower Identical Identical
arrow-args tests babel Identical Identical Identical Identical Identical 1.7x faster Identical Identical Identical Identical Identical Identical 1.5x slower Identical Identical Identical
typescript Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect
es6 Identical Identical Identical Identical Identical 1.7x faster Identical Identical Identical Identical Identical Identical Identical Identical Identical 69x slower
arrow-declare tests babel 1.6x slower Identical 2.0x slower Identical 1.4x slower Identical Identical Identical 23x slower Identical Identical Identical 1.7x slower 1.4x slower Identical Identical
typescript 1.4x slower 1.3x faster Identical Identical 1.3x slower Identical Identical Identical 23x slower Identical Identical Identical 1.4x slower 1.6x slower Identical Identical
es6 1.4x slower Identical 2.0x slower Identical 1.3x slower Identical Identical Identical 56x slower Identical Identical Identical 1.5x slower 1.5x slower Identical Identical
bindings tests babel Identical Identical 2.0x slower Identical Identical Identical Identical Identical Identical Identical Identical Identical 1.4x slower Identical Identical Identical
typescript Identical 1.9x faster Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical 1.5x slower Identical Identical
es6 Identical Identical 2.0x slower Identical Identical Identical Identical Identical Identical 1.2x faster Identical Identical Identical 1.4x slower Identical Identical
bindings-compound tests babel Identical Identical 2.0x slower Identical Identical Identical Identical Identical Identical Identical Identical Identical 1.2x slower Identical Identical Identical
typescript Identical 1.7x faster Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical 1.4x slower Identical Identical
es6 Identical Identical 2.0x slower Identical 1.6x slower Identical Identical Identical Identical Identical Identical Identical Identical 1.4x slower Identical Identical
classes tests babel 1.9x slower Identical Identical 8x slower 1.5x slower Identical Identical 32x slower 33x slower 3x slower 23x slower 1.4x slower 1.2x slower Identical 30x slower 7x slower
babel-loose 1.7x slower 1.3x slower 1.5x slower 1.2x faster 1.6x slower 1.6x slower 1.5x slower 2.0x slower 34x slower Identical Identical Identical 1.6x slower Identical 1.9x slower 8x slower
babel-runtime 1.8x slower 1.3x slower 1.5x slower 8x slower 1.5x slower 1.6x slower 1.5x slower 33x slower 40x slower 4x slower 26x slower 1.6x slower 2.0x slower 1.2x slower 30x slower 7x slower
typescript Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical
es6 Identical Identical 1.3x slower Identical Identical Identical Identical Identical Identical Identical Identical Identical 1.5x slower 1.4x slower Identical Identical
defaults tests babel 1.5x slower 7x slower Identical Identical 1.4x slower 16x slower Identical Identical Identical Identical Identical 19x slower 575x slower 204x slower Identical 2.2x slower
babel-loose 1.9x slower 2.0x slower 2.5x slower Identical Identical Identical Identical Identical Identical 1.3x slower Identical
typescript Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical 1.3x slower Identical Identical
es6 Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical 1.3x slower Identical Identical
destructuring tests babel 2.4x slower 7x slower 5x slower Identical 1.4x slower 6x slower 5x slower Identical Identical Identical Identical 18x slower 3x slower 1.6x slower Identical 16x slower
babel-loose Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical 1.3x slower 1.2x slower Identical Identical
babel-runtime 2.5x slower 7x slower 5x slower 2.8x slower 1.4x slower 7x slower 5x slower 2.6x slower Identical Identical 12x slower 19x slower 4x slower 2.0x slower 2.5x slower 21x slower
typescript Identical 126x slower 155x slower 109x slower Identical 131x slower 121x slower 96x slower Identical 444x slower 459x slower 95x slower Identical 74x slower 91x slower Identical
es6 17x slower 5x slower 6x slower 5x slower 16x slower 3.0x slower 5x slower 5x slower 98x slower 19x slower 18x slower 49x slower 53x slower 55x slower 5x slower 9x slower
destructuring-simple tests babel Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical 1.3x slower Identical Identical Identical
typescript Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical 1.4x slower Identical Identical
es6 Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical 2.4x slower Identical 1.3x slower Identical Identical
for-of-array tests babel 18x slower Identical 1.4x slower 5x slower 17x slower Identical 1.4x slower 4x slower 16x slower Identical 17x slower 7x slower 10x slower Identical 4x slower 1.6x slower
babel-loose 1.4x slower Identical 4x slower 1.2x slower Identical 3x slower Identical Identical 8x slower 1.7x slower 3x slower 1.2x slower
babel-runtime 18x slower 17x slower 13x slower 13x slower 1.6x slower
typescript Identical 3x slower 4x slower 3x slower Identical 2.8x slower 4x slower 3x slower Identical 6x slower 16x slower 4x slower Identical 9x slower 3x slower Identical
es6 17x slower 1.2x slower 1.4x slower 1.3x slower 17x slower Identical 1.3x slower 1.2x slower 2.5x slower 1.5x slower 2.3x slower 2.4x slower 7x slower 8x slower 1.2x slower 1.3x slower
for-of-object tests babel 4x slower 2.4x slower 1.9x slower 2.8x slower 1.9x slower 2.1x slower 2.4x slower 2.6x slower 6x slower 2.4x slower 2.3x slower 2.6x slower 4x slower 1.3x slower 2.6x slower 2.3x slower
babel-loose 3x slower 2.2x slower 1.8x slower 1.9x slower 2.1x slower 2.0x slower 2.4x slower 2.0x slower 3x slower 1.3x slower 1.3x slower 2.3x slower 6x slower Identical 2.0x slower 2.5x slower
babel-runtime 4x slower 2.1x slower 5x slower 5x slower 2.3x slower
typescript Incorrect 2.2x slower 2.2x slower 1.8x slower Incorrect 2.7x slower 2.7x slower 1.9x slower Incorrect 2.4x slower 2.4x slower 1.5x slower Incorrect 1.5x slower 2.0x slower Incorrect
es6 4x slower 2.0x slower 1.8x slower 1.6x slower 1.8x slower 2.4x slower 2.2x slower 1.7x slower 2.6x slower 1.3x slower 1.3x slower 1.4x slower 4x slower 1.3x slower 1.7x slower 2.3x slower
generator tests babel 7x slower 5x slower 7x slower 11x slower 6x slower 5x slower 7x slower 17x slower 10x slower 15x slower 32x slower 52x slower 38x slower 10x slower 16x slower 8x slower
babel-loose 6x slower 4x slower 7x slower 13x slower 5x slower 4x slower 7x slower 17x slower 10x slower 13x slower 31x slower 53x slower 54x slower 11x slower 16x slower 8x slower
babel-runtime 6x slower 5x slower 7x slower 14x slower 6x slower 4x slower 7x slower 17x slower 9x slower 14x slower 31x slower 52x slower 45x slower 11x slower 16x slower 8x slower
typescript 7x slower 8x slower 11x slower 6x slower 7x slower 14x slower 37x slower 81x slower 43x slower 18x slower 14x slower
es6 6x slower 1.3x slower 1.5x slower 3x slower 7x slower 1.3x slower 1.5x slower 5x slower 11x slower 20x slower 42x slower 43x slower 24x slower 19x slower 5x slower 5x slower
map-set tests babel 5x slower 3x slower 2.4x slower 2.6x slower 4x slower 3x slower 2.8x slower 2.5x slower 13x slower 12x slower 17x slower 12x slower 24x slower 2.7x slower 2.5x slower 8x slower
babel-loose 13x slower 6x slower 47x slower 42x slower 22x slower
babel-runtime 17x slower 6x slower 46x slower 31x slower 22x slower
typescript 5x slower 2.9x slower 2.4x slower 2.6x slower 4x slower 4x slower 2.8x slower 2.5x slower 14x slower 11x slower 17x slower 12x slower 22x slower 2.6x slower 2.5x slower 8x slower
es6 5x slower 2.9x slower 2.4x slower 2.6x slower 4x slower 4x slower 2.8x slower 2.5x slower 13x slower 11x slower 17x slower 12x slower 23x slower 2.6x slower 2.5x slower 8x slower
map-set-lookup tests babel 9x faster 64x faster 73x faster 71x faster 8x faster 47x faster 75x faster 30x faster 36x faster 14x faster 9x faster 13x faster 60x faster 130x faster 91x faster 59x faster
babel-loose 2.1x faster 4x faster 4x faster 9x faster 9x faster
babel-runtime 1.9x faster 3x faster 4x faster 7x faster 9x faster
typescript 9x faster 69x faster 74x faster 70x faster 8x faster 50x faster 76x faster 30x faster 36x faster 12x faster 8x faster 13x faster 79x faster 111x faster 90x faster 60x faster
es6 9x faster 68x faster 75x faster 70x faster 8x faster 50x faster 76x faster 30x faster 35x faster 14x faster 9x faster 13x faster 77x faster 118x faster 91x faster 60x faster
map-set-object tests babel 8x slower 6x slower 4x slower 3x slower 8x slower 6x slower 5x slower 4x slower 5x slower 3x slower 6x slower 3x slower 45x slower 4x slower 5x slower 6x slower
babel-loose 19x slower 12x slower 15x slower 66x slower 16x slower
babel-runtime 21x slower 12x slower 15x slower 68x slower 16x slower
typescript 7x slower 6x slower 4x slower 3x slower 8x slower 6x slower 5x slower 4x slower 5x slower 2.9x slower 5x slower 3x slower 45x slower 4x slower 5x slower 6x slower
es6 8x slower 6x slower 4x slower 3x slower 8x slower 6x slower 5x slower 4x slower 5x slower 3.0x slower 5x slower 3x slower 45x slower 4x slower 5x slower 6x slower
map-string tests babel 2.4x slower Identical 1.7x slower 20x slower 1.8x slower 1.4x slower 25x slower 20x slower 59x slower 56x slower 63x slower Identical 11x slower 6x slower 18x slower 1.5x faster
babel-loose 12x slower 3x slower 514x slower 43x slower 4x slower
babel-runtime 12x slower 3x slower 508x slower 34x slower 4x slower
typescript 2.4x slower Identical 1.7x slower 19x slower 1.8x slower 1.4x slower 25x slower 20x slower 59x slower 53x slower 62x slower Identical 11x slower 7x slower 18x slower 1.5x faster
es6 2.4x slower Identical 1.7x slower 19x slower 1.7x slower 1.4x slower 25x slower 20x slower 59x slower 53x slower 62x slower Identical 11x slower 7x slower 18x slower 1.5x faster
new-target tests babel 4x faster 9x faster 1.3x faster 7x faster 12x faster 4x faster 3x faster 4x slower 4x slower 1.2x slower 3x faster
babel-loose 4x faster 9x faster 1.3x faster 7x faster 12x faster 4x faster 3x faster 4x slower 4x slower 1.2x slower 3x faster
babel-runtime 4x faster 9x faster 1.3x faster 7x faster 12x faster 3x faster 2.8x faster 4x slower 4x slower 1.3x slower 3x faster
typescript Identical Identical 1.7x slower Identical 1.6x faster 1.2x slower Identical 3x slower 3x slower Identical 1.2x slower
es6 1.9x slower 4x faster 9x faster 1.6x slower 2.7x slower 7x faster 12x faster 4x faster 25x faster 4x faster 7x faster 5x faster 1.3x faster Identical 3x faster 56x faster
object-assign tests babel 5x slower 1.7x faster 1.8x faster 1.7x faster 4x slower 1.9x faster 1.6x faster 1.7x faster 1.5x slower 1.6x slower 1.4x slower Identical 1.6x faster 4x faster 1.7x faster 2.1x slower
babel-loose 5x slower 4x slower 1.5x slower Identical 2.0x slower
babel-runtime 5x slower 4x slower 1.5x slower 1.5x faster 1.9x slower
typescript 5x slower 1.7x faster 1.7x faster 1.8x faster 4x slower 1.8x faster 1.9x faster 1.8x faster 1.5x slower 2.0x slower 1.3x slower Identical 1.8x faster 4x faster 1.7x faster 2.1x slower
es6 5x slower 1.8x faster 1.7x faster 1.8x faster 4x slower 1.8x faster 1.9x faster 1.8x faster 1.5x slower 1.8x slower 1.3x slower Identical 1.6x faster 4x faster 1.7x faster 2.1x slower
object-literal-ext tests babel 4x slower 2.4x slower 2.7x slower 3x slower 4x slower 2.6x slower 1.6x slower 3x slower 3.0x slower 1.5x slower 1.3x slower Identical 1.5x slower 1.6x slower 3x slower 1.4x slower
babel-loose Identical Identical Identical Identical Identical Identical 1.6x faster Identical Identical Identical Identical Identical Identical Identical Identical Identical
babel-runtime 4x slower 2.5x slower 3x slower 3x slower 4x slower 2.3x slower 1.6x slower 3x slower 3.0x slower 1.3x slower 1.4x slower Identical 1.5x slower 1.4x slower 3x slower 1.4x slower
typescript Identical Identical 1.3x slower Identical Identical Identical 1.7x faster Identical Identical Identical Identical Identical Identical Identical Identical Identical
es6 9x slower 5x slower 7x slower 7x slower 9x slower 4x slower 3x slower 5x slower 12x slower 1.2x slower Identical Identical Identical 1.3x slower 5x slower 2.7x slower
regex-u tests babel 1.6x slower 2.2x slower 6x slower 4x slower 1.7x slower 5x slower 7x slower 4x slower 1.2x slower 1.7x slower 1.8x slower 1.3x slower 2.6x slower 5x slower 4x slower 1.6x slower
typescript 1.5x slower 1.8x slower 1.8x slower 1.5x slower 1.4x slower 1.7x slower 1.9x slower 1.6x slower 1.2x slower 1.7x slower 2.0x slower 1.4x slower 1.8x slower 2.9x slower 1.7x slower 2.4x slower
es6 1.4x slower 1.9x slower 1.8x slower 1.6x slower 1.4x slower 1.6x slower 1.8x slower 1.6x slower 1.2x slower 1.9x slower 2.1x slower 1.3x slower 2.5x slower 3x slower 1.7x slower 2.4x slower
rest tests babel 6x faster 5x slower Identical 14x faster 6x faster 1.2x faster Identical Identical 1558x faster 594x faster 766x faster Identical Identical Identical Identical 23x slower
typescript 1.2x faster 39x slower 68x slower 2.5x slower 1.2x faster 5x slower 55x slower 30x slower 14x faster 53x faster 40x faster 25x slower 40x faster 17x faster 31x slower 41x slower
es6 1.2x faster Identical Identical 6x faster 1.3x faster 1.3x faster Identical Identical 17x faster 34x faster 26x faster 8x slower 14x faster 7x faster Identical 33x slower
spread tests babel Identical 1.4x slower 1.4x slower Identical Identical 1.4x slower 1.4x slower 1.4x slower Identical Identical Identical Identical Identical Identical 1.5x slower Identical
typescript Identical 16x slower 15x slower 1.3x faster Identical 11x slower 18x slower Identical Identical 6x slower 8x slower Identical Identical 14x slower Identical Identical
es6 20x slower Identical Identical Identical 22x slower 1.2x faster Identical Identical 5x slower 1.4x slower 1.6x slower 1.5x slower 1.7x slower 6x slower Identical 5x slower
spread-generator tests babel 19x slower 10x slower 12x slower 17x slower 29x slower 9x slower 13x slower 19x slower 7x slower 5x slower 6x slower 21x slower 14x slower 17x slower 16x slower 6x slower
babel-loose Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect Incorrect
babel-runtime 27x slower 10x slower 12x slower 17x slower 31x slower 9x slower 13x slower 18x slower 5x slower 5x slower 5x slower 21x slower 14x slower 18x slower 16x slower 6x slower
typescript 8x slower 9x slower 9x slower 7x slower 11x slower 10x slower 13x slower 16x slower 27x slower 18x slower 10x slower
es6 8x slower 2.7x slower 4x slower 6x slower 8x slower 2.6x slower 4x slower 7x slower 5x slower 5x slower 6x slower 15x slower 9x slower 15x slower 7x slower 4x slower
spread-literal tests babel 5x slower 7x slower 5x slower 7x slower 2.8x slower 6x slower 10x slower 8x slower Identical 1.7x faster 1.6x faster 1.6x slower 1.2x slower 1.4x slower 8x slower Identical
typescript 5x slower 18x slower 16x slower 8x slower 2.8x slower 19x slower 32x slower 10x slower Identical 6x slower 7x slower 2.6x slower 1.2x slower 11x slower 10x slower Identical
es6 8x slower 1.2x slower Identical 1.2x slower 9x slower Identical 1.3x slower 1.3x slower 5x slower 1.2x faster Identical 1.6x slower 2.2x slower 2.9x slower 1.3x slower 1.8x faster
super tests babel 13x slower 106x slower 44x slower 916x slower 12x slower 194x slower 47x slower 2068x slower 27x slower 44x slower 76x slower 5x slower 23x slower 14x slower 1892x slower 34x slower
babel-loose 3.0x slower Identical Identical Identical 1.8x slower Identical Identical Identical 8x slower 4x slower 33x slower Identical 5x slower 1.2x slower Identical 3x slower
babel-runtime 14x slower 86x slower 94x slower 964x slower 11x slower 145x slower 91x slower 2306x slower 27x slower 48x slower 116x slower 25x slower 24x slower 16x slower 2118x slower 33x slower
typescript Identical Identical Identical 1.2x slower Identical Identical Identical Identical Identical 4x slower 34x slower Identical Identical 1.2x slower Identical 1.8x slower
es6 4x slower 54x slower 117x slower 1.6x slower 4x slower 101x slower 121x slower 6x slower 56x slower 102x slower 689x slower Identical 1.7x slower 1.8x slower 6x slower 15x slower
template string tests babel Identical 88x slower 146x slower 66x slower Identical 97x slower 154x slower 62x slower Identical 169x slower 118x slower 51x slower Identical Identical 55x slower Identical
babel-loose Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical Identical
typescript Identical Identical Identical 59x slower Identical Identical Identical 93x slower Identical Identical Identical 50x slower Identical Identical 56x slower Identical
es6 Identical Identical Identical Identical 1.2x slower Identical Identical Identical Identical Identical Identical 11x slower 1.4x faster Identical Identical 18x slower
template string tag tests babel 1.4x slower 2.4x slower 24x faster 3x slower 1.5x slower 7x slower 24x faster 3x slower 12x faster Identical 15x faster 2.0x slower 2.1x slower 1.7x slower 4x slower 1.7x slower
babel-loose Identical 1.2x slower 24x faster 1.4x slower Identical 2.1x slower 19x faster 1.6x slower 12x faster Identical 15x faster 2.0x slower Identical Identical 1.6x slower Identical
babel-runtime 1.4x slower 2.3x slower 24x faster 3x slower 1.5x slower 8x slower 24x faster 3x slower 12x faster Identical 15x faster 2.0x slower 2.0x slower 1.7x slower 4x slower 1.7x slower
typescript 1.3x slower 12x slower 45x slower 26x slower 1.3x slower 31x slower 45x slower 21x slower 74x slower 255x slower 20x slower 165x slower 1.4x slower 5x slower 24x slower 1.5x slower
es6 3x slower 52x faster 4x slower 3x slower 3x slower 18x faster 4x slower 3x slower 12x faster Identical 16x faster Identical 2.0x slower 1.6x slower 3x slower 2.1x slower

Testing methodology

Run on 28/09/2022 using babel 7.19.3, babel-runtime 7.19.0 and TypeScript 4.8.4.

For each of the ES6 features in question, a ES5 implementation of that functionality was written along with a ES6 version. It should be noted that the functionality is frequently the same, but in some cases the "common" vs. "correct" version was written, i.e. using x[key] = value vs. defineProperty which is faster but can be hit but a particular nasty edge case for those who deem it fun to extend Object.prototype.

Babel, in both loose+runtime and runtime mode, and Babel were then used to compile the ES6 version to a ES5 compliant version, utilizing the runtime over polyfill to maintain test isolation and avoid native implementations where possible.

All of these test instances were then benchmarked in the given JavaScript engine using Benchmark.js and then the operations per second compared to the ES5 implementation. Cross browser and cross execution comparisions are avoided as much as possible to isolate environmental issues when executing on VMs in the cloud. Identical indicates that the tested implementation was +/- 10% of the ES5 implementation.