我们正在尝试优化我们的视图,在一个加载了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"
我们的加载时间达到了220毫秒。
这意味着s3_path_url的插值非常慢。还有其他人遇到同样的问题吗?目前我创建了一个帮助程序来生成我的url:
def picture_url(picture, style)
"http://bucketname.s3.amazonaws.com/products/#{picture.id}/#{style}.jpg"
end
我在这里唯一的问题是缓存键和扩展名都不见了。
product.pictures.first
,这将发生40次,因此可能会有n+1个查询,而在第二种情况下,您直接传递图片并可能更有效地加载它。当然,这只是我的猜测,还取决于您代码的其他部分。 - Rahul