name: API响应优化 description: 通过减少负载、缓存策略和压缩技术优化API性能。用于改善API响应时间、减少带宽使用或实现高效缓存。
API响应优化
减少负载大小,实现缓存,并启用压缩以获得更快的API。
稀疏字段集
// 允许客户端选择字段:GET /users?fields=id,name,email
app.get('/users', async (req, res) => {
const fields = req.query.fields?.split(',') || null;
const users = await User.find({}, fields?.join(' '));
res.json(users);
});
HTTP缓存头
app.get('/products/:id', async (req, res) => {
const product = await Product.findById(req.params.id);
const etag = crypto.createHash('md5').update(JSON.stringify(product)).digest('hex');
if (req.headers['if-none-match'] === etag) {
return res.status(304).end();
}
res.set({
'Cache-Control': 'public, max-age=3600',
'ETag': etag
});
res.json(product);
});
响应压缩
const compression = require('compression');
app.use(compression({
filter: (req, res) => {
if (req.headers['x-no-compression']) return false;
return compression.filter(req, res);
},
level: 6 // 在速度和压缩之间平衡
}));
性能目标
| 指标 | 目标 |
|---|---|
| 响应时间 | <100毫秒(从500毫秒) |
| 负载大小 | <50KB(从500KB) |
| 服务器CPU | <30%(从80%) |
优化检查表
- [ ] 从响应中移除敏感/不必要的字段
- [ ] 实现稀疏字段集
- [ ] 添加ETag/最后修改头
- [ ] 启用gzip/brotli压缩
- [ ] 对集合使用分页
- [ ] 预加载以防止N+1查询
- [ ] 使用APM工具监控
最佳实践
- 积极缓存不可变资源
- 对频繁变化的数据使用短TTL
- 写入时使缓存无效
- 压缩响应>1KB
- 优化前进行性能分析