在控制器中除了render 'mypage'
之外没有任何操作,在视图中除了HTML之外也没有任何操作(我已经在两个地方都注释掉了所有的Ruby代码),但加载页面仍然需要超过5秒:
Completed 200 OK in 6258ms (Views: 5283.2ms | ActiveRecord: 14.6ms)
有什么建议可以改进或者优化吗?我找到的每个“解决方案”对我都没有任何影响。Rails-dev-tweaks 没有影响,更改资产调试标志也没有影响;我实际上相信这一切都发生在请求资产之前。
更新于 5 月 7 日 14:50
大家好 - 感谢回复。首先让我说一下,我已经将其缩小到了资产范围内;删除了大约半打宝石和所有资产,将页面加载时间降至第一次加载为 1.3 秒,重新加载为 ~150ms。太棒了。所以我的问题现在变成了如何正确配置像 rails-dev-tweaks 这样的宝石来使其正常运行;我似乎找不到合适的配置。我们可能有一百多个资产 - 或许更多。
回答你们的问题: 我无法复制和粘贴视图;但是,可以说它大约有 100 行 HTML、10 行 javascript,大约有 30 行 HTML 代码中有一些 Ruby 代码,但我注释掉了所有的 Ruby 代码。
我尝试过 ruby-prof - 没有给我任何真正有用的东西。
没有进行外部 HTTP 请求。
在ApplicationController中有一个before_filter,但即使将其注释掉也没有太大的区别。
我正在开发Mac OS X 10.8上的应用程序。
我使用的是Rails 3.2.13版本。
完全没有资产: 第一次页面加载:
Completed 200 OK in 3418ms (Views: 1414.9ms | ActiveRecord: 74.6ms)
刷新页面:
Completed 200 OK in 140ms (Views: 120.8ms | ActiveRecord: 2.8ms)
有趣的是,
rails -v
命令需要4秒钟才能加载:ruby-1.9.3-p327@aidin ± time rails -v
Rails 3.2.13
rails -v 4.10s user 0.24s system 92% cpu 4.679 total
更新2 5月7日1450
新的Relic告诉我,花费的时间非常不合理,我相信是Rails依赖(实际上是ActionPack依赖)本身:Journey:
Metric Timestamp (s) Duration (ms) Exclusive (ms)
DashboardController#show 0.001 2,652 1917
详细页面显示给我这个文件:
journey-1.0.4/lib/journey/router.rb
而这一行:
status, headers, body = route.app.call(env)
更新3 5月7日 @ 1509
进一步调查发现,除了删除所有资源之外,删除所有宝石可以将响应时间降至可接受的约150毫秒。将宝石放回会使响应时间从800毫秒到1500毫秒不等;显然,仅在这些宝石中就存在导致问题的原因。
如果有人认为他们可以找出哪些宝石正在引起问题,我很乐意发布Gemfile。
before_filter
? ActiveRecord 花费了一些时间,这表明数据库实际上被访问到了一定程度。这意味着当前存在您不知道的活动。 - PinnyM