JavaScript重箱の隅  新JavaScript入門  JavaScript,Neo-Generation  掲示板  表紙
5. 代入  7. 演算(2)
JavaScript 重箱の隅
Written 3/5/02
演算(1)
色々な演算を試してみました。
    //ループ0 何もしない
    var start_t = new Date();
    for(var j = 20000000; j; j--)
        ;
    return (new Date() - start_t) / 1000;
    
    //ループ1 インクリメント
    var start_t = new Date();
    var n = 0;
    for(var j = 20000000; j; j--)
        n++;
    return (new Date() - start_t) / 1000;
    
    //ループ2 整数加算
    var start_t = new Date();
    var n = 0;
    var m = 1;
    for(var j = 20000000; j; j--)
        n = n + m;
    return (new Date() - start_t) / 1000;
    
    //ループ3 加算代入
    var start_t = new Date();
    var n = 0;
    var m = 1;
    for(var j = 20000000; j; j--)
        n += m;
    return (new Date() - start_t) / 1000;
    
    //ループ4 浮動小数点数加算代入
    var start_t = new Date();
    var f = 1.2345;
    var g = 1.2345;
    for(var j = 20000000; j; j--)
        f += g;
    return (new Date() - start_t) / 1000;
    
    //ループ5 ビットごとのAND代入
    var start_t = new Date();
    var n = 0;
    var m = 1;
    for(var j = 20000000; j; j--)
        n &= m;
    return (new Date() - start_t) / 1000;
    
    //ループ6 加算2回
    var start_t = new Date();
    var n = 0;
    var m = 1;
    for(var j = 20000000; j; j--)
        n += m + m;
    return (new Date() - start_t) / 1000;
 
まず、何もしないループ0とインクリメントするループ1を比べます。
    scripts/bench014a.js
    scripts/bench014b.js
    t0 : -317.84298640339284
    ループ0 : 5.29
    ループ1 : 8.07
    ループ0 - ループ1 : -2.8 - -2.76
 
たかがインクリメントなのに時間がかかります。 インクリメントしているだけじゃないことがうかがえます。 代入よりも少しかかってます。
インクリメントよりは加算の方が時間がかかります。
    scripts/bench015a.js
    scripts/bench015b.js
    t0 : -7.407871526243013
    ループ1 : 8.07
    ループ2 : 8.67
    ループ1 - ループ2 : -0.76 - -0.42
 
代入加算は単純な場合効果はないようです。
    scripts/bench016a.js
    scripts/bench016b.js
    t0 : 1.1547005383849435
    ループ2 : 8.67
    ループ3 : 8.66
    かかった時間に差があるとはいえない
 
整数の加算よりは実数の加算の方が時間がかかります。
    scripts/bench017a.js
    scripts/bench017b.js
    t0 : -97.20759464031854
    ループ3 : 8.67
    ループ4 : 9.82
    ループ3 - ループ4 : -1.18 - -1.13
 
ビット演算の&はなぜか加算より遅くなってます。
    scripts/bench018a.js
    scripts/bench018b.js
    t0 : -17.034488982759057
    ループ3 : 8.64
    ループ5 : 8.85
    ループ3 - ループ5 : -0.23 - -0.18
 
まとめて加算するとかなりお得なので、まとめられるものはまとめましょう。
    scripts/bench019a.js
    scripts/bench019b.js
    t0 : -92.48836933145246
    ループ3 : 8.62
    ループ6 : 9.41
    ループ3 - ループ6 : -0.8 - -0.77
 
first, prev, next, exit