stream组合的性能不佳

我想通过websocket将PostgreSQL查询的结果stream式传输到客户端。

使用pg-promise和pg-query-stream从数据库中提取数据。 通过websocketstream数据,我使用socket.iostream 。

单独地,所有组件performance相当好。 虽然当我pipe道pg查询stream到socket.iostream,性能急剧下降。

我已经开始了:

var QueryStream = require('pg-query-stream'); var ss = require('socket.io-stream'); // Query with a lot of results var qs = new QueryStream('SELECT...'); db.stream(qs, s => { var socketStream = ss.createStream({objectMode: true}); ss(socket).emit('data', socketStream); s.pipe(socketStream); }) .then(data => { console.log('Total rows processed:', data.processed, 'Duration in milliseconds:', data.duration); }); 

我试图使用非对象stream:

 var socketStream = ss.createStream(); ss(socket).emit('data', socketStream); s.pipe(JSONStream.stringify()).pipe(socketStream); 

要么:

 var socketStream = ss.createStream(); ss(socket).emit('data', socketStream); s.pipe(JSONStream.stringify(false)).pipe(socketStream); 

查询和传输所有解决scheme的数据大概需要一分钟时间。

查询结果可以在一秒钟内写入文件:

 s.pipe(fs.createWriteStream('temp.txt')); 

该文件可以在一秒钟内传输:

 var socketStream = ss.createStream(); fs.createReadStream('temp.txt').pipe(socketStream); 

所以不知何故,这些stream似乎并不好。

作为一个愚蠢的实验,我试过在两者之间放置一些东西:

 var socketStream = ss.createStream(); ss(socket).emit('data', socketStream); var zip = zlib.createGzip(); var unzip = zlib.createGunzip(); s.pipe(JSONStream.stringify(false)).pipe(zip).pipe(unzip).pipe(socketStream); 

突然间,数据可以在一秒钟内被查询和转移。

不幸的是,这不会成为我的最终解决scheme。 这会浪费太多的CPU。 什么是导致性能降低这个组合的stream? 这怎么解决?