1

我有这条快速路线...

app.get('/:grp/:time', function(req, res){
  var out = [];
  var grp = grpmap[req.param('grp')];
  var time = timemap[req.param('time')];
  leveldb.createReadStream({start:'HEM!' + grp + '!' + time + '!', end:'HEM!' + grp + '!' + time + '!\xff', keys: false})
    .on('data',function(data){
      out.push(JSON.parse(data));
    })
    .on('close',function(){
      res.send(out);
    })
});

它按预期工作,但是填充需要花费一些时间,客户端在收到响应之前会坐几秒钟。必须有更好的方法..任何提示?

谢谢。

4

1 回答 1

0

这需要很长时间,因为您要在发送任何内容之前缓冲整个结果集。

您想要做的是流式传输数据而不是缓冲。您需要像这样使用JSONStream 之类的模块:

var JSONStream = require('JSONStream')

app.get('/route', function (req, res) {
  db.createReadStream({...}).pipe(JSONStream.stringify()).pipe(res);
})

整个请求可能需要相同的时间,但您应该非常快地开始接收数据,因为这不会等到所有结果都缓冲后才发送任何内容。

于 2014-12-25T18:58:04.200 回答