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

更新:截至2021年5月1日,GoCenter中央存储库已经关闭,所有功能都已弃用。有关中心日落的更多信息,请阅读弃用博客文章

在GoCenter首次发布后,JFrog的团队说它是得到去模块从那里,它是获得模块的“老方法”。老实说,当他们那样说的时候,我不相信他们。遵循“眼见为实”的古老谚语,我开始测试速度,看看这些说法是否准确。

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

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

测试

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

这些数字

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

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

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

使用家庭网络的个人项目对照表

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

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

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

使用JFrog网络的Hugo比较表

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

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

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

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

结果

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

现在轮到你了!

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

我建议你在你的项目中尝试一下,然后用标签把结果发推给我们# golang# GoCenter.完成之后,给我们发邮件gocenter@m.si-fil.com有了地址,我们可以把这件很棒的衬衫寄到!

GoCenter t恤挑战