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 个 r/s 与 800 个 r/s,你可能会认为你看到了 3 倍的性能提升。然而,这是错误的感知,并且吞吐量在这里不是最佳指标。

每个请求的时间差异是你应该关注的。在我的基准测试中,在使用 Metal 时获得的速度提升约为1 毫秒。而这是一个恒定的速度提升,我将通过常规 Rails 操作获得它。非常重要的是,你需要理解这是一个恒定的速度提升。对于我而言,它将始终是 1 毫秒。

例如,如果我的 Rails 操作需要12 毫秒,那么当我在 Metal 中重新实现它时,它大约需要11 毫秒,而不是 4 毫秒。

最后,我将引用 DHH

但是对于那些需要尽可能多的原始速度的特殊情况,Metal 可能是医生建议的。它允许你在一个程序包中同时拥有两个世界的优点。当它很重要时,对于 Rack 应用程序来说最低的可能开销,并且当它不重要时,Action Controller 的全功能优点。