Javascript 为什么lodash中的u0.defaults()会占用大量cpu时间?
我在production env中的应用程序中发现了一个性能问题。为了重现这个问题,我用本地语言编写了一个示例代码。我从pro env下载了数据,并使用V8 profiling运行了示例。最后我发现lodash中的copyObject()占用了最多的cpu时间。下面是V8 profiling屏幕截图 这是copyObject func的源代码:Javascript 为什么lodash中的u0.defaults()会占用大量cpu时间?,javascript,node.js,lodash,v8,Javascript,Node.js,Lodash,V8,我在production env中的应用程序中发现了一个性能问题。为了重现这个问题,我用本地语言编写了一个示例代码。我从pro env下载了数据,并使用V8 profiling运行了示例。最后我发现lodash中的copyObject()占用了最多的cpu时间。下面是V8 profiling屏幕截图 这是copyObject func的源代码: function copyObject(source, props, object, customizer) { var isNew = !obj
function copyObject(source, props, object, customizer) {
var isNew = !object;
object || (object = {});
var index = -1,
length = props.length;
while (++index < length) {
var key = props[index];
var newValue = customizer
? customizer(object[key], source[key], key, object, source)
: undefined;
if (newValue === undefined) {
newValue = source[key];
}
if (isNew) {
baseAssignValue(object, key, newValue);
} else {
assignValue(object, key, newValue);
}
}
return object;
}
我的问题是copyObject func中的哪种方法导致的cpu时间最多?这正常吗?谢谢强>通过观察,我看到了一些缓慢的事情
注意:小心使用双管道(| |),因为0可能是一个OK值,但0 | | 1==1。其他值也遵循此规则。只需做一个if(或?:)语句,您就会更安全。另外,如果您使用的是现代JS,那么myObj={…默认值,…myObj}可能会更快,但没有在jsperf上检查。谢谢!答案很有用,注意:)另外,如果您使用的是现代JS,那么myObj={…默认值,…myObj}可能会更快,但没有在jsperf上检查过。谢谢!答案和注释都很有用:)
const res = {
'key1': object.key1 || source1.key1 || source2.key1,
'key2': object.key2 || source1.key2 || source2.key2,
'key3': object.key3 || source1.key3 || source2.key3,
}