

如何提高golang项目的编译速度
source link: http://xiaorui.cc/archives/6899
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

如何提高golang项目的编译速度 – 峰云就她了
go1.15beta一出来,腾讯云的朋友就通知到我,官方doc里有说提高了编译速度?我目前在做容器云调度相关的项目,由于中间引入了各种k8s、rancher、中间件的库,编译速度着实太慢,在16寸标压cpu的mac下也需要16s,而40c的服务器则需要18s。😁
为什么要优化?
这是一个好问题呀。如果正常上线20s的编译时间无所谓。但开发期间测试期间,每次一个小修改都需要20秒才能启动,TM 真心受不了。😭
如何优化?
优化golang项目的编译速度刻不容缓,当然这里的优化不是指优化go编译器代码,而是从其他途径优化。
第一步,拆解
容器云管理端是分服务端和客户端的。
服务端作为master主控角色,可以把独立一体式的功能拆分多角色。但客户端要部署到每个物理主机上,为了减少维护的复杂性及稳定性,所以不做拆解。

第二步,golang plugin
由于容器云项目集成了阉割版的prometheus、二次开发的node exportor、魔改的rancher等组件,这些组件跟容器云无太紧密的数据交互,所以我都单独拆分并编译成golang plugin。
容器云客户端把非紧密的功能拆分出去,然后编译成plugin插件使用。这样主代码编译速度从16s到了9s。 ( 😅 代码都拆离了,能不快么 )
plugin还可以动态更新,热加载,代码解耦方面。开始用plugin只是为了解决容器云里需要热插拔的逻辑,后来才因编译速度把其他组件也打成了plugin。
先前写了一个go node_exportoer plugin的例子,有兴趣的朋友可以看看。
https://github.com/rfyiamcool/node-exporter-plugin
第三步,等待golang 1.15 release
go team一直在调优go编译器,在go1.10实现了golang build cache,该编译缓存也是默认开启的。后续1.12和1.13做了小范围的优化,目前go1.15beta已经出来了,经过我的测试得出,go1.15编译速度着实加快了不少。
下面是两个版本的对比,粗略看结果可得出 go1.15要比1.14快了20%左右。两个版本在编译期间的cpu表现来说,go1.15的cpu消耗更大一些。
go 1.14.4
// xiaorui.cc
time go1.15beta build cmd/master/main.go
go1.15beta build cmd/master/main.go 10.84s user 1.76s system 172% cpu 7.314 total time go1.15beta build cmd/master/main.go
go1.15beta build cmd/master/main.go 11.40s user 2.00s system 177% cpu 7.554 total
time go1.15beta build cmd/master/main.go
go1.15beta build cmd/master/main.go 11.53s user 1.84s system 180% cpu 7.410 total time go1.15beta build cmd/master/main.go
go1.15beta build cmd/master/main.go 10.94s user 1.95s system 179% cpu 7.193 total
$ time go1.15beta build cmd/master/main.go
go1.15beta build cmd/master/main.go 11.54s user 1.82s system 180% cpu 7.390 total
golang 1.15 beta
// xiaorui.cc
time go build cmd/master/main.go
go build cmd/master/main.go 11.65s user 1.63s system 144% cpu 9.196 total time go build cmd/master/main.go
go build cmd/master/main.go 11.91s user 1.73s system 137% cpu 9.935 total
time go build cmd/master/main.go
go build cmd/master/main.go 11.87s user 1.86s system 138% cpu 9.945 total time go build cmd/master/main.go
go build cmd/master/main.go 11.66s user 1.73s system 143% cpu 9.306 total
$ time go build cmd/master/main.go
go build cmd/master/main.go 11.52s user 1.76s system 136% cpu 9.754 total
golang plugin是有局限性的,业务代码不适合用。服务的组件拆分看起来更靠谱点。
Recommend
-
154
公司的项目代码比较多,每次调试改动java文件后要将近2分钟才能跑起来,实在受不了。在网上找了一大堆配置参数也没有很明显的效果, 尝试使用instant run效果也不怎么样,然后又尝试使用freeline编译速度还可以但是不稳定,每次失败后全量编译很耗费时间
-
22
iOS编译速度如何稳定提高10倍以上Mr_Coder_12020.05.26 16:39:17字数 4,686阅读 2,502
-
34
如何提高golang项目的编译速度 – 峰云就她了
-
9
网友:18、下载更多的RAM 杨净 发自 凹非寺 量子位 报道 | 公众号 QbitAI 如何提升PyTorch“炼丹”速度? ...
-
9
阿航 2020年5月19日
-
9
iOS编译速度如何稳定提高10倍以上之一 四、双私有源二进制组件整体设计方案 1、制作流程 - 二进制组件
-
10
Github开源地址,一步一步教你怎么使用 经过多年的发展,美柚iOS项目代码已经达到40W行+的规模,所使用的 Pod...
-
4
加快apk的构建速度,如何把编译时间从130秒降到17秒(二) – Android开发中文站在上一篇文章加快apk的构建速度,如何把编译时间从130秒降到17秒中讲了优化的思路与初步的实现,经过一段时间的优化性能和稳定...
-
2
如何让OpenHarmony编译速度“狂飙” 原创 精华 OpenHarmony有两种编译方式,一种是通过hb工具编译,一种是通过build.sh脚本编译。本文笔者将提升build.sh方式编译速度的方法整...
-
9
如何让OpenHarmony编译速度“狂飙” 作者:离北况归 2023-02-09 15:28:19 OpenHarmony有两种编译方式,一种是通过hb工具编译,一种是通过build.sh脚本编译。 ...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK