From b7d2a2d3daa19615138a693cb79ccc5671ebd57f Mon Sep 17 00:00:00 2001 From: Denis Pushkarev Date: Thu, 24 Oct 2019 14:36:22 +0700 Subject: [PATCH] add a workaround for V8 `Array#{ splice, filter, map }` deoptimization which causes 100x+ performance degradation of those methods, close #677 --- CHANGELOG.md | 1 + .../core-js/internals/array-method-has-species-support.js | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 30fdc5274061..6e38314d8a87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ## Changelog ##### Unreleased +- Added a workaround for V8 `Array#{ splice, filter, map }` deoptimization which causes 100x+ performance degradation of those methods, [#677](https://github.com/zloirock/core-js/issues/677) - Fixed work of `fetch` with polyfilled `URLSearchParams`, [#674](https://github.com/zloirock/core-js/issues/674) - `package-lock.json` no longer generated in libraries diff --git a/packages/core-js/internals/array-method-has-species-support.js b/packages/core-js/internals/array-method-has-species-support.js index c93ed5c48728..620ca2086187 100644 --- a/packages/core-js/internals/array-method-has-species-support.js +++ b/packages/core-js/internals/array-method-has-species-support.js @@ -5,11 +5,11 @@ var SPECIES = wellKnownSymbol('species'); module.exports = function (METHOD_NAME) { return !fails(function () { - var array = []; - var constructor = array.constructor = {}; + var object = {}; + var constructor = object.constructor = {}; constructor[SPECIES] = function () { return { foo: 1 }; }; - return array[METHOD_NAME](Boolean).foo !== 1; + return [][METHOD_NAME].call(object, Boolean).foo !== 1; }); };