Javascript Bitwise Performance
Tuesday, 16 June 2009 4:59pm
While working on 64-bit integer support in Javascript for Fan, I ran across a blurb about bit shift performance of Numbers. The basic gist was, since Javascript has to convert the number to an integer, perform the op, then convert back, multiplying or dividing by a power of two should be as fast, or faster. On the surface that might make sense, but I wanted to see for myself, so I hacked up a very naive test case:
var x = 0xffff;
var s = new Date().getTime();
for (var i=0; i<100000; i++) x = x >> 2;
var e = new Date().getTime();
var res1 = (e-s);
s = new Date().getTime();
for (var i=0; i<100000; i++) x = x / 4;
e = new Date().getTime();
var res2 = (e-s);
alert(">> " + res1 + "ms\n" + "/ " + res2 + "ms");
Very unscientific results:
Browser >> 2 / 4
-------------------- ------ -------
Chrome 2.0.172.31 2-3ms 4-7ms
Firefox 3.0.11 (win) 11ms 15-16ms
Safari 3.1 (win) 15ms 15ms
IE8 63ms 62-78ms
Opera 9.64 (win) 46ms 63ms
Interesting to see the different performance b/w browsers, but also seems clear, overall, the bit-shift operators perform slightly better even with the box/unbox hit.