gpt4 book ai didi

javascript - 将相同数组/对象元素分配给相同元素的性能

转载 作者:行者123 更新时间:2023-12-03 02:03:29 26 4
gpt4 key购买 nike

我很好奇将相同元素分配给自身的性能。 V8 是否足够聪明,能够理解不应执行此操作?

obj.key = obj.key;

用例是这样的。

Object.keys(otherObj).forEach(e => {
if(!obj[e]) {
obj[e] = foo();
}
});

如果我们使用三元运算符而不是 if 语句,性能是否会受到影响?

Object.keys(otherObj).forEach(e => obj[e] = obj[e] ? obj[e] : foo());

最佳答案

V8 开发人员在这里。我认为不存在 obj[e] = obj[e] 的情况任务将被优化掉。决定这样的优化是否有效需要有关 obj 的大量知识。和e在大多数情况下,检查所有这些都太昂贵而不值得。

正如 Bergi 指出的那样,obj[e] = (... ? obj[e] : ...)从概念上讲,它要复杂得多,因此更不可能被优化掉,即使您假设我们会再花几年时间改进 V8。

关于obj.keyobj[e] (对于加载和存储),如果它们都只看到一种对象形状和一个属性名称,那么它们将具有几乎相同的性能。如果[e]看到多个属性名称(就像在您的示例中循环 Object.keys() ),它会有点慢;然而.key并不是真正的替代方案——这正是 [e] 的灵 active 。这使得它变慢。如果他们中的任何一个看到 obj 的多个形状,它们会比其他方式慢,使用 [e]受到的打击比 .key 更大;这将例如当您的循环最终添加以前不存在的属性时就会出现这种情况。

尽管如此,任何性能差异可能都太小而无关紧要,我的建议是编写最具可读性的代码——或者运行您自己的测量来确定您的情况是否存在可测量的差异。请记住,微基准通常会产生误导;使用尽可能接近您的生产环境的应用程序来进行此类测试。

关于javascript - 将相同数组/对象元素分配给相同元素的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49916483/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com