构建时间很重要——速度就是一切

更新:自2021年5月1日起,GoCenter中央存储库已被淘汰,所有功能已弃用。有关中心日落的更多信息,请阅读弃用博客文章

在GoCenter第一次发布后,JFrog的团队说它是得到去模块从那时起,它就变成了“旧的方式”获得模块。说实话,当他们这么说的时候,我并不相信他们。遵循“眼见为实”的古老谚语,我开始测试速度,看看这些说法是否准确。

博士TL;:事实证明这个团队是对的!GoCenter不仅节省时间,还节省CPU周期。随着项目越来越大,依赖树也越来越大,节省的成本也会增加。你不必相信我的话,看看“现在轮到你了!”的部分,以查看我的测试脚本,并在两分钟内开始测试!

为了测试,我在两个不同的网络上测试了两个项目。工程团队只有在所有测试完成后才知道我的测试,以避免他们篡改我的数据。我选了一个个人项目我最喜欢的静态网站生成器,雨果.GoCenter团队对所使用的项目或模块和版本没有影响力。这两个地点是为了确保JFrog办公室的测试不会对GoCenter造成不公平的偏袒。

测试

构建一个Go项目通常由两部分组成。首先,下载依赖项,然后构建可执行文件。由于所有测试都在同一台机器上完成,结果只关注第一部分,即下载依赖项。为了使测试尽可能公平和不间断,我写了一个小脚本,在运行之前删除所有模块。””。无论是使用GitHub还是GoCenter,这些命令都要运行十次,并将结果记录在一个文件中。

这些数字

可以找到完整的测试列表和结果在这里.为了便于比较结果,下面的表格标记了每个项目的最快和最慢运行之间的差异。

我个人项目使用JFrog网络的对比表

在用户模式下花费的CPU秒数(越少越好) 在内核模式下花费的CPU秒数(越少越好) CPU百分比(越少越好) 总运行时间(以秒为单位)(越少越好)
比较最慢的运行 GoCenter减少了17.79倍的CPU秒数 GoCenter减少了7.03倍的CPU秒数 GoCenter的CPU利用率是前者的6.12倍 使用GoCenter要快2.14倍
比较最快的跑步速度 GoCenter减少了9.37倍的CPU秒数 GoCenter减少了5.64倍的CPU秒数 GoCenter减少了2.64倍的CPU使用 使用GoCenter要快2.94倍

比较表,我的个人项目使用我的家庭网络

在用户模式下花费的CPU秒数(越少越好) 在内核模式下花费的CPU秒数(越少越好) CPU百分比(越少越好) 总运行时间(以秒为单位)(越少越好)
比较最慢的运行 GoCenter减少了6.79倍的CPU秒数 GoCenter减少3.31倍的CPU秒数 GoCenter的CPU消耗少了2.21倍 使用GoCenter要快2.38倍
比较最快的跑步速度 GoCenter减少了5.73倍的CPU秒数 GoCenter减少了3.49倍的CPU秒数 GoCenter的CPU消耗少了1.07倍 使用GoCenter要快4.45倍

查看总运行时间,也就是机器获取模块并将其放入正确位置所花费的时间,使用GoCenter比从GitHub获取模块要快得多。

我接受这是一个只有6个直接使用模块和12个间接使用模块的个人项目。在一个更大的项目中使用GoCenter会有什么影响,比如有43个直接使用模块和11个间接使用模块的Hugo ?

Hugo使用JFrog网络的对比表

在用户模式下花费的CPU秒数(越少越好) 在内核模式下花费的CPU秒数(越少越好) CPU百分比(越少越好) 总运行时间(以秒为单位)(越少越好)
比较最慢的运行 GoCenter减少了7.76倍的CPU秒数 GoCenter减少了5.17倍的CPU秒数 GoCenter的CPU消耗少了0.79倍 使用GoCenter要快8.34倍
比较最快的跑步速度 GoCenter减少了7.51倍的CPU秒数 GoCenter减少了4.97倍的CPU秒数 GoCenter的CPU消耗少了0.66倍 使用GoCenter要快9.77倍

对比表Hugo使用我的家庭网络

在用户模式下花费的CPU秒数(越少越好) 在内核模式下花费的CPU秒数(越少越好) CPU百分比(越少越好) 总运行时间(以秒为单位)(越少越好)
比较最慢的运行 GoCenter减少了6.71倍的CPU秒数 GoCenter减少了4.65倍的CPU秒数 GoCenter的CPU消耗是它的0.75倍 使用GoCenter要快7.83倍
比较最快的跑步速度 GoCenter减少了7.64倍的CPU秒数 GoCenter减少了5.61倍的CPU秒数 GoCenter的CPU消耗少了0.67倍 使用GoCenter要快10.10倍

即使对于较大的项目,使用GoCenter获取Go模块也是有意义的。

结果

事实证明,这个团队是对的!GoCenter不只是用于消除供应商并使您的构建可重复使用不可改变的模块.使用GoCenter获取Go模块也比从版本控制系统获取它们更快。从上述数字可以得出两个有趣的结果。首先,在较慢的网络上,由于下载模块所占用的带宽比下载源代码要少得多,因此您将看到更大的性能提升。其次,随着项目复杂性的增加(依赖关系树更大),您还将看到性能的大幅提升。

现在轮到你了!

你不必相信我的话,事实上,我挑战你自己试试!这是我用来测试项目的脚本:

我挑战你在你的项目中尝试它,并使用标签将结果发推给我们# golang而且# GoCenter.完成后,给我们发邮件gocenter@www.si-fil.com还有一个地址,我们可以把这件超赞的衬衫寄到!

GoCenter t恤挑战