【问题标题】:Rails: Page loading very long timeRails:页面加载时间很长
【发布时间】:2016-05-05 17:20:44
【问题描述】:

我有一个 Rails 项目。 我在一个控制器中遇到了非常奇怪的事情:浏览器加载页面需要大约 3 分钟,但 Rails 会在日志中写入:

Completed 200 OK in 20563ms (Views: 17144.2ms | ActiveRecord: 324.4ms)

我知道 21 秒很长,但不是 3 分钟。

我知道这些数据还不够,但我不希望完整的答案只有一个问题所在的指针。 此页面大小约为 5 Mb。

【问题讨论】:

  • 您是否使用 CDN 来提供页面上的资产?您是否也在本地或只是在生产中看到这种行为?您的大部分图片是来自其他网站还是存储在您的资产管道中?
  • 在 Chrome 开发者控制台中发布“网络”选项卡的屏幕截图,以便我们准确了解哪个请求需要多长时间。
  • 还要确保您没有进行n+1 样式查询。当您在模板视图中调用关联时,这是一个简单的错误。

标签: ruby-on-rails loading


【解决方案1】:

延迟可能是由config.assets.debug = true 内部的config/environments/development.rb 引起的。将此设置为 false 可能会解决您的问题。

通过这样做,源文件组合在一起,源映射不会 工作(例如,如果使用 Sass/Coffee,你不会在 devtools 中看到它)

【讨论】:

    【解决方案2】:

    如您所见,大部分时间都花在“空闲”阶段。这包括加载页面上所有资源(图像、样式表、javascript 等)的时间。因此,您的 HTML 页面在 10 秒内被加载和呈现,但其余时间用于下载页面中的所有资源。

    这可以是托管在某个服务器上的单个资源,该服务器对您的请求的响应速度非常慢。因此,即使您已经加载了所有内容,但您有一个 Google 托管的 jquery 文件并且互联网连接非常糟糕,那么您会看到“空闲”占用大量时间。

    但是,在您的情况下,它看起来像是您的 5MB 页面上的一些图像。

    【讨论】:

    • 感谢您的回答,但 5Mb 它只是来自 Rails 服务器的数据(非常大的表)。我注意到:在 rails 在日志中写入完整消息之后,在浏览器接收日期之前,ruby 进程占用了 50% 的处理器。我认为可能是中间件方面的问题。
    • 可能您有一个双核处理器,而 Ruby 占用了您 100% 的 CPU 时间。这可能是一些处理您的响应的中间件,但您可以在生成时通过streaming your page 优化您的页面呈现,而不是等到它全部呈现然后才将其发送给客户端。
    【解决方案3】:

    经过长时间的搜索,我发现了一个问题。 对为主要对象加载许多相关对象的数据库进行不必要的查询。但我不明白为什么它需要这么多时间(可能是 GC 清理它的烂摊子)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多