提问人:Premchand K 提问时间:6/15/2023 最后编辑:Premchand K 更新时间:11/11/2023 访问量:89
声明变量以访问 for 循环中对象的嵌套属性是否更好?
Is it better to declare variables to access nested properties of objects in for loops?
问:
// for example I have an object like this
const requestBody = [
{
a: 1,
b: 2,
c: {
d: {
e: 3,
f: 4,
g: {
h: {
i: 5,
j: {
k: 6
}
}
}
}
}
}
]
// in for loop
for (let i = 0; i < requestBody.length; i++) {
const g = requestBody[i].c.d.g;
// do something related to g
const k = g.h.j;
// do something related to k
}
所以,我在这里想知道的是根据性能,声明变量并存储嵌套属性,然后通过变量在循环中访问更好吗?还是直接访问对象的嵌套属性(如 requestBody[i].c.d.g)并执行与 g 相关操作更好?
答:
嵌套属性以访问可变元素的方式,完全基于您的实际用例。
因为在 JSON 文件中,我们只这样做,但它完全基于您的要求和数据。你不能每次都做嵌套,很多时候你必须优化它才能访问单个元素。
因此,请尝试用真实的用例和真实的数据来思考这个问题,然后只有您才能找到答案。
否则,完全没问题。但是使用循环并访问元素可能不是正确的方法,一个接一个地访问这些元素的最佳方法是通过序列化和反序列化。
这只是我根据经验的想法,其他人可以发表意见。
就时间性能而言,通常最好在循环之外声明和缓存变量,尤其是在要多次访问嵌套属性值时。
Nicholas Zakas 在 O'Reilly 的著作《High Performance JavaScript》的第 2 章和第 3 章中对此进行了更深入的讨论,其中他讨论了“访问成员”
您还可以在此处运行测试,以查看对象属性深度变化时数据访问的性能: https://humanwhocodes.com/experiments/javascript/performance/data-access.html
在后台,Javascript 对象是一个关联数组,每个执行 JS 的引擎都有自己的访问对象属性的方式。例如,V8 引擎使用映射和隐藏类。它们都必须遵守ECMA标准,因此这些方面的性能问题不在于构建引擎的开发人员,而在于引擎。但是,如果我们以上面的示例为例,如果路径中的这些属性中只有一个是 getter,那么该属性右侧的所有内容都必须重新收集。您会发现,在后台,大多数浏览器都会缓存返回的对象值,以便将来轻松访问。
您可以在此处找到有关 JavaScript 及其如何处理属性的更多信息:https://v8.dev/blog/fast-properties
评论