【问题标题】:Javascript Should I store a reference to a nested object or use it directly? [duplicate]Javascript 我应该存储对嵌套对象的引用还是直接使用它? [复制]
【发布时间】:2019-01-15 13:57:14
【问题描述】:

我认为如果您使用其中任何一个,这对性能几乎没有影响,但我想知道是否使用其中一个更好。

鉴于我有:

    var a = { b: {c: { d: ... }}};
    var ref = a.b.c.d;

我应该直接使用 a.b.c.d 还是创建并使用一个引用,这里命名为 'ref'?

此外,如果有一个 getter 函数返回具有多个复杂级别的对象:

    var a = { b: {c: { d: ... }}};
    function getObject() {
      return a;
    }
    var ref = getObject();

getObject().b.c.d 和 ref 有区别吗?

我知道这并不重要,但我的强迫症不允许我休息。 :D

【问题讨论】:

  • 两个 sn-ps 有不同的目的,但是,都在做同样的事情。如果您不需要getObject(),那您为什么要首先创建它?
  • 这样的属性访问有(很小的)开销。直接访问d 会更快。现在的重点是:什么时候开销大于声明一个新变量的开销?最后,选择你最舒服的。两者都不会导致明显的性能差异。
  • 纳秒无关紧要。如果它们很重要,请编写程序集。
  • @JonasW:这个问题是 iPhone 特有的。
  • @JonasW.:或者找一个专门讨论这个主题的人。

标签: javascript reference


【解决方案1】:

Javascript 我应该存储对嵌套对象的引用还是直接使用它?

这几乎完全取决于具体情况。一般来说,编写任何最清晰的代码,而不是担心效率,直到/除非你面前有性能问题需要解决。

你的第一个sn-p:

访问对象的属性需要非零时间,但它在现代浏览器上非常高效。因此,使用ref 而不是a.b.c.d 会更快,但在您编写的任何代码中都不太重要,除非您在一个紧密的循环中连续执行数十万次。如果您这样做,请担心这一点。

要考虑的另一件事是其他代码是否可以修改a,或b,或c,使得ref === a.b.c.d 不再为真。如果您希望您的代码看到这些更改,请不要使用ref。如果您希望它免受此类更改的影响,请使用ref,即使ref 可能已过时。

你的第二个 sn-p:

有一个很大的区别:如果您使用 ref 代替,您稍后不会调用 getObject。如果您知道要继续使用最初返回给您的对象getObject,和/或您想避免重复调用的开销,请使用ref。但大概getObject 的存在是有原因的,所以在某些情况下,再次使用getObject 可能更有意义。这真的取决于情况的细节。

【讨论】:

    【解决方案2】:

    这样的属性访问会产生(很小的)开销。
    使用ref 变量直接访问d 会更快。

    现在的重点是:属性访问开销何时大于声明新变量的开销?
    最后,选择你最满意的。两者都不会导致明显的性能差异。

    【讨论】:

      猜你喜欢
      • 2017-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-24
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多