【问题标题】:How to optimize JS code?如何优化 JS 代码?
【发布时间】:2015-09-19 07:49:58
【问题描述】:

Chrome 分析说:“未优化:分配给参数对象中的参数”。我可以做些什么来优化这段代码?

this.buffer.forEach(function(tilepos, ypos)
{
  tilepos.forEach(function(tileinfo, xpos)
  {
    _self.tiles.putTile('ground', xpos, ypos, _self.ground);
  });
});

【问题讨论】:

  • 请提供putTile方法。问题可能就在那里。

标签: javascript optimization profiling google-chrome-devtools


【解决方案1】:

您可能不喜欢在区块内对tilepos 采取行动。

如果您希望消除错误,我建议您按照以下方式进行操作,但同时也可以获得一些性能提升:

for(var i = 0; i < this.buffer.length; i++)
{
    for(var j = 0; j < this.buffer[i].length; j++)
    {
        _self.tiles.putTile('ground', i, j, _self.ground);
    }
}

【讨论】:

  • 但缓冲区并不总是从 0 开始
  • 如果缓冲区是一个数组,它应该总是从0开始
  • 使用 for 循环,因为与 for 循环相比,forEach 函数非常慢。避免稀疏,因为一些 javascript 引擎会使用查找来索引元素,这会导致代码慢得多。所以总是从索引 0 开始你的数组并按顺序填充它。乱序添加项可以将数组变成稀疏数组。
【解决方案2】:

您很可能通过重新分配函数参数或参数元素来覆盖参数。

function f(a) {
    a = 100; // reassigns arguments[0]
};

或者

function f(a) {
    arguments[0] = 100; // same thing
};

您的代码对我来说看起来不错,所以我认为问题出在您的 putTile 方法上。如果您需要重新分配函数参数,请创建它的本地副本:

function f(a) {
    var localA = a;
    localA = 100;
}

如果您提供putTile方法,那么我可以查看并更新我的答案。

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 2022-11-23
    • 2022-12-29
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2020-05-07
    相关资源
    最近更新 更多