在 for 循环中声明变量来访问对象的嵌套属性是否更好?

问题描述 投票:0回答:2
// 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 相关的操作是否更好?

javascript node.js performance for-loop variables
2个回答
1
投票

嵌套属性访问变量元素的方式,完全基于您的实际用例。

因为在 JSON 文件中,我们只是这样做,但这完全基于您的要求和数据。你不能每次都进行嵌套,很多时候你必须优化它才能访问单个元素。

所以尝试用真实的用例和真实的数据来思考这个问题,然后只有你才能找到答案。

否则,完全没问题。但是使用循环并访问元素可能不是正确的方法,逐一访问这些元素的最佳方法是通过序列化和反序列化。

这只是我根据经验的想法,其他人可以发表他们的意见。


0
投票

就时间性能而言,通常最好在循环之外声明和缓存变量,特别是当您要多次访问嵌套属性值时。

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

© www.soinside.com 2019 - 2024. All rights reserved.