目录

swag-parseDependecy太慢的问题

概述

下面是使用 swag v1.7.9 构建接口文件的耗时,可以看到因为添加了一些额外的类型,比如 datatypes.JSON,所以需要用到 parseDependencyparseInternal,构建时间一共花了四五分钟,在项目开始,频繁修改接口格式的时候,这是很难接受的。

解决问题

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 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

从上面看,编译过程一共需要4分钟。查看 swag 社区是否有关注到这个问题,发现已经有一个大神提过,并且提出了解决方案,但是目前还没有被社区接纳这个 pull request, 最新的回复显示这个 pr 已经被接受了。

具体问题就不深入了,大概就是寻找依赖的时候遍历了太多次,为了尽快提升 swag 的速度,clone 了大神的仓库,直接编译了一个新的 swag 二进制,重新运行,速度瞬间提升。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 为了区分原来的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

使用重新编译的 swag 处理,时间仅需4秒!

参考资料

  1. swag
警告
本文最后更新于 2021年11月11日,文中内容可能已过时,请谨慎参考。