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
准确地说是之前)时,页面不再流式传输。换句话说,express.compress()
似乎要等到响应完成,然后 gzip 整个响应,然后发送它。我希望每个res.write
人都发送一个压缩响应(或者特别是每个排水管)。如何正确压缩响应?
编辑 1 - 我试过这个:
var stream = zlib.createGzip()
stream.pipe(res)
stream.write(/* stuff */)
stream.end()
这与express.compress()
. 我不确定浏览器是在获得完整内容之前不解析正文,还是在响应完成之前不发送正文。