压缩/ gzip /使用res.write压缩stream媒体内容

var express = require('express') var app = module.exports = express() function getImages(callback) { callback() } app .set('views', __dirname + '/views') .set('view engine', 'jade') .get('/stream/images', function(req, res) { res.render('layout', function(err, body) { res.type('html') res.write(body.replace('</body></html>', '')) getImages(function(err) { res.render('streams/images', function(err, body) { var html = '<div class="layout-stream">' + body + '</div>' res.write( "<script>$('.pagelet-layout-stream').replaceWith(" + JSON.stringify(html) + "); emitter.emit('check:stream');</script>" ) res.write("<script>emitter.emit('load');</script>") res.write('</body></html>') res.end() }) }) }) }) .listen(3013) 

这完全按照预期工作。 但是,当我.use(express.compress()) (在.get之前,确切地说),页面不再stream。 换句话说, express.compress()似乎要等到响应完成,然后gzip整个响应,然后发送它。 我希望每个res.write发送一个gzip的回应(或者特别是每一个res.write )。 如何正确压缩响应?

编辑1 – 我试过这个:

 var stream = zlib.createGzip() stream.pipe(res) stream.write(/* stuff */) stream.end() 

这和express.compress()完全一样。 我不确定浏览器是不是分析了整个事物,或者直到响应完成才发送正文。

 var stream = zlib.createGzip() stream._flush = zlib.Z_SYNC_FLUSH stream.pipe(res) stream.write(/* stuff */) stream.end()