6

除了之外,控制器中没有发生任何事情,视图中除了 HTML 之外也没有发生任何事情(我已经注释掉了两个地方的所有 Ruby 代码),加载页面仍然需要 5 秒以上:render 'mypage'

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

关于如何改进或配置它的任何建议?我遇到的每一个“解决方案”对我都没有影响。Rails-dev-tweaks 没有影响,更改资产调试标志没有效果;我实际上相信这一切都发生请求资产之前。

1450 年 5 月 7 日更新

大家好 - 感谢您的回复。让我首先说我已将其范围缩小到资产;删除了大约六颗宝石和所有资产,首次加载的页面加载时间降至 1.3 秒,重新加载时间约为 150 毫秒。极好的。所以我现在的问题变成了如何正确配置像 rails-dev-tweaks 这样的 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 1450 年 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)

5 月 7 日更新 3日 @ 1509

进一步调查显示,除了移除所有资产外,移除所有 gem 还将响应时间缩短到可接受的 ~150 毫秒。放回宝石将其移动到 800 毫秒到 1500 毫秒;显然,仅在那些人身上发生了一些事情,导致了问题。

如果有人认为他们可以找出导致问题的宝石,我很乐意发布 Gemfile

4

3 回答 3

3

尝试使用本地 IP 地址访问您的应用程序

127.0.0.1:3000

就我而言,我的充电时间增加了 2 ~ 3 秒

于 2013-11-19T12:48:02.940 回答
0

因此,加载时间通常是资产加载或 SQL 请求发生的结果。

首先,让我们从资产开始

Rails 应用程序经常发生的一个错误是开发人员加载的资产比实际需要的要多得多。您可以在application.jsapplication.css中进行一些故障排除,删除//= require_tree .. 这会加载您在 assets/stylesheets 和 assets/javascripts 下的所有资产。

二、减少你的 SQL 查询

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

另一个提示:

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

最后提示:

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

好吧……再来一张

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

希望这些帮助!

于 2013-05-07T18:51:35.513 回答
0

这个问题可能早就被放弃了,但这很可能是 /etc/hosts 问题。url 栏中的 127.0.0.1 通常有效,但我注意到并非总是如此。

在弄乱您的设置之前,请断开您的网络,看看是否有帮助。如果是这样,您很可能需要编辑 /etc/hosts。确保它具有以下行。

127.0.0.1        localhost
于 2018-03-26T02:44:21.943 回答