Swagger UI在Linux环境下可能遇到的性能问题主要包括文档加载慢、接口响应延迟等。以下是一些有效的优化策略:
# 使用minify工具压缩生成的Swagger JSON
npm install -g json-minify
json-minify swagger.json > swagger.min.json
location /swagger/ {
# 启用gzip压缩
gzip on;
gzip_types application/json;
# 设置缓存头
expires 1d;
add_header Cache-Control "public";
# 静态文件服务优化
sendfile on;
tcp_nopush on;
tcp_nodelay on;
# 限制请求体大小
client_max_body_size 10m;
}
const swaggerUi = require('swagger-ui-express');
const options = {
explorer: false, // 禁用资源管理器
validatorUrl: null, // 禁用在线验证器
docExpansion: 'none' // 默认折叠所有文档
};
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec, options));
const NodeCache = require('node-cache');
const swaggerCache = new NodeCache({ stdTTL: 3600 }); // 1小时缓存
app.get('/swagger.json', (req, res) => {
let swaggerSpec = swaggerCache.get('swaggerSpec');
if (!swaggerSpec) {
swaggerSpec = generateSwaggerSpec(); // 你的生成函数
swaggerCache.set('swaggerSpec', swaggerSpec);
}
res.json(swaggerSpec);
});
const redis = require('redis');
const client = redis.createClient();
app.get('/swagger.json', async (req, res) => {
try {
let swaggerSpec = await client.get('swaggerSpec');
if (!swaggerSpec) {
swaggerSpec = generateSwaggerSpec();
await client.setex('swaggerSpec', 3600, JSON.stringify(swaggerSpec));
} else {
swaggerSpec = JSON.parse(swaggerSpec);
}
res.json(swaggerSpec);
} catch (err) {
// 错误处理
}
});
# 增加文件描述符限制
echo "fs.file-max = 65536" >> /etc/sysctl.conf
sysctl -p
# 调整TCP设置
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_fin_timeout = 30" >> /etc/sysctl.conf
sysctl -p
# 使用PM2管理Node.js进程
npm install -g pm2
pm2 start your-app.js -i max --name "swagger-service"
pm2 save
pm2 startup
htop -u nodejs # 监控Node.js进程资源使用
ab -n 1000 -c 100 http://localhost:3000/api-docs/
通过以上优化措施,可以显著提升Swagger在Linux环境下的性能表现。根据实际应用场景,可以选择最适合的优化组合。