12

我们正在尝试优化我们的视图,并在加载了 40 张图片的页面上使用以下代码:

= image_tag(product.pictures.first.data.url(:gallery))

如果我们将其更改为以下代码,我们的加载时间为 840 毫秒:

= image_tag("http://bucketname.s3.amazonaws.com/products/#{product.pictures.first.id}/gallery.jpg?1325844462"

我们的加载时间变成了 220ms。

这意味着 s3_path_url 的插值非常慢。其他人期待同样的问题吗?目前我创建了一个生成我的网址的助手:

def picture_url(picture, style)
  "http://bucketname.s3.amazonaws.com/products/#{picture.id}/#{style}.jpg"
end

我这里唯一的问题是缓存键不存在,扩展名也不存在。

4

1 回答 1

0

画廊页面上是否总是只显示每个产品的一张图片?

数据库中的缓存列怎么样。每当您创建或更新图像时,您都可以将此 image_url 保存为数据库中的 gallery_picture_url 并直接调用它

= image_tag(product.gallery_picture_url)

class Product < ActiveRecord::Base
  after_commit: :update_gallery_picture_url

  def update_gallery_picture_url
    self.update(gallery_picture_url: self.pictures.first.data.url(:gallery)) if self.gallery_picture_present?
  end

  def gallery_picture_present?
    (self.pictures.first.data.url(:gallery) rescue false).present?
  end
end
于 2015-04-27T10:24:32.983 回答