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

6.9.3 | 10.15.1 | 11.9.0 | 55 | 72 | 53 | 65 | 15.14959 | 18.17763 | 10 | ||

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

typescript | Identical | 126x slower | 130x slower | Identical | 131x slower | Identical | 444x slower | Identical | 74x slower | Identical | |

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

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

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

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

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

babel-loose | 1.4x slower | 1.2x slower | 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 | Identical | 6x slower | Identical | 9x slower | Identical | |

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

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

babel-loose | 3x slower | 2.2x slower | 2.0x slower | 2.1x slower | 2.0x slower | 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.1x slower | Incorrect | 2.7x slower | Incorrect | 2.4x slower | Incorrect | 1.5x slower | Incorrect | |

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

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

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

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

typescript | 7x slower | 9x slower | 6x slower | 37x slower | 18x slower | ||||||

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

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

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

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

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

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

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

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

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

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

babel-loose | 4x faster | 6x faster | 7x faster | 3x faster | 1.2x slower | ||||||

babel-runtime | 4x faster | 6x faster | 7x faster | 2.8x faster | 1.3x slower | ||||||

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

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

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

es6 | 5x slower | 1.8x faster | 2.0x faster | 4x slower | 1.8x faster | 1.5x slower | 1.8x slower | 1.6x faster | 4x faster | 2.1x slower | |

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

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

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

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

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

regex-u tests | babel | 1.6x slower | 2.2x slower | 2.0x slower | 1.7x slower | 5x slower | 1.2x slower | 1.7x slower | 2.6x slower | 5x slower | 1.6x slower |

typescript | 1.5x slower | 1.8x slower | 1.7x slower | 1.4x slower | 1.7x slower | 1.2x slower | 1.7x 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.2x slower | 1.9x slower | 2.5x slower | 3x slower | 2.4x slower | |

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

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

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

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

typescript | Identical | 16x slower | 14x slower | Identical | 11x slower | Identical | 6x slower | Identical | 14x slower | Identical | |

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

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

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

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

typescript | 8x slower | 7x slower | 7x slower | 13x slower | 18x slower | ||||||

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

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

typescript | 5x slower | 18x slower | 20x slower | 2.8x slower | 19x slower | Identical | 6x slower | 1.2x slower | 11x slower | Identical | |

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

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

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

babel-runtime | 14x slower | 86x slower | 84x slower | 11x slower | 145x slower | 27x slower | 48x slower | 24x slower | 16x slower | 33x slower | |

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

es6 | 4x slower | 54x slower | 55x slower | 4x slower | 101x slower | 56x slower | 102x slower | 1.7x slower | 1.8x slower | 15x slower | |

template string tests | babel | Identical | 88x slower | 85x slower | Identical | 97x slower | Identical | 169x slower | Identical | Identical | Identical |

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

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

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

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

babel-loose | Identical | 1.2x slower | 1.2x slower | Identical | 2.1x slower | 12x faster | Identical | Identical | Identical | Identical | |

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

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

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

Run on 2/13/2019 using babel 7.2.2, babel-runtime 7.3.1 and TypeScript 3.3.3.

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.