"不支持的非原始比较"在Chrome Profiler上

时间:2016-11-18 16:05:26

标签: javascript google-chrome-devtools v8

我的应用程序存在瓶颈,

Chrome正在告诉问题是Unsupported non-primitive compare,我不确定这是什么意思。

这里是问题的确切代码(见第6行)

for (var key in this.gdata) {
  var rows = this.gdata[key];
  for (var i = 0; i < rows.length; i++) {
    if (i === 0) first[key] = rows[i];
    if (rows[i].date > dt) {
      curr[key] = i > 0 && rows[i - 1]; //   <----  problem is here
      next[key] = rows[i];
      break;
    }
  }
}

以下是以下情况的屏幕截图:

enter image description here

在这里,我们可以更详细地看到瓶颈:

enter image description here

此代码有什么问题?

2 个答案:

答案 0 :(得分:0)

Crankshaft无法对其进行优化,因为它必须将rows[i-1]转换为布尔值,并且在不进行去优化的情况下不知道如何执行此操作。也许这会更好?

curr[key] = i > 0 ? rows[i-1] : false;

答案 1 :(得分:0)

我发现Chrome并不总是为发现这个特定问题的行计时,也不会发出最耗时的行。 就我而言,这个错误总是发生在时间比较中。

如果您更改行[i]。日期&gt; dt to rows [i] .date.getTime()&gt; dt.getTime()警告会消失吗?