mirror of https://github.com/lukechilds/node.git
1 changed files with 87 additions and 0 deletions
@ -0,0 +1,87 @@ |
|||
// 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 filesize = 1000 * 1024 * 1024; |
|||
var assert = require('assert'); |
|||
|
|||
var type, encoding, size; |
|||
|
|||
var bench = common.createBenchmark(main, { |
|||
type: ['buf', 'asc', 'utf'], |
|||
size: [1024, 4096, 65535, 1024*1024] |
|||
}); |
|||
|
|||
function main(conf) { |
|||
type = conf.type; |
|||
size = +conf.size; |
|||
|
|||
switch (type) { |
|||
case 'buf': |
|||
encoding = null; |
|||
break; |
|||
case 'asc': |
|||
encoding = 'ascii'; |
|||
break; |
|||
case 'utf': |
|||
encoding = 'utf8'; |
|||
break; |
|||
default: |
|||
throw new Error('invalid type'); |
|||
} |
|||
|
|||
makeFile(runTest); |
|||
} |
|||
|
|||
function runTest() { |
|||
assert(fs.statSync(filename).size === filesize); |
|||
var rs = fs.createReadStream(filename, { |
|||
bufferSize: size, |
|||
encoding: encoding |
|||
}); |
|||
|
|||
rs.on('open', function() { |
|||
bench.start(); |
|||
}); |
|||
|
|||
var bytes = 0; |
|||
rs.on('data', function(chunk) { |
|||
bytes += chunk.length; |
|||
}); |
|||
|
|||
rs.on('end', function() { |
|||
try { fs.unlinkSync(filename); } catch (e) {} |
|||
// MB/sec
|
|||
bench.end(bytes / (1024 * 1024)); |
|||
}); |
|||
} |
|||
|
|||
function makeFile() { |
|||
var buf = new Buffer(filesize / 1024); |
|||
if (encoding === 'utf8') { |
|||
// ü
|
|||
for (var i = 0; i < buf.length; i++) { |
|||
buf[i] = i % 2 === 0 ? 0xC3 : 0xBC; |
|||
} |
|||
} else if (encoding === 'ascii') { |
|||
buf.fill('a'); |
|||
} else { |
|||
buf.fill('x'); |
|||
} |
|||
|
|||
try { fs.unlinkSync(filename); } catch (e) {} |
|||
var w = 1024; |
|||
var ws = fs.createWriteStream(filename); |
|||
ws.on('close', runTest); |
|||
ws.on('drain', write); |
|||
write(); |
|||
function write() { |
|||
do { |
|||
w--; |
|||
} while (false !== ws.write(buf) && w > 0); |
|||
if (w === 0) |
|||
ws.end(); |
|||
} |
|||
} |
Loading…
Reference in new issue