2

升级到 Rails 后,我看到了严重的性能问题。

我最近将我的项目从 Rails 2 和 Ruby 1.8 升级到 Rails 4 和 Ruby 2.0。在互联网上阅读,我知道升级应该提供开箱即用的出色性能提升(高达 30%)。不幸的是,我发现在某些情况下性能要差得多,例如一些以前需要大约 20 秒的报告,现在需要 40 秒。

我看过一些帖子暗示垃圾收集可能是问题所在。在使用了一些推荐的设置后,我发现一些较长的报告实际上更短,但简短的报告仍然差很多。

作为升级的一部分,我已经转而使用不显眼的 javascript 来渲染视图,但这似乎不会导致性能问题——大部分时间都花在了模型上。

有人知道我是否遗漏了一些配置“陷阱”吗?是否有其他人因升级而出现性能问题?

提前致谢。

4

1 回答 1

1

升级中可能总是会出现边缘情况,其中某些类型的操作运行速度较慢,而另一些则运行速度较快。最好只遵循常规的性能调整技术并使用 Oink gem 和 NewRelic 等工具来分析最慢的问题。

严格来说,通常最好在升级之前收集尽可能多的性能分析数据,这样您就可以判断特定操作是否存在更高的内存消耗、更多/更慢的垃圾收集、不同生成的 SQL(来自 activerecord 升级) ,正在创建更多对象。例如,使用升级后分析可能很难将数据置于上下文中,因此您可以判断创建 30 个 Post 对象对于给定操作是否正常。

关于预加载,我们发现子弹对于获得正确的关卡非常有用。当然,这不一定是 Rails 3/4 问题,这是对的。

我们的另一个痛点是不仅要减少查询的数量,还要小心我们是否真的需要创建一个对象。有时您可以在不创建对象的情况下只检索数据以进行显示。此外,我们现在非常小心(例如)隐式运行:

select * from books where client_id = 1 order by name

...为了创建书名下拉列表,我们可以:

select id, name from books where client_id = 1 order by name

它在 Rails 方面的效率要高得多,即使在数据库方面有时差异很小(数据库方面是 100 毫秒对 20 毫秒,但在 Rails 方面是 2000 毫秒对 500 毫秒)。

同样,可能与 Rails 3/4 无关,除非 Rails 4 中有一个怪癖可能使其效率更低。

于 2013-10-11T15:33:50.500 回答