除了render 'mypage'
之外,控制器中除之外没有发生了什么,除了HTML之外,在视图中发生 nothing (我已经注释掉了所有的Ruby代码)地方),加载页面仍需要5秒钟:
Completed 200 OK in 6258ms (Views: 5283.2ms | ActiveRecord: 14.6ms)
有关如何改进或简介的任何建议?我遇到的每一个“解决方案”对我都没有影响。 Rails-dev-tweaks没有产生影响,更改资产调试标志没有效果;我实际上相信这一切都是在资产被请求之前发生的。
更新 07年5月7日
大家好 - 感谢回复。让我先说我将缩小到资产范围;删除大约六打宝石和所有资产使第一次加载的页面加载时间降至1.3s,重新加载约150ms。太棒了。所以我的问题现在变成了如何正确配置像rails-dev-tweak这样的gem来实现它;我似乎无法找到合适的配置。我们可能有一百左右的资产 - 可能还要多一点。
回答你的问题: 遗憾的是我无法复制和粘贴视图;但是,足以说它是大约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 07年5月7日
New 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月07日@ 1509
进一步调查显示,除了删除所有资产外,删除所有宝石会将响应时间缩短到可接受的~150ms。将宝石放回去将其移动到800毫秒到1500毫米;很明显,那些单独出现问题的事情正在发生。
如果有人认为他们可以找出导致问题的宝石,我很乐意发布Gemfile
答案 0 :(得分:3)
尝试使用本地IP地址访问您的应用程序
127.0.0.1:3000
在我的情况下,我的充电时间增加了2~3秒答案 1 :(得分:0)
因此,加载时间通常是资产加载或SQL请求发生的结果。
首先,让我们从资产开始:
rails应用程序经常出现的一个错误是开发人员正在加载方式更多的资产,而不是真正需要的资产。您可以执行的一些故障排除是在 application.js 和 application.css 中,删除//= require_tree .
。这会加载您在assets / stylesheets和assets / javascripts下的所有资产。
其次,减少SQL查询
您可能在控制器(!),模型或有时视图中运行了许多SQL查询。这些会大大减慢页面的加载时间,因为它们会不断反弹到您的数据库以完成查询。
另一个提示:
您可以将use Rack::Deflater
添加到/config.ru以在页面加载时执行压缩等gzip。这有助于我加快我的网页速度。
最后提示:
尽量减少您在应用中使用的宝石数量。其中许多可能会节省一些时间,但每个都需要更多的HTTP请求来加载他们的资产。对于大多数人来说,您可以使用自己的代码复制他们的功能。
好的......还有一个
尽量减少生产资产。这减少了浏览器扫描代码的时间,因为它通过删除空格来减少行数!
希望这些帮助!
答案 2 :(得分:0)
这个问题可能已经很长时间了,但这很可能是/ etc / hosts问题。网址栏中的127.0.0.1通常有效,但我注意到这种情况并非如此。
在弄乱您的设置之前,请断开网络连接并查看是否有帮助。如果是,您很可能需要编辑/ etc / hosts。确保它有以下行。
127.0.0.1 localhost