Skip to content

Instantly share code, notes, and snippets.

@vsemozhetbyt
Last active January 26, 2017 10:34
Show Gist options
  • Save vsemozhetbyt/3d2811383fecf83635cb556347509095 to your computer and use it in GitHub Desktop.
Save vsemozhetbyt/3d2811383fecf83635cb556347509095 to your computer and use it in GitHub Desktop.
Deoptimization due to polymorphic `func.apply(context, arguments)`
function functionToCheckMonomorphic(functionToApplyMonomorphic) {
functionToApplyMonomorphic.apply(null, arguments);
}
function functionToCheckPolymorphic(functionToApplyPolymorphic) {
functionToApplyPolymorphic.apply(null, arguments);
}
const functionToApplyCommon1 = function () {};
const functionToApplyCommon2 = function () {};
const functionToApplyArrow = () => {};
console.time('functionToCheckMonomorphic');
for (let i = 0; i < 1e7; i++) {
functionToCheckMonomorphic(functionToApplyCommon1);
if (i % 1e6 === 0) functionToCheckMonomorphic(functionToApplyCommon2);
}
console.timeEnd('functionToCheckMonomorphic');
console.time('functionToCheckPolymorphic');
for (let i = 0; i < 1e7; i++) {
functionToCheckPolymorphic(functionToApplyCommon1);
if (i % 1e6 === 0) functionToCheckPolymorphic(functionToApplyArrow);
}
console.timeEnd('functionToCheckPolymorphic');
@vsemozhetbyt
Copy link
Author

vsemozhetbyt commented Jan 25, 2017

// Node.js 7.4.0 (v8 5.4.500.45) on Windows 7 x64
functionToCheckMonomorphic: 216.533ms
functionToCheckPolymorphic: 737.507ms
node --trace_opt --trace_deopt test-polymorphic-apply.js
...
[disabled optimization for 0000014733C67DD1 <SharedFunctionInfo functionToCheckPolymorphic>, reason: Bad value context for arguments value]
...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment