Медленный s3 url, создающий скрепку
Мы пытаемся оптимизировать наши представления и на странице, где 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
Единственная проблема, с которой я столкнулся, заключается в том, что ключ кеша не существует, а также расширение не.
Ответы
Ответ 1
Есть ли только одно изображение каждого продукта, показанного на странице галереи?
Как насчет столбца кеша в вашей базе данных. Всякий раз, когда вы создаете или обновляете изображение, вы можете сохранить этот 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