// 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 书籍《高性能 JavaScript》对此进行了更深入的讨论,他在第 2 章和第 3 章中讨论了“访问成员”
您还可以在此处运行测试,以查看对象属性深度变化时数据访问的性能:https:// humanwhocodes.com/experiments/javascript/performance/data-access.html
在底层,Javascript 对象是一个关联数组,每个执行 JS 的引擎都有自己的访问对象属性的方式。例如,V8 引擎使用映射和隐藏类。它们都必须遵守 ECMA 标准,因此这些方面的性能问题不在于基于引擎构建的开发人员,而在于引擎。然而,如果我们以上面的例子为例,如果路径中的这些属性之一是吸气剂,那么该属性右侧的所有内容都必须重新收集。您会发现大多数浏览器都会缓存您返回的对象值,以便将来轻松访问。
您可以在此处了解有关 JavaScript 及其如何处理属性的更多信息:https://v8.dev/blog/fast-properties