Bug852791
https://bugzilla.mozilla.org/show_bug.cgi?id=852791
目次
- 説明
- 解決法
説明
文字列どうしのconcatの時に、無駄なアセンブラが実行されている。
例えば、以下のようなコードは同じアセンブラが実行されるはずである。
var x = "hoge" var s = "f" + "oo" + x + "b" + "ar"; //(1) var s = "foo" + x + "bar"; //(2)
しかし、IonMonkey spewを用いて確認してみると、以下のような結果になっている。
(1)の実行結果
(2)の実行結果
注目すべきなのは、concatの回数である。(1)の場合は4回実行されており、(2)の場合は2回だけである。
定数どうしのconcatなら、変数の読み込みが発生しないのでアセンブラを実行せずとも、直接concatすることができる。
因みに、定数どうしのconcatの結果は以下のようになっている。
var s = "a"+"b"
IonMonkey spew
IonMonkey spewは、IonMonkeyの処理をトレースするツール。
使い方
IonMonkey spewはもともとIonMokeyに実装されているので、何かインストールしたりする必要はない。
まずは、デバッグモードを有効にしてmakeする。
cd DIR/mozilla-central/js/src ./configure --enable-debug make --debug
デバッグモードを有効にすると、ビルドに時間がかかる。
その後、IONFLAGSを設定して実行する。
"--ion-eager"をつけると、常にIonMokeyを使用することになる。
IONFLAGS=logs,scripts,osi,bailouts ./js --ion-eager
その後、適当なJSコードを打てば、/tmp/ion.jsonというファイルが出力されている。