首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript:通过循环内联实现10倍的加速?

javascript:通过循环内联实现10倍的加速?
EN

Stack Overflow用户
提问于 2012-07-16 19:56:18
回答 1查看 831关注 0票数 21

我遇到了一个性能问题,因为我的Firefox (13.0.1)中的javascript有奇怪的行为。最新的Chrome也表现出了同样的行为。

当我执行我的javascript代码,它看起来像下面的代码片段,结果相当慢。然而,如果我简单地将外部循环的内容内联到'j‘上,我会得到大约10倍的加速。对于我的示例应用程序,这意味着我简单地分别为固定值'j=0‘和'j=1’编写了两次,因为'm‘等于2。当然,我不希望'm’是硬编码的,所以我在问自己,当使用真正的循环时,到底是什么导致了这种减慢?

有谁有主意吗?

我在web worker中运行代码。奇怪的是,如果我在主javascript上下文而不是worker的上下文中执行同样的操作,内联的积极效果就不会出现。然而,只对'j‘的一个值执行循环内容在所有情况下都会带来巨大的加速效果。这是否也与内存管理有关?

提前谢谢你!

代码语言:javascript
复制
//m: very small, 1-2
for (j = 0; j < m; ++j) {
  var attrib = attributes[j];

  //n: very large, ~3*10^6 elements
  for (i = 0; i < n; ++i) {

    var data = largeBuffer[i];

    //nc: very small, 2-3
    for (c = 0; c < nc; ++c) {
      var component;
      //compute 'component
      //..
      attrib.typedArray[baseIdx + c] |= component;
    }

    baseIdx += nc;
  }
}
EN

回答 1

Stack Overflow用户

发布于 2012-07-17 02:45:02

这只是一个假设。我不太了解JS解释器的内部结构。

也许当你内联外部循环时,解释器会看到4次相同的代码,从而触发JIT。相反,当您使用常规循环时,代码只被JIT看到一次。

再说一次,这只是一个假设。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11503757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档