make a quick benchmark script
parent
9af95d37bc
commit
76ce046de9
@ -0,0 +1,57 @@
|
||||
var N = 1e7
|
||||
var M = 10
|
||||
/*
|
||||
benchmark encoding and decoding N random integers.
|
||||
|
||||
A number is encoded into a buffer, (the buffer is reused so
|
||||
that allocation does not affect the benchmark)
|
||||
|
||||
to test the effect on performance of invalid records
|
||||
(i.e. too short, with the Most Significant Byte missing)
|
||||
every M items, attempt to decode from a shorter slice of the buffer.
|
||||
This will probably be produce an invalid result. We do not
|
||||
need to write into that buffer - because it refurs to the same memory as
|
||||
the full size buffer.
|
||||
|
||||
run with INVALID=1 to include N/M invalid decodes.
|
||||
|
||||
results:
|
||||
with no invalid decodes, I get about 2428 decodes/ms
|
||||
with invalid decodes:
|
||||
old code that overruns buffer: 1122 decodes/ms
|
||||
check length & return undefined: 2439 decodecs/ms
|
||||
check length & return NaN: 2434 d/ms
|
||||
check length & return -1: 2400 d/ms
|
||||
|
||||
conclusion, it doesn't make a significant difference whether
|
||||
what is returned to show an invalid read,
|
||||
but if you overrun the buffer the cost is considerable.
|
||||
|
||||
recomendation: return undefined
|
||||
*/
|
||||
|
||||
var buffer = new Buffer(8)
|
||||
var _buffer = buffer.slice(0, 4)
|
||||
var varint = require('./')
|
||||
var l = N
|
||||
var invalid = 0
|
||||
|
||||
includeInvalid = !!process.env.INVALID
|
||||
|
||||
var start = Date.now()
|
||||
while (l--) {
|
||||
var int = Math.floor(Math.random()*0x01fffffffffffff)
|
||||
varint.encode(int, buffer, 0)
|
||||
//console.log(int, varint.decode(buffer, 0))
|
||||
//every 1000 varints, do one that will be too short,
|
||||
//measure
|
||||
if(includeInvalid && !(l%M)) {
|
||||
if(undefined == varint.decode(_buffer, 0))
|
||||
invalid ++
|
||||
} else
|
||||
if(int !== varint.decode(buffer, 0))
|
||||
throw new Error('decode was incorrect')
|
||||
}
|
||||
|
||||
console.log('decode&encode/ms, invalidDecodes')
|
||||
console.log(N/(Date.now() - start) + ',', invalid)
|
Loading…
Reference in New Issue