Rails 4渲染部分资产极其缓慢

时间:2013-09-13 03:22:35

标签: heroku ruby-on-rails-4

我最近将我们的应用程序升级到Rails 4.由于使用图像资源升级视图的渲染时间非常缓慢。

一个包含10个资源的页面可能需要8秒钟,而某些页面哦heroku将因为渲染时间过长而暂停。

我知道在Rails 3.2.13中有一个问题,默认情况下config.assets.debug设置为true,但我认为这已在Rails 4中修复。

什么可能导致如此长的渲染时间?

以下是生产环境文件以供参考。如有任何其他详细信息,请告知我们。

Adventistmedia::Application.configure do
  config.cache_classes = true
  config.eager_load = true
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true
  config.cache_store = :dalli_store, {compress: true}
  config.serve_static_assets = true # fixes heroku issue
  config.static_cache_control = "public, max-age=30758400"
  config.assets.js_compressor = :uglifier
  config.assets.compile = false
  config.assets.digest = true
  config.assets.cache_store = :dalli_store
  config.assets.debug = false
  config.after_initialize do
    Delayed::Job.scaler = :heroku_cedar
  end
  config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif fontawesome-webfont.ttf fontawesome-webfont.eot FontAwesome.otf fontawesome-webfont.woff)
  config.i18n.fallbacks = true
  config.active_support.deprecation = :notify
  config.log_formatter = ::Logger::Formatter.new
  config.action_controller.asset_host = "//#{ENV['FOG_DIRECTORY']}.s3.amazonaws.com"
end 

1 个答案:

答案 0 :(得分:4)

问题出在carrierwave和调用缩略图URL的方法上。我已经为问题https://github.com/carrierwaveuploader/carrierwave/issues/1218

创建了一张票

看起来问题来自用于调用图像缩略图网址的方法。

这些是在我们的登台服务器上加载部分8个缩略图网址的时差: image_tag(asset.media.url(:thumb).to_s)=平均9.4秒 image_tag(asset.media.thumb.url.to_s)=平均40ms

慢了23倍!

如果我只是简单地调用asset.media.url.to_s,时间会恢复正常,但添加缩略图大小选项似乎会导致很大的性能问题。