如果我使用gzip压缩响应,我的一个Google Cloud Functions中的JSON响应可以减少70-80%。
如何从我的函数发送压缩的json响应(通过http(s)触发)?
这也意味着我可以通过谷歌云平台节省大量网络费用,并为数据的移动消费者更快地加载数据。
我尝试使用Tuky,Fecha,Bid_requests,Bid_responses_won,Fill_rate,Bid_responses_won_clearing_price,Bid_responses_won_clearing_income,aaaP,17/01/2018,41325955,22453,0.05,3.97,89.17
本机模块,但没有运气......
zlib
在Postman中,响应的大小相同,内容类型已更改,但响应中没有设置if (req.get('Accept-Encoding') && req.get('Accept-Encoding').indexOf('gzip') > -1) {
interpretation.gzip = true;
const zlib = require('zlib');
res.set('Content-Type', 'text/plain');
res.set('Content-Encoding', 'gzip');
zlib.gzip(JSON.stringify(interpretation), function (error, result) {
if (error) throw error;
res.status(200).send(result);
})
} else {
interpretation.gzip = false;
res.status(200).send(interpretation);
}
标题...
答案 0 :(得分:1)
查看App Engine FAQ,特别是“如何提供压缩内容?”这一问题的答案:
....为了强制提供gzip压缩内容,客户可以提供'gzip'作为 Accept-Encoding 和 用户代理请求标头。如果不存在 Accept-Encoding 标头,则不会对内容进行gzip压缩...
另外,在this group post中,有一个示例说明如何使用Accept-Encoding
,User-Agent
的组合来发送云功能请求:
curl -v "https://us-central1-<project>.cloudfunctions.net/test" -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36" -H "Accept-Encoding: gzip"
答案 1 :(得分:0)
您可以尝试使用zlib模块来处理压缩并为响应设置适当的编码:
exports.helloWorld = function helloWorld(req, res) {
const zlib = require('zlib');
// Obtain JSON stream from your source...
res.status(200);
res.set('Content-Type', 'text/plain');
res.set('Content-Encoding', 'gzip');
json.pipe(zlib.createGzip()).pipe(res);
};
当然,首先要检查客户是否接受gzip
。此外,使用zlib
编码可能很昂贵,结果应该缓存。
答案 2 :(得分:0)
Expressjs Production best practices: performance and reliability如下所述,它可以适用于基本的Node.js。他们使用流行的compression package available on NPM。
Gzip压缩可以大大减小响应主体的大小,从而提高Web应用程序的速度。在Express应用程序中使用压缩中间件进行gzip压缩。例如:
var compression = require('compression')
var express = require('express')
var app = express()
app.use(compression())