在 Linux 环境下“优化 Swagger”通常涉及 性能、内存、启动速度、文档生成效率、API 响应速度 等方面。下面按常见场景给你一套实用优化方案,你可以对照自己的使用方式(Spring Boot / Node / Python / Nginx 等)进行裁剪。
先确认你是哪种场景,不同场景优化点不同:
| 场景 | 说明 |
|---|---|
| Spring Boot + Swagger / springdoc-openapi | 最常见 |
| Node.js + swagger-ui-express | 前端或 BFF |
| Python + FastAPI / Flask | 自动生成 |
| 静态 Swagger UI | 仅展示文档 |
| 生产环境 | 是否对外暴露 |
这是最重要的一条。
spring:
profiles: prod
@Profile("!prod")
@Configuration
public class SwaggerConfig {
// Swagger 配置
}
或:
@Bean
public Docket api() {
return new Docket(DocumentationType.OAS_30)
.enable(false); // 生产环境关闭
}
✅ 好处:
springdoc-openapi 更快、更轻量
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.x</version>
</dependency>
优化点:
避免扫描整个项目。
@Bean
public Docket api() {
return new Docket(DocumentationType.OAS_30)
.select()
.apis(RequestHandlerSelectors.basePackage("com.xxx.api"))
.paths(PathSelectors.any())
.build();
}
❌ 不推荐:
.apis(RequestHandlerSelectors.any())
@ApiModelProperty✅ 推荐:
public class UserDTO {
private String name;
private Integer age;
}
❌ 不推荐:
@ApiModelProperty(example = "Tom", required = true)
避免每次从 Maven / npm 解压。
spring:
mvc:
static-path-pattern: /static/**
或使用 Nginx:
location /swagger-ui/ {
alias /usr/share/nginx/html/swagger-ui/;
expires 30d;
}
减少 DOM 渲染压力。
<script>
window.onload = function () {
SwaggerUIBundle({
url: "/v3/api-docs",
dom_id: "#swagger-ui",
docExpansion: "none"
});
};
</script>
-Xms256m
-Xmx512m
-XX:+UseG1GC
减少 Swagger 反射带来的 GC 压力。
location /v3/api-docs {
proxy_pass http://localhost:8080;
expires 10m;
}
避免 Swagger 示例数据过大。
@GetMapping("/list")
public Page<User> list(Pageable pageable) {
return userService.list(pageable);
}
大型项目建议:
api-docs@GroupedOpenApi
public static GroupedOpenApi adminApi() {
return GroupedOpenApi.builder()
.group("admin")
.pathsToMatch("/admin/**")
.build();
}
✅ 生产环境必须:
/v3/api-docs/swagger-ui/**✅ 开发环境:
| 项目 | 是否 |
|---|---|
| 生产环境禁用 Swagger | ✅ |
| 限制扫描包 | ✅ |
| 使用 springdoc | ✅ |
| 使用 CDN / 缓存 | ✅ |
| 减少注解 | ✅ |
如果你愿意,可以直接告诉我:
我可以给你 针对性的优化方案或配置示例。