2013-05-07 71 views
5

随着没有发生在控制器之外render 'mypage'没有在除了HTML视图发生的事情(我注释掉在这两个地方的所有Ruby代码),它仍然接管5秒加载该页面:Rails开发模式呈现的观点非常缓慢

Completed 200 OK in 6258ms (Views: 5283.2ms | ActiveRecord: 14.6ms) 

任何建议我如何可以改善这个或配置文件呢?我遇到的每个“解决方案”对我都没有影响。 Rails-dev-tweaks不会产生影响,更改资产调试标志不起作用;我实际上相信在请求资产之前,这一切都发生在之前。

更新 1450年5月7日

大家好 - 感谢您的答复。让我开始说我缩小到资产;删除大约六个宝石和所有资产已经使页面加载时间降低到1.3秒,第一次加载,重新加载约150ms。太棒了。所以现在我的问题变成了如何正确配置像rails-dev-tweaks这样的gem来实现它;我似乎无法找到合适的配置。我们可能有一百个左右的资产 - 也许多一点。

要回答您的问题: 我不幸无法复制和粘贴视图;然而,足以说它是大约100行的HTML,10行的javascript,也许30行的HTML代码中有一些Ruby代码,但我评论了所有的Ruby。

我试图红宝石教授 - 没有给我任何东西

无需外部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秒,以载荷:

[email protected] ± time rails -v 
    Rails 3.2.13 
    rails -v 4.10s user 0.24s system 92% cpu 4.679 total 

更新2 1450年5月7日

New Relic的告诉我有什么,我相信采取过多的时间量是Rails的依赖(实际上是ActionPack的依赖),旅程本身:

    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 07年5月07日1509

进一步的调查显示,除了删除所有资产,删除所有gems将响应时间减少到可接受的〜150毫秒。把宝石放回800毫秒到1500毫秒;很明显,只有这些问题会引发问题。

如果有人认为他们可以挑选出其中的宝石是造成问题,我很高兴能发布的Gemfile

+1

你能告诉我们你的看法? – Raindal 2013-05-07 14:45:03

+0

你见过ruby-prof – juanpastas 2013-05-07 14:45:26

+0

你是否在做任何外部HTTP请求? – Bitterzoet 2013-05-07 15:02:52

回答

0

所以加载时间通常发生的资产负载或SQL请求的结果。

首先,让我们先从资产:经常与Rails应用发生

的一个错误是,开发商正在装载方式比则更多的资产真正需要的。您可以做的一些故障排除是在application.jsapplication.css,删除//= require_tree .。这会加载资产/样式表和assets/javascripts下的所有资产。

二,降低你的SQL查询

您可能有许多SQL查询在你的控制器运行(!),型号,或有时意见。这会大大减慢页面的加载时间,因为它们会不断反弹到数据库以完成查询。

另一个秘诀:

您可以添加到use Rack::Deflater到/config.ru像压缩执行gzip的页面加载时。这帮助我加快了我的页面。

最后提示:

尽量减少宝石的你在你的应用程序中使用的量。他们中的很多人可能会节省一些时间,但每个人都需要更多的HTTP请求来加载他们的资产。对于大多数人来说,你可以用你自己的代码复制他们的功能。

好吧......多一个

尽量减少你的资产进行生产。这可以减少浏览器扫描代码的时间,因为它通过删除空白来减少行数量!

希望这些帮助!

+0

感谢您的提示!绝对需要努力减少资产;我们已经清理了很多SQL查询,但总是可以再次查看。我将检查Rack :: Deflater。我也绝对需要减少使用的宝石数量。看看最新的更新 - 似乎有很多时间花在* my *代码之外...... – pcragone 2013-05-07 18:55:58

+0

我明白了。你确定你没有远程加载任何资产吗? (如jQuery或其他外部文件?)另外,如果你觉得这有帮助,+ 1 /上 – 2013-05-07 18:59:59

3

尝试在我的情况下,与本地IP地址

127.0.0.1:3000

访问你的应用程序,我获得了2〜3秒充电时间