Chrome灯塔告诉我,通过压缩我的api路由,我可以节省大约90%的传输字节。
我如何修改这段代码(api/某样东西,to )以启用压缩?
export default {
path: '/api/something',
async handler(req, res) {
let data = await obtainDataSomehow();
res.end(JSON.stringify(data));
}
}
静态文件和呈现的路由已经被压缩,我只对api路由有问题。
发布于 2022-02-23 03:45:11
选项1:速成和压缩中间件
如果您生成了服务器中间件扩展Express,那么您可以使用压缩中间件来处理HTTP响应的压缩:
例如:
import express from 'express';
import compression from 'compression';
const app = express();
// NB: compression threshold set to 0 for demonstration purposes only;
// this should be set to a higher value, such as the default 1 kb
// in live applications
app.use(compression({ threshold: 0 }));
app.get('*', (req, res) => {
const data = { success: true };
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(data));
});
export default {
path: '/api/something',
handler: app
}
这可以从命令行进行测试,如:
curl -H "Accept-Encoding: gzip" -i http://localhost:3000/api/something
,它将显示响应头Content-Encoding: gzip
。
选项2:委托网关/反向代理
如果您的实时部署运行在网关或反向代理(如NGINX、Apache、Cloudflare等)后面,您可以让它处理压缩,而不必让服务器中间件这样做。
在这个场景中,还可以禁用Nuxt nuxt.config.js中的渲染器对其他资源的压缩。
export default {
render: {
compressor: false
}
};
https://stackoverflow.com/questions/71179768
复制