Tik*_*kes 3 javascript performance
所以我有一个如下对象:
var data = [
{
unmatchedLines: [], //possible big array ~700+ lines per entry
statusCode: 200,
title: "title",
message: "some message",
details: [],
objectDetails: []
},
{
//same object here
}
];
Run Code Online (Sandbox Code Playgroud)
此数组由服务调用填充,然后循环以合并输出,然后将此结果发送回前端.
function convertResultToOneCsvOutput(data) {
var outPutObject = {
unmatchedLines: [],
responses: []
};
for(var i = 0; i < data.length; i++) {
if(data[i].fileData) {
outPutObject.unmatchedLines = outPutObject.unmatchedLines.concat(data[i].fileData);
}
outPutObject.responses.push({
statusCode: data[i].statusCode,
title: data[i].title,
message: data[i].message,
details: data[i].details,
objectDetails: data[i].objectDetails,
})
}
return outPutObject;
};
Run Code Online (Sandbox Code Playgroud)
现在,我是第一次使用delete,以摆脱unmatchedLines来自data对象,这样,在创造一个全新的对象,并推动这一到输出我可以做的代替:
delete data[i].unmatchedLines;
outPutObject.responses.push(data[i]);
Run Code Online (Sandbox Code Playgroud)
但后来我读到delete这篇文章非常缓慢,偶然发现一篇文章说要把这个用来undefined代替使用delete会更快.
我的问题:
到底有什么好用的?delete,设置undefined或创建一个新的对象,就像我现在正在做的那样?
两者都不"更好".
确实,当你delete来自一个对象的属性时,在许多现代引擎上将对象放入一个较慢的"字典模式",而不是从你没有删除它的属性,这意味着该对象的后续属性查找(data[i]在你的情况下)将比他们之前更慢delete.因此,在对象的属性访问速度很重要的极少数情况下,将属性设置为undefined(这不是完全相同的)可能是适当的.