2016-11-18 22 views
1

の「非プリミティブの比較サポートされていないが、」私はそれが何を意味するのか理解していない、Unsupported non-primitive compareです。クロムが問題を語っている</p> <p>、私は自分のアプリケーションのボトルネックを持つクロームプロファイラ

ここ

enter image description here

我々は細部に多くのボトルネックを見ることができます:

は、ここでの問題のために正確なコードです

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; 
    } 
    } 
} 

はここで念のスクリーンショットです(ライン6を参照してください)

enter image description here

このコードで何が問題になっていますか?

+0

'rows [i - 1]'の型は何ですか? –

+0

多分、V8は 'rows [i - 1]'オブジェクトをその複雑さのためにプリミティブ型に変換しようとするのに苦労しています。オブジェクトのプロトタイプの 'valueOf'メソッドをオーバーライドすると、これが役に立ちます。 –

+0

@loa_in_オブジェクトです – julesbou

答えて

0

クランクシャフトは、rows[i-1]をブール値に変換しなければならないため、最適化できません。最適化を解除しないと、クランクシャフトを最適化する方法がわかりません。多分これはうまくいくでしょうか?

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

+1

'&&'は 'true'と' false'だけを返しません – Bergi

0

私はクロームは常にない時、それは、この特定の問題を発見した行を、またそれは、最も時間の支出行を合図ないことを見出しました。 私の場合、このエラーは常に時間の比較に起こっています。

rows [i] .date> dtをrows [i] .date.getTime()> dt.getTime()に変更すると、警告は消えますか?

関連する問題