Ruby on rails 正在经历性能不佳的Rails
将应用程序升级到Rails 3后,我的性能变差了 升级之前,我得到了60ms-100ms的响应时间 升级后,我得到300ms-1500ms响应时间 日志显示了每次的响应时间示例: Rails 3.0.0:在1454ms内完成200 OK(视图: 1314.6ms |活动记录:25.1ms)Ruby on rails 正在经历性能不佳的Rails,ruby-on-rails,Ruby On Rails,将应用程序升级到Rails 3后,我的性能变差了 升级之前,我得到了60ms-100ms的响应时间 升级后,我得到300ms-1500ms响应时间 日志显示了每次的响应时间示例: Rails 3.0.0:在1454ms内完成200 OK(视图: 1314.6ms |活动记录:25.1ms) Rails 2.3.8:在31毫秒内完成(视图:27,分贝:1)| 200正常[已过滤] 我试过使用passenger和“rails服务器”运行(两个结果都很接近)。我创建了两个相同的应用程序(运行在2.3.
Rails 2.3.8:在31毫秒内完成(视图:27,分贝:1)| 200正常[已过滤] 我试过使用passenger和“rails服务器”运行(两个结果都很接近)。我创建了两个相同的应用程序(运行在2.3.8和3.0.0中)来演示性能差异。导致性能问题的代码是:
<%- @posts.each do |post| -%>
<h1><%= post.title %></h1>
<p><%=truncate post.body %></p>
<%- post.comments.each do |comment| -%>
<h2><%= comment.title%></h2>
<p><%=truncate comment.body %></p>
<ul>
<%- comment.ratings.each do |rating| -%>
<li><%=truncate rating.notes %></li>
<%- end -%>
</ul>
<%- end -%>
<%- end -%>
对于完整来源,项目可在以下位置获得:
谢谢 没有太多事情要做,任何人都无能为力 生成的源文件 用红宝石 真的吗 嵌套循环
选择n+1
?是否需要在某些查询中指定需要加载的特定关联
--编辑--
ActiveRecord查询API和性能特征已从v2显著更改为v3
也许你需要一些联想
要在帖子中加载评论,请使用
@posts = Post.includes(:comments)
@posts = Post.includes(:comments => :ratings)
要在帖子中加载评论和评论评级,请使用
@posts = Post.includes(:comments)
@posts = Post.includes(:comments => :ratings)
请包括您在测试中使用的Ruby版本 试着在Ruby 1.9.2-head上运行Rails 3,看看是否注意到了不同。您可以使用类似的工具来非常轻松地尝试多个版本的Ruby 如本文所述,1.9.1似乎存在一些性能问题。如果您将Ruby Enterprise Edition与Rails 3一起使用,那么也可能会导致一些性能问题。如果您使用的插件与Ruby 1.9不兼容,请确保您使用的是REE>=1.8.7-2010.02,如上所述
我相信Rails 3的开发正在进行中,并且已经进行了后端口,以便在早期版本上运行。如果webrick和passenger提供了类似的性能,那么您还没有设置passengerproperly@Matt嗯,它是本地机器(运行MacOSX)上的一个相对较小的应用程序。安装GEM后,我遵循了乘客设置指南。这是一个干净的SnowLeopard安装,我尝试在开发和生产之间切换机架和Rails环境。还有其他想法吗?嗨,正义。很抱歉,这很难精确,但我发现应用程序的速度正在放缓。日志显示ActiveRecord查询大致相同,但视图渲染时间增加了100倍。我只是想知道其他人是否也经历过类似的问题。@Justice Hi Justice。很抱歉,我无法发布原始项目的任何源代码,但我花了一个小时生成了似乎有相同问题的示例项目。该项目非常简单,只具有基本的嵌套循环。我添加了一些关于快速加载的提示。这些提示对你的项目有帮助吗?嗨,正义。谢谢你的更新。这减少了我发布的两个示例应用程序的运行时间;我目前正在私有应用程序中使用一些急切的加载,但我一定会检查以找到更多的改进。然而,我更关心的是从Rails 2.3.8迁移到Rails 3.0.0,以及我经历的“五个十”减速。谢谢你提供的好信息。您知道延迟加载是否可以在应用程序范围内默认?再次感谢!作为补充说明。我推送了一个新版本的代码,以便其他人可以看到在使用渴望加载时的性能改进。这些测试现在将进行基准测试,我发现这些测试在解决一些环境问题时非常有用。另外,Rails 3.0.0中的急切加载似乎比Rails 2.8.7中的性能改进更大(对我来说)。谢谢你的建议。ruby——版本给出:ruby 1.8.7(2009-06-12 patchlevel 174)[universal-darwin10.0]我正在部署到Heroku(目前只支持1.8.7和1.9.1),我不确定我的插件兼容性(需要一些时间进行测试)。我将检查示例代码在不同的ruby版本中是否有任何性能变化。@Kevin Sylvestre:Heroku确实支持REE的正确版本,正如他们在最新博文中所指出的:您可以通过键入
Heroku stack
@Awgy Oops来检查正在运行的堆栈!谢谢你说得对!我将此作为指导原则:。看起来他们有一些过时的文档。谢谢,我很快就会测试它。@Awgy我刚刚完成了RVM的计算和测试!在示例应用程序中使用1.9.2将响应时间减少到使用1.8.7时的20%。现在我只需要整理一些依赖项!谢谢你的帮助!这正是我所需要的@凯文·西尔维斯特:我很高兴听到这有帮助=)