タグ

関連タグで絞り込む (2)

タグの絞り込みを解除

javascriptとoptimizeに関するamachangのブックマーク (2)

  • 分割してみる (mitsunari@cybozu labs)

    論理演算2で現れた ・コード1 var x = 0; for (var i = 0; i < 1000000; i++) { x += i; } の処理時間はFirefox(Fx)では1046(ここでは比率のみが焦点なので単位は考えない)でした.ちなみにIEでは141です(小さい方が速い).Fxはかなり分が悪いようです. 一見これ以上いじりようのない単純なコードをFxでどこまで速くできるのか少し詳しく考えてみます.前回見たように30bitを超えないようにxを二つの変数に分けてみましょう. ・コード2 /* [x[1]:x[0]] += [y[1]:y[0]]を求める. ここで[a:b]はa * (1<<30) + bを意味する(0 <= a, b < (1<<30)). */ function add(x, y) { var t = x[0] += y[0]; x[1] += y[1];

    amachang
    amachang 2007/07/30
    30bit を超える整数値の演算はめっちゃ遅くなる。あと少数の演算も、なるべく整数でやったほうがいいのか。この方向から JavaScript の高速化は全然未知。
  • 論理演算2 (mitsunari@cybozu labs)

    (注意) 1 >> 1をi >> 1や (-i) >> 1に変えてもほぼ同じ. どれもほぼ一定のIEに比べてFxで(-1)>>>1がやたら遅いのはどうしてでしょうか. FxのSTORE_INT()のコードを見ると if (INT_FITS_IN_JSVAL(i)) { \ v_ = INT_TO_JSVAL(i); \ } else { \ ok = js_NewDoubleValue(cx, (jsdouble)(i), &v_); \ if (!ok) \ goto out; \ } となっています. #INT_FITS_IN_JSVAL(j)は -230-1<=j<=230-1なら真のマクロ. つまり,xの値がその範囲を超えるとdouble型に移行し,その値を保存するためにメモリ確保関数が呼び出されます. これが他に比べて10倍以上遅い原因となっています. 同様に var x = 0

    amachang
    amachang 2007/07/30
    SpiderMonkey の STORE_INT マクロ、 INT_FITS_IN_JSVAL マクロの解説。変数が (-2^30 - 1) 〜 (2^30-1) の整数でなくなった場合はメモリが新たに確保され double 型の値が生成される。
  • 1