2008 年 12 月 20 日,星期六

Rails Metal 性能

作者:Pratik Naik

Josh 最近添加了 Rails Metal,这引起了不少关注。对于那些框架速度实际上很重要的小众场景,Metal 是一项很棒的功能。

然而,有人报告称 与常规 Rails 操作相比有 25 倍的速度提升,这似乎不太对。于是我决定对“Hello World”Rails 操作与 Metal 进行一些基准测试。以下是我的结果:

Rails 操作

每次请求时间:1.244 [毫秒]
吞吐量:800 次请求/秒

Metal

每次请求时间:0.386 [毫秒]
吞吐量:3000 次请求/秒

有关基准命令/代码的更多详细信息,请访问 http://gist.github.com/38080

当然,这些不是非常科学的基准测试,您看到的结果可能会略有不同。您还应该确保 **在生产模式下运行您的基准测试**。

现在,如果您比较这些结果,3000 次请求/秒对 800 次请求/秒,您可能会认为看到了 3 倍的性能提升。然而,这是错误的看法,吞吐量并非最佳衡量标准。

您应该关注的是 **每次请求时间** 的差异。在我的基准测试中,使用 Metal 时获得的提速大约是 **1 毫秒**。这是我相对于常规 Rails 操作获得的恒定提速。理解这是一个 **恒定的提速** 非常重要。对我而言,它总是 1 毫秒。

例如,如果我的 Rails 操作需要 **12 毫秒**,当我用 Metal 全部重写时,它将需要大约 **11 毫秒**,而不是 4 毫秒。

总而言之,我将引用 DHH 的话:

但对于那些少数的、专门的场景,您只需要尽可能快的原始速度,Metal 可以说是“对症下药”。它让您在一个包中拥有两全其美。当需要时,它能实现 Rack 应用程序的最低开销,而当不需要时,则可以获得 Action Controller 的全功能优势。