Ste*_*erD 12 performance paperclip string-interpolation ruby-on-rails-3
我们正在尝试优化我们的视图,并在使用以下代码加载40张图片的页面上:
= image_tag(product.pictures.first.data.url(:gallery))
Run Code Online (Sandbox Code Playgroud)
如果我们将其更改为以下代码,则加载时间为840毫秒:
= image_tag("http://bucketname.s3.amazonaws.com/products/#{product.pictures.first.id}/gallery.jpg?1325844462"
Run Code Online (Sandbox Code Playgroud)
我们成为220ms的加载时间.
这意味着s3_path_url的插值非常慢.有人还在期待同样的问题吗?目前我创建了一个生成我的网址的助手:
def picture_url(picture, style)
"http://bucketname.s3.amazonaws.com/products/#{picture.id}/#{style}.jpg"
end
Run Code Online (Sandbox Code Playgroud)
我这里唯一的问题是缓存键不存在而且扩展名不存在.
图库页面上是否总是只显示每种产品的一张图片?
数据库中的缓存列怎么样?每当您创建或更新图像时,您可以将此 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
Run Code Online (Sandbox Code Playgroud)