Подтвердить что ты не робот

Медленный 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

Единственная проблема, с которой я столкнулся, заключается в том, что ключ кеша не существует, а также расширение не.

4b9b3361

Ответ 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