在我的JavaScript(ES6)代码的许多地方,我看到以下模式检查对象上是否存在密钥并返回空对象或有时返回数组作为模拟选项字段的方式。
例如
const someField = (myObject.wantedKey || {});
// display someField.thing
// or sometimes
const nullIsempty (myObject.undefinedIsEmpty || []);
我怀疑通过使用单个全局空对象替换掉落中的新对象,我可以获得相对的性能提升,例如
// Defined globally somewhere
const EMPTY_OBJECT = {};
// At the point of use
const someField = (myObject.wantedKey || EMPTY_OBJECT);
理论上,我节省了每次丢失时分配新对象的开销。只要注意不要改变下游的对象,这就行了,并且通过一个简单的JavaScript基准确认,它在Firefox 59,Microsoft Edge和Internet Explorer 11上显示出显着的差异。在Chrome 65上差别要小得多。 My benchmark
我是正确的,假设执行速度的差异是由于减少了除了JavaScript引擎所做的任何JIT魔法之外的空对象的分配频率造成的?还有其他事情在这里发生吗?
澄清:EMPTY_OBJECT在实用程序模块中全局定义,并根据需要导入。当像这样使用时,应该只有一个直通对象的实例。