node | chrome | firefox | edge | safari | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|

6.9.3 | 10.15.1 | 13.8.0 | 55 | 72 | 80 | 53 | 65 | 72 | 15.14959 | 18.17763 | 10 | ||

arrow tests | babel | 1.2x slower | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | 1.2x slower | Identical | Identical |

typescript | Identical | Identical | Identical | Identical | Identical | Identical | Identical | 1.2x slower | Identical | 1.2x faster | 1.2x slower | Identical | |

es6 | Identical | Identical | Identical | Identical | Identical | Identical | Identical | 1.3x slower | Identical | 1.2x faster | 1.2x slower | Identical | |

arrow-args tests | babel | Identical | Identical | Identical | Identical | 1.7x faster | Identical | Identical | Identical | Identical | 1.5x slower | Identical | Identical |

typescript | Incorrect | Incorrect | Incorrect | Incorrect | Incorrect | Incorrect | Incorrect | Incorrect | Incorrect | Incorrect | Incorrect | Incorrect | |

es6 | Identical | Identical | Identical | Identical | 1.7x faster | Identical | Identical | Identical | Identical | Identical | Identical | 69x slower | |

arrow-declare tests | babel | 1.6x slower | Identical | 2.0x slower | 1.4x slower | Identical | Identical | 23x slower | Identical | Identical | 1.7x slower | 1.4x slower | Identical |

typescript | 1.4x slower | 1.3x faster | Identical | 1.3x slower | Identical | Identical | 23x slower | Identical | Identical | 1.4x slower | 1.6x slower | Identical | |

es6 | 1.4x slower | Identical | 2.0x slower | 1.3x slower | Identical | Identical | 56x slower | Identical | Identical | 1.5x slower | 1.5x slower | Identical | |

bindings tests | babel | Identical | Identical | 2.0x slower | Identical | Identical | Identical | Identical | Identical | Identical | 1.4x slower | Identical | Identical |

typescript | Identical | 1.9x faster | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | 1.5x slower | Identical | |

es6 | Identical | Identical | 2.0x slower | Identical | Identical | Identical | Identical | 1.2x faster | Identical | Identical | 1.4x slower | Identical | |

bindings-compound tests | babel | Identical | Identical | 2.0x slower | Identical | Identical | Identical | Identical | Identical | Identical | 1.2x slower | Identical | Identical |

typescript | Identical | 1.7x faster | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | 1.4x slower | Identical | |

es6 | Identical | Identical | 2.0x slower | 1.6x slower | Identical | Identical | Identical | Identical | Identical | Identical | 1.4x slower | Identical | |

classes tests | babel | 1.9x slower | Identical | Identical | 1.5x slower | Identical | Identical | 33x slower | 3x slower | 23x slower | 1.2x slower | Identical | 7x slower |

babel-loose | 1.7x slower | 1.3x slower | 1.5x slower | 1.6x slower | 1.6x slower | 1.5x slower | 34x slower | Identical | Identical | 1.6x slower | Identical | 8x slower | |

babel-runtime | 1.8x slower | 1.3x slower | 1.5x slower | 1.5x slower | 1.6x slower | 1.5x slower | 40x slower | 4x slower | 26x slower | 2.0x slower | 1.2x slower | 7x slower | |

typescript | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | |

es6 | Identical | Identical | 1.3x slower | Identical | Identical | Identical | Identical | Identical | Identical | 1.5x slower | 1.4x slower | Identical | |

defaults tests | babel | 1.5x slower | 7x slower | Identical | 1.4x slower | 16x slower | Identical | Identical | Identical | Identical | 575x slower | 204x slower | 2.2x slower |

babel-loose | 1.9x slower | 2.0x slower | Identical | Identical | Identical | Identical | 1.3x slower | ||||||

typescript | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | 1.3x slower | Identical | |

es6 | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | 1.3x slower | Identical | |

destructuring tests | babel | 2.4x slower | 7x slower | 5x slower | 1.4x slower | 6x slower | 5x slower | Identical | Identical | Identical | 3x slower | 1.6x slower | 16x slower |

babel-loose | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | 1.3x slower | 1.2x slower | Identical | |

babel-runtime | 2.5x slower | 7x slower | 5x slower | 1.4x slower | 7x slower | 5x slower | Identical | Identical | 12x slower | 4x slower | 2.0x slower | 21x slower | |

typescript | Identical | 126x slower | 155x slower | Identical | 131x slower | 121x slower | Identical | 444x slower | 459x slower | Identical | 74x slower | Identical | |

es6 | 17x slower | 5x slower | 6x slower | 16x slower | 3.0x slower | 5x slower | 98x slower | 19x slower | 18x slower | 53x slower | 55x slower | 9x slower | |

destructuring-simple tests | babel | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | 1.3x slower | Identical | Identical |

typescript | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | 1.4x slower | Identical | |

es6 | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | 1.3x slower | Identical | |

for-of-array tests | babel | 18x slower | Identical | 1.4x slower | 17x slower | Identical | 1.4x slower | 16x slower | Identical | 17x slower | 10x slower | Identical | 1.6x slower |

babel-loose | 1.4x slower | Identical | 1.2x slower | Identical | Identical | Identical | 1.7x slower | 1.2x slower | |||||

babel-runtime | 18x slower | 17x slower | 13x slower | 13x slower | 1.6x slower | ||||||||

typescript | Identical | 3x slower | 4x slower | Identical | 2.8x slower | 4x slower | Identical | 6x slower | 16x slower | Identical | 9x slower | Identical | |

es6 | 17x slower | 1.2x slower | 1.4x slower | 17x slower | Identical | 1.3x slower | 2.5x slower | 1.5x slower | 2.3x slower | 7x slower | 8x slower | 1.3x slower | |

for-of-object tests | babel | 4x slower | 2.4x slower | 1.9x slower | 1.9x slower | 2.1x slower | 2.4x slower | 6x slower | 2.4x slower | 2.3x slower | 4x slower | 1.3x slower | 2.3x slower |

babel-loose | 3x slower | 2.2x slower | 1.8x slower | 2.1x slower | 2.0x slower | 2.4x slower | 3x slower | 1.3x slower | 1.3x slower | 6x slower | Identical | 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 | Incorrect | 2.7x slower | 2.7x slower | Incorrect | 2.4x slower | 2.4x slower | Incorrect | 1.5x slower | Incorrect | |

es6 | 4x slower | 2.0x slower | 1.8x slower | 1.8x slower | 2.4x slower | 2.2x slower | 2.6x slower | 1.3x slower | 1.3x slower | 4x slower | 1.3x slower | 2.3x slower | |

generator tests | babel | 7x slower | 5x slower | 7x slower | 6x slower | 5x slower | 7x slower | 10x slower | 15x slower | 32x slower | 38x slower | 10x slower | 8x slower |

babel-loose | 6x slower | 4x slower | 7x slower | 5x slower | 4x slower | 7x slower | 10x slower | 13x slower | 31x slower | 54x slower | 11x slower | 8x slower | |

babel-runtime | 6x slower | 5x slower | 7x slower | 6x slower | 4x slower | 7x slower | 9x slower | 14x slower | 31x slower | 45x slower | 11x slower | 8x slower | |

typescript | 7x slower | 8x slower | 6x slower | 7x slower | 37x slower | 81x slower | 18x slower | ||||||

es6 | 6x slower | 1.3x slower | 1.5x slower | 7x slower | 1.3x slower | 1.5x slower | 11x slower | 20x slower | 42x slower | 24x slower | 19x slower | 5x slower | |

map-set tests | babel | 5x slower | 3x slower | 2.4x slower | 4x slower | 3x slower | 2.8x slower | 13x slower | 12x slower | 17x slower | 24x slower | 2.7x 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 | 4x slower | 4x slower | 2.8x slower | 14x slower | 11x slower | 17x slower | 22x slower | 2.6x slower | 8x slower | |

es6 | 5x slower | 2.9x slower | 2.4x slower | 4x slower | 4x slower | 2.8x slower | 13x slower | 11x slower | 17x slower | 23x slower | 2.6x slower | 8x slower | |

map-set-lookup tests | babel | 9x faster | 64x faster | 73x faster | 8x faster | 47x faster | 75x faster | 36x faster | 14x faster | 9x faster | 60x faster | 130x 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 | 8x faster | 50x faster | 76x faster | 36x faster | 12x faster | 8x faster | 79x faster | 111x faster | 60x faster | |

es6 | 9x faster | 68x faster | 75x faster | 8x faster | 50x faster | 76x faster | 35x faster | 14x faster | 9x faster | 77x faster | 118x faster | 60x faster | |

map-set-object tests | babel | 8x slower | 6x slower | 4x slower | 8x slower | 6x slower | 5x slower | 5x slower | 3x slower | 6x slower | 45x slower | 4x 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 | 8x slower | 6x slower | 5x slower | 5x slower | 2.9x slower | 5x slower | 45x slower | 4x slower | 6x slower | |

es6 | 8x slower | 6x slower | 4x slower | 8x slower | 6x slower | 5x slower | 5x slower | 3.0x slower | 5x slower | 45x slower | 4x slower | 6x slower | |

map-string tests | babel | 2.4x slower | Identical | 1.7x slower | 1.8x slower | 1.4x slower | 25x slower | 59x slower | 56x slower | 63x slower | 11x slower | 6x 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 | 1.8x slower | 1.4x slower | 25x slower | 59x slower | 53x slower | 62x slower | 11x slower | 7x slower | 1.5x faster | |

es6 | 2.4x slower | Identical | 1.7x slower | 1.7x slower | 1.4x slower | 25x slower | 59x slower | 53x slower | 62x slower | 11x slower | 7x slower | 1.5x faster | |

new-target tests | babel | 4x faster | 9x faster | 7x faster | 12x faster | 3x faster | 4x slower | 1.2x slower | |||||

babel-loose | 4x faster | 9x faster | 7x faster | 12x faster | 3x faster | 4x slower | 1.2x slower | ||||||

babel-runtime | 4x faster | 9x faster | 7x faster | 12x faster | 2.8x faster | 4x slower | 1.3x slower | ||||||

typescript | Identical | Identical | Identical | 1.6x faster | Identical | 3x slower | Identical | ||||||

es6 | 1.9x slower | 4x faster | 9x faster | 2.7x slower | 7x faster | 12x faster | 25x faster | 4x faster | 7x faster | 1.3x faster | Identical | 56x faster | |

object-assign tests | babel | 5x slower | 1.7x faster | 1.8x faster | 4x slower | 1.9x faster | 1.6x faster | 1.5x slower | 1.6x slower | 1.4x slower | 1.6x faster | 4x 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 | 4x slower | 1.8x faster | 1.9x faster | 1.5x slower | 2.0x slower | 1.3x slower | 1.8x faster | 4x faster | 2.1x slower | |

es6 | 5x slower | 1.8x faster | 1.7x faster | 4x slower | 1.8x faster | 1.9x faster | 1.5x slower | 1.8x slower | 1.3x slower | 1.6x faster | 4x faster | 2.1x slower | |

object-literal-ext tests | babel | 4x slower | 2.4x slower | 2.7x slower | 4x slower | 2.6x slower | 1.6x slower | 3.0x slower | 1.5x slower | 1.3x slower | 1.5x slower | 1.6x slower | 1.4x slower |

babel-loose | Identical | Identical | Identical | Identical | Identical | 1.6x faster | Identical | Identical | Identical | Identical | Identical | Identical | |

babel-runtime | 4x slower | 2.5x slower | 3x slower | 4x slower | 2.3x slower | 1.6x slower | 3.0x slower | 1.3x slower | 1.4x slower | 1.5x slower | 1.4x slower | 1.4x slower | |

typescript | Identical | Identical | 1.3x slower | Identical | Identical | 1.7x faster | Identical | Identical | Identical | Identical | Identical | Identical | |

es6 | 9x slower | 5x slower | 7x slower | 9x slower | 4x slower | 3x slower | 12x slower | 1.2x slower | Identical | Identical | 1.3x slower | 2.7x slower | |

regex-u tests | babel | 1.6x slower | 2.2x slower | 6x slower | 1.7x slower | 5x slower | 7x slower | 1.2x slower | 1.7x slower | 1.8x slower | 2.6x slower | 5x slower | 1.6x slower |

typescript | 1.5x slower | 1.8x slower | 1.8x slower | 1.4x slower | 1.7x slower | 1.9x slower | 1.2x slower | 1.7x slower | 2.0x slower | 1.8x slower | 2.9x slower | 2.4x slower | |

es6 | 1.4x slower | 1.9x slower | 1.8x slower | 1.4x slower | 1.6x slower | 1.8x slower | 1.2x slower | 1.9x slower | 2.1x slower | 2.5x slower | 3x slower | 2.4x slower | |

rest tests | babel | 6x faster | 5x slower | Identical | 6x faster | 1.2x faster | Identical | 1558x faster | 594x faster | 766x faster | Identical | Identical | 23x slower |

typescript | 1.2x faster | 39x slower | 68x slower | 1.2x faster | 5x slower | 55x slower | 14x faster | 53x faster | 40x faster | 40x faster | 17x faster | 41x slower | |

es6 | 1.2x faster | Identical | Identical | 1.3x faster | 1.3x faster | Identical | 17x faster | 34x faster | 26x faster | 14x faster | 7x faster | 33x slower | |

spread tests | babel | Identical | 1.4x slower | 1.4x slower | Identical | 1.4x slower | 1.4x slower | Identical | Identical | Identical | Identical | Identical | Identical |

typescript | Identical | 16x slower | 15x slower | Identical | 11x slower | 18x slower | Identical | 6x slower | 8x slower | Identical | 14x slower | Identical | |

es6 | 20x slower | Identical | Identical | 22x slower | 1.2x faster | Identical | 5x slower | 1.4x slower | 1.6x slower | 1.7x slower | 6x slower | 5x slower | |

spread-generator tests | babel | 19x slower | 10x slower | 12x slower | 29x slower | 9x slower | 13x slower | 7x slower | 5x slower | 6x slower | 14x slower | 17x slower | 6x slower |

babel-loose | Incorrect | Incorrect | Incorrect | Incorrect | Incorrect | Incorrect | Incorrect | Incorrect | Incorrect | Incorrect | Incorrect | Incorrect | |

babel-runtime | 27x slower | 10x slower | 12x slower | 31x slower | 9x slower | 13x slower | 5x slower | 5x slower | 5x slower | 14x slower | 18x slower | 6x slower | |

typescript | 8x slower | 9x slower | 7x slower | 11x slower | 13x slower | 16x slower | 18x slower | ||||||

es6 | 8x slower | 2.7x slower | 4x slower | 8x slower | 2.6x slower | 4x slower | 5x slower | 5x slower | 6x slower | 9x slower | 15x slower | 4x slower | |

spread-literal tests | babel | 5x slower | 7x slower | 5x slower | 2.8x slower | 6x slower | 10x slower | Identical | 1.7x faster | 1.6x faster | 1.2x slower | 1.4x slower | Identical |

typescript | 5x slower | 18x slower | 16x slower | 2.8x slower | 19x slower | 32x slower | Identical | 6x slower | 7x slower | 1.2x slower | 11x slower | Identical | |

es6 | 8x slower | 1.2x slower | Identical | 9x slower | Identical | 1.3x slower | 5x slower | 1.2x faster | Identical | 2.2x slower | 2.9x slower | 1.8x faster | |

super tests | babel | 13x slower | 106x slower | 44x slower | 12x slower | 194x slower | 47x slower | 27x slower | 44x slower | 76x slower | 23x slower | 14x slower | 34x slower |

babel-loose | 3.0x slower | Identical | Identical | 1.8x slower | Identical | Identical | 8x slower | 4x slower | 33x slower | 5x slower | 1.2x slower | 3x slower | |

babel-runtime | 14x slower | 86x slower | 94x slower | 11x slower | 145x slower | 91x slower | 27x slower | 48x slower | 116x slower | 24x slower | 16x slower | 33x slower | |

typescript | Identical | Identical | Identical | Identical | Identical | Identical | Identical | 4x slower | 34x slower | Identical | 1.2x slower | 1.8x slower | |

es6 | 4x slower | 54x slower | 117x slower | 4x slower | 101x slower | 121x slower | 56x slower | 102x slower | 689x slower | 1.7x slower | 1.8x slower | 15x slower | |

template string tests | babel | Identical | 88x slower | 146x slower | Identical | 97x slower | 154x slower | Identical | 169x slower | 118x slower | Identical | Identical | Identical |

babel-loose | Identical | Identical | Identical | Identical | Identical | Identical | Identical | ||||||

typescript | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | Identical | |

es6 | Identical | Identical | Identical | 1.2x slower | Identical | Identical | Identical | Identical | Identical | 1.4x faster | Identical | 18x slower | |

template string tag tests | babel | 1.4x slower | 2.4x slower | 24x faster | 1.5x slower | 7x slower | 24x faster | 12x faster | Identical | 15x faster | 2.1x slower | 1.7x slower | 1.7x slower |

babel-loose | Identical | 1.2x slower | 24x faster | Identical | 2.1x slower | 19x faster | 12x faster | Identical | 15x faster | Identical | Identical | Identical | |

babel-runtime | 1.4x slower | 2.3x slower | 24x faster | 1.5x slower | 8x slower | 24x faster | 12x faster | Identical | 15x faster | 2.0x slower | 1.7x slower | 1.7x slower | |

typescript | 1.3x slower | 12x slower | 45x slower | 1.3x slower | 31x slower | 45x slower | 74x slower | 255x slower | 20x slower | 1.4x slower | 5x slower | 1.5x slower | |

es6 | 3x slower | 52x faster | 4x slower | 3x slower | 18x faster | 4x slower | 12x faster | Identical | 16x faster | 2.0x slower | 1.6x slower | 2.1x slower |

Run on 10/02/2020 using babel 7.8.4, babel-runtime 7.8.4 and TypeScript 3.7.5.

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.