ということで私の無能さ加減をさらしてみます。
1) FirefoxはIEに比べて30bitを超える整数値の扱いが苦手である.場合によっては分割したほうがよいこともある.
分割してみる (mitsunari@cybozu labs)
2) 関数呼び出しは重たい.
ほぉなるほどぉ。と思って試してみました。
試し方は下のコードをFirebugにはっつけてRunしてみる方式で。
まずは愚直な方式
var time=new Date().getTime(); var x = 0; for (var i = 0; i < 1000000; i++) { x += i; } var sum = x; sum + ":" + (new Date().getTime() - time);
結果は"499999500000:6997"
次に分割してみる (mitsunari@cybozu labs)の方法
var time=new Date().getTime(); var xL, xH, yL, yH; xL = xH = yL = yH = 0; for (var i = 0; i < 1000000; i++) { var t = xL += i; if (t >= (1 << 30)) { xL -= 1 << 30; xH++; } } var sum = ((xH * (1 << 30)) + xL); sum + ":" + (new Date().getTime() - time);
結果は"499999500000:8426"
最後に関数呼び出しも使うしxをそのまま使うオレオレ法
var time=new Date().getTime(); Number.prototype.times = function(func){ for(var i=0;i<this;i++){ func(i); } }; var i=new Number(1000000); var x = 0; i.times(function(j){x += j;}); var sum = x; sum + ":" + (new Date().getTime() - time);
結果は"499999500000:5871"