下面是使用 swag v1.7.9 构建接口文件的耗时,可以看到因为添加了一些额外的类型,比如 datatypes.JSON
,所以需要用到 parseDependency
和 parseInternal
,构建时间一共花了四五分钟,在项目开始,频繁修改接口格式的时候,这是很难接受的。
# swag init --parseDependency --parseInternal
2022/02/23 10:26:44 Generate swagger docs....
2022/02/23 10:26:44 Generate general API Info, search dir:./
2022/02/23 10:30:43 Generating app.Response
2022/02/23 10:30:43 Generating entity.Cluster
2022/02/23 10:30:43 Generating entity.Model
2022/02/23 10:30:43 Generating entity.Clusters
2022/02/23 10:30:43 Generating app.Pagination
2022/02/23 10:30:43 Generating entity.User
2022/02/23 10:30:43 Generating entity.Namespace
2022/02/23 10:30:43 Generating entity.Notification
2022/02/23 10:30:43 Generating datatypes.JSON
2022/02/23 10:30:43 Generating json.RawMessage
2022/02/23 10:30:43 Generating entity.Notifications
2022/02/23 10:30:43 Generating entity.PrometheusRule
2022/02/23 10:30:43 Generating entity.Alert
2022/02/23 10:30:43 Generating entity.PrometheusRules
2022/02/23 10:30:43 Generating entity.Users
2022/02/23 10:30:43 create docs.go at docs/docs.go
2022/02/23 10:30:43 create swagger.json at docs/swagger.json
2022/02/23 10:30:43 create swagger.yaml at docs/swagger.yaml
查看 swag 社区是否有关注到这个问题,发现已经有一个大神提过,并且提出了解决方案,但是目前还没有被社区接纳。
https://github.com/swaggo/swag/pull/1108
具体问题就不深入了,大概就是寻找依赖的时候遍历了太多次,为了尽快提升 swag 的速度,clone 了大神的仓库,直接编译了一个新的 swag 二进制,重新运行,速度瞬间提升。
# 为了区分原来的swag,新编译出来的swag重命名为swag_clone
# swag_clone init --parseDependency --parseInternal --parseGoList
2022/02/23 10:34:30 Generate swagger docs....
2022/02/23 10:34:30 Generate general API Info, search dir:./
2022/02/23 10:34:33 Generating app.Response
2022/02/23 10:34:33 Generating entity.Cluster
2022/02/23 10:34:33 Generating entity.Model
2022/02/23 10:34:33 Generating entity.Clusters
2022/02/23 10:34:33 Generating app.Pagination
2022/02/23 10:34:33 Generating entity.User
2022/02/23 10:34:33 Generating entity.Namespace
2022/02/23 10:34:33 Generating entity.Notification
2022/02/23 10:34:33 Generating datatypes.JSON
2022/02/23 10:34:33 Generating json.RawMessage
2022/02/23 10:34:33 Generating entity.Notifications
2022/02/23 10:34:33 Generating entity.PrometheusRule
2022/02/23 10:34:33 Generating entity.Alert
2022/02/23 10:34:33 Generating entity.PrometheusRules
2022/02/23 10:34:33 Generating entity.Users
2022/02/23 10:34:33 create docs.go at docs/docs.go
2022/02/23 10:34:33 create swagger.json at docs/swagger.json
2022/02/23 10:34:34 create swagger.yaml at docs/swagger.yaml