Josh 最近添加了一种功能 Rails Metal,该功能最近获得了相当多的宣传。对于那些罕见情况下框架的速度实际上很重要的用户而言,Metal 是一款非常好的功能。
然而,有人报告称 比常规 Rails 操作的速度提高了 25 倍,但这似乎不太可能。所以我决定对“Hello World”Rails 操作对比 Metal 运行一些基准测试。以下是我的结果
你可以通过 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 的全功能优点。