【问题标题】:javascript performance boost using pointer?使用指针提高javascript性能?
【发布时间】:2014-07-20 21:01:35
【问题描述】:

假设我有一个 javascript 对象。

var hash = { a : [ ] };

现在我想以两种方式编辑数组hash.a:首先每次访问hash.a,其次通过创建指针var arr = hash.a 来存储hash.a 的内存地址。第二种方式更快,或者它们是相同的。

例子:

// first way
hash.a.push(1);
hash.a.push(2);
hash.a.push(3);
hash.a.push(4);
hash.a.push(5);

//second way
var arr = hash.a;
arr.push(1);
arr.push(2);
arr.push(3);
arr.push(4);
arr.push(5);

非常感谢!

【问题讨论】:

  • 它们大致相同,尽管您可以通过将 hash.a 直接保存为 hash[0] hash[1] 等来避免开销,这会更快,因为它分配的对象更少。请注意,只有在非常特定的场景中才需要这种优化。
  • 如果我可以问,你实际上在做什么?

标签: javascript variables pointers object hash


【解决方案1】:

我认为不会有任何真正的性能提升,如果有轻微的提升,那是不值得的,因为您会妨碍代码的易读性和可维护性 + 使用更多内存(另一个变量 arr 的创建和垃圾回收,如果处理不当,也会有更多的内存泄漏机会)。我不会推荐它。

在典型的软件项目中,只有 20% 的时间用于开发,其余 80% 用于测试和维护。

【讨论】:

  • 虽然这是一般的“好建议”,但并没有任何证据支持(性能部分)。
  • 很好,这是定量的性能数据,带有工作样本:-) 我什至看不到 1 秒的差异,做了 10000000 次! jsfiddle.net/p2AEx
  • 哦,男孩 :) 请考虑阅读 this article series,然后也许阅读 this,如果这太难了,至少 this 解释了一些问题。
  • 随意增加循环迭代次数。 “如果您有一个在 15 毫秒内运行的简单测试,错误率将高达 50-750%!您需要让测试运行至少 750 毫秒,然后才能安全地将浏览器的错误开销降低到 1 %。”
  • 第二个循环的时间为 -850 毫秒。再次考虑死代码消除、JIT 等。
【解决方案2】:

在这种情况下,您正在执行编译器的工作 - 任何现代编译器都会在解释此代码时对其进行优化,因此两种情况在性能方面应该相同。

即使编译器没有对这两种情况进行优化,性能提升也可以忽略不计。专注于使您的代码尽可能可读,并让编译器处理这些引用优化。

【讨论】:

  • 虽然这是一般的“好建议”,但并没有任何证据支持(性能部分)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多