Skip to content

Instantly share code, notes, and snippets.

@billywhizz
Created December 3, 2011 18:25
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save billywhizz/1427759 to your computer and use it in GitHub Desktop.
Save billywhizz/1427759 to your computer and use it in GitHub Desktop.
testing buffer write performance
Buffer.prototype.xwriteUInt8 = function(value, offset) {
this[offset] = value & 0xff;
}
Buffer.prototype.xwriteUInt16BE = function(value, offset) {
this[offset++] = (value >>> 8) & 0xff;
this[offset] = value & 0xff;
}
Buffer.prototype.xwriteUInt32BE = function(value, offset) {
this[offset++] = (value >>> 24) & 0xff;
this[offset++] = (value >>> 16) & 0xff;
this[offset++] = (value >>> 8) & 0xff;
this[offset] = value & 0xff;
}
function test1(counter) {
var b = new Buffer([0,0,0,0,0,0,0,0,0,0,0]);
var vw = new DataView(b);
var i = counter;
var then = new Date().getTime();
while(i) {
vw.setUint8(0, i-- % 2);
vw.setUint16(1, i-- % 2);
vw.setUint32(3, i--);
vw.setUint32(7, i--);
}
var now = new Date().getTime();
var elapsed = (now - then)/1000;
console.log("DataView\t" + elapsed.toFixed(2) + "\t" + (counter/elapsed).toFixed(2));
//console.log(b);
}
function test2(counter) {
var b = new Buffer([0,0,0,0,0,0,0,0,0,0,0]);
var then = new Date().getTime();
var i = counter;
while(i) {
b.writeUInt8(i-- % 2, 0);
b.writeUInt16BE(i-- % 2, 1);
b.writeUInt32BE(i--, 3);
b.writeUInt32BE(i--, 7);
}
var now = new Date().getTime();
var elapsed = (now - then)/1000;
console.log("Buffer Verify\t" + elapsed.toFixed(2) + "\t" + (counter/elapsed).toFixed(2));
//console.log(b);
}
function test3(counter) {
var b = new Buffer([0,0,0,0,0,0,0,0,0,0,0]);
var then = new Date().getTime();
var i = counter;
while(i) {
b.writeUInt8(i-- % 2, 0, true);
b.writeUInt16BE(i-- % 2, 1, true);
b.writeUInt32BE(i--, 3, true);
b.writeUInt32BE(i--, 7, true);
}
var now = new Date().getTime();
var elapsed = (now - then)/1000;
console.log("Buffer No Verify\t" + elapsed.toFixed(2) + "\t" + (counter/elapsed).toFixed(2));
//console.log(b);
}
function test4(counter) {
var b = new Buffer([0,0,0,0,0,0,0,0,0,0,0]);
var then = new Date().getTime();
var i = counter;
while(i) {
b.xwriteUInt8(i-- % 2, 0);
b.xwriteUInt16BE(i-- % 2, 1);
b.xwriteUInt32BE(i--, 3);
b.xwriteUInt32BE(i--, 7);
}
var now = new Date().getTime();
var elapsed = (now - then)/1000;
console.log("Buffer Direct\t" + elapsed.toFixed(2) + "\t" + (counter/elapsed).toFixed(2));
//console.log(b);
}
function test5(counter) {
var b = new Buffer([0,0,0,0,0,0,0,0,0,0,0]);
var i = counter;
var then = new Date().getTime();
var num = 0;
while(i) {
b[0] = (i-- % 2) & 0xff;
num = i-- %2;
b[1] = (num >>> 8) & 0xff;
b[2] = num & 0xff;
num = i--;
b[3] = (num >>> 24) & 0xff;
b[4] = (num >>> 16) & 0xff;
b[5] = (num >>> 8) & 0xff;
b[6] = num & 0xff;
num = i--;
b[7] = (num >>> 24) & 0xff;
b[8] = (num >>> 16) & 0xff;
b[9] = (num >>> 8) & 0xff;
b[10] = num & 0xff;
}
var now = new Date().getTime();
var elapsed = (now - then)/1000;
console.log("Direct\t" + elapsed.toFixed(2) + "\t" + (counter/elapsed).toFixed(2));
//console.log(b);
}
while(true) {
test1(10000000);
test2(10000000);
test3(50000000);
test4(500000000);
test5(500000000);
console.log("---");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment