压缩/ 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()
- 如何将中间件的更改传递给socket.io?
- EJS语法错误,无法在MongoDb的浏览器中呈现logging
- 如何通过假设一个默认的内容typesparsingExpress / NodeJs中的缺less内容types的HTTP请求?
- 让快递服务器接受CORS请求
- Node.JS使用Sails.JS框架 – 护照:没有战略注册名称:Facebook
- 没有连接事件正在被解雇 – Mongoose 4.7.1&Express
- 用请求parsing查询数组并用express接收
- 获取socket.io,express和node-http2通过HTTP / 2进行通信
- 当HOST在app.listen(PORT,HOST)中设置时,app.address()如何为空;