Created
December 3, 2011 18:25
-
-
Save billywhizz/1427759 to your computer and use it in GitHub Desktop.
testing buffer write performance
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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