4

私はこのコードを持っています:

var boo = 123123;

その数値を文字列に変換したいのですが、conact 文字列はネイティブ JavaScript .toString()よりも高速です。

より速い:

var foo = boo + ""; 

遅い:

var foo = boo.toString(); 

jsPerf: http://jsperf.com/concat-string-vs-tostring

.toString()が空の文字を連結するよりも遅いのはなぜですか? そして最後に知りたいのは、 ?+ ""の代わりにテクニックを使用する正しいアプローチです。.toString()

4

1 に答える 1

4

結果は、使用する JavaScript エンジンによって異なります。Chrome では、Afshin と同じ結果が得られます。

では、実際に一方が他方より遅いのはなぜでしょうか? これtoStringは、V8 内で C 関数への呼び出しがもう 1 つあるためです。次に試して、自分でそれを確認できます。

  • クロムで空のタブを開きます(すでに開いているページからの副作用を避けるため)
  • 開発者ツールを開く
  • [プロファイル] タブを開き、新しいプロファイルを開始します
  • [コンソール] タブに移動してscript1スクリプトを挿入し、Enter キーを押します。
  • もう一度プロファイルに移動し、プロファイリングを停止します
  • で同じことを繰り返すscript2

  • スクリプト 1:var boo = 123123; var foo = boo + "";

  • スクリプト 2:var boo = 123123; var foo = boo.toString();

私の場合、最初に次のスタックトレースが発生します。

  InjectedScript.evaluate
    InjectedScript._evaluateAndWrap

2番目のもの:

  InjectedScript.evaluate
    InjectedScript._evaluateAndWrap
      InjectedScript._evaluateOn
        evaluate

公式のjs仕様よりもエンジンの内部に関係していると思います.おそらく同じコードパスを使用するように最適化できます.

于 2013-02-17T08:06:52.820 に答える