【发布时间】:2013-03-14 15:38:16
【问题描述】:
如何在 Node.js 中对 streams 进行基准测试?
我试过benchmark.js:
var fs = require('fs');
var Transform = require('readable-stream').Transform;
var util = require('util');
var Benchmark = require('benchmark');
var suite = new Benchmark.Suite;
// my super uppercase stream
function Uppercase(options) {
if (!(this instanceof Uppercase))
return new Uppercase(options);
Transform.call(this, options);
}
Uppercase.prototype = Object.create(
Transform.prototype, { constructor: { value: Uppercase }});
Uppercase.prototype._transform = function(chunk, encoding, done) {
chunk = chunk.toString().toUpperCase();
this.push(chunk)
};
// start benchmarking
suite.add('stream test', function() {
var reader = fs.createReadStream('in.txt');
var parser = new Uppercase();
var writer = fs.createWriteStream('out.txt');
reader.pipe(parser).pipe(writer);
})
// add listeners
.on('cycle', function(event) {
console.log(String(event.target));
})
.on('complete', function() {
console.log('Fastest is ' + this.filter('fastest').pluck('name'));
})
// run async
.run();
suite.run();
但我得到了错误
Unhandled stream error in pipe
【问题讨论】:
-
您确定这个问题与基准测试有关吗?换句话说,
var reader = fs.createReadStream('in.txt'); var parser = new Uppercase(); var writer = fs.createWriteStream('out.txt'); reader.pipe(parser).pipe(writer);在基准测试之外尝试时会抛出相同的错误吗? -
刚刚看到我打电话给
run()两次,但这不是错误。 @MathiasBynens 代码在基准环境之外运行良好。我还为reader添加了error事件处理程序。现在初始错误消失了,我得到了[Error: OK, open 'my\path\to\data.json' -
您的节点版本是什么,您使用的是哪个操作系统?
-
节点 v0.8.18 和 mac os v10.7.5
标签: javascript node.js benchmarking