mirror of https://github.com/lukechilds/node.git
isaacs
12 years ago
1 changed files with 78 additions and 0 deletions
@ -0,0 +1,78 @@ |
|||
// test the througput of the fs.WriteStream class.
|
|||
|
|||
var path = require('path'); |
|||
var common = require('../common.js'); |
|||
var filename = path.resolve(__dirname, '.removeme-benchmark-garbage'); |
|||
var fs = require('fs'); |
|||
|
|||
var bench = common.createBenchmark(main, { |
|||
dur: [1, 3], |
|||
type: ['buf', 'asc', 'utf'], |
|||
size: [2, 1024, 65535, 1024 * 1024] |
|||
}); |
|||
|
|||
function main(conf) { |
|||
var dur = +conf.dur; |
|||
var type = conf.type; |
|||
var size = +conf.size; |
|||
var encoding; |
|||
|
|||
var chunk; |
|||
switch (type) { |
|||
case 'buf': |
|||
chunk = new Buffer(size); |
|||
chunk.fill('b'); |
|||
break; |
|||
case 'asc': |
|||
chunk = new Array(size + 1).join('a'); |
|||
encoding = 'ascii'; |
|||
break; |
|||
case 'utf': |
|||
chunk = new Array(Math.ceil(size/2) + 1).join('ü'); |
|||
encoding = 'utf8'; |
|||
break; |
|||
default: |
|||
throw new Error('invalid type'); |
|||
} |
|||
|
|||
try { fs.unlinkSync(filename); } catch (e) {} |
|||
|
|||
var started = false; |
|||
var ending = false; |
|||
var ended = false; |
|||
setTimeout(function() { |
|||
ending = true; |
|||
f.end(); |
|||
}, dur * 1000); |
|||
|
|||
var f = fs.createWriteStream(filename); |
|||
f.on('drain', write); |
|||
f.on('open', write); |
|||
f.on('close', done); |
|||
f.on('finish', function() { |
|||
ended = true; |
|||
var written = fs.statSync(filename).size / 1024; |
|||
try { fs.unlinkSync(filename); } catch (e) {} |
|||
bench.end(written / 1024); |
|||
}); |
|||
|
|||
|
|||
function write() { |
|||
// don't try to write after we end, even if a 'drain' event comes.
|
|||
// v0.8 streams are so sloppy!
|
|||
if (ending) |
|||
return; |
|||
|
|||
if (!started) { |
|||
started = true; |
|||
bench.start(); |
|||
} |
|||
|
|||
while (false !== f.write(chunk, encoding)); |
|||
} |
|||
|
|||
function done() { |
|||
if (!ended) |
|||
f.emit('finish'); |
|||
} |
|||
} |
Loading…
Reference in new issue