2012-06-07 16 views
12

Estamos tratando de optimizar nuestros puntos de vista y en una página donde 40 imágenes se cargan con el siguiente código:s3 lenta clip de generación url

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

Tenemos un tiempo de carga de 840ms, si cambiamos a la código siguiente:

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

Llegamos a un tiempo de carga de 220ms.

Significa que la interpolación de s3_path_url es muy lenta. ¿Alguien más está esperando los mismos problemas? Por el momento he creado un ayudante que genera mis URL:

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

El único problema que tengo aquí es que la clave de caché no está allí y también la extensión no.

+0

que fueron capaces de encontrar una solución para esto? Estamos obteniendo el mismo problema. Usamos URL expiradas, por lo que no podemos codificarlo como lo hiciste. – neebz

+0

@nEEbz por el momento no encontramos ninguna solución. Usamos generar ahora nuestras URL con ayudantes personalizados y se ejecuta de forma más fluida. – SteenhouwerD

+0

Mismo problema aquí. Estoy usando ayudantes para generar mis URL ahora también. – Matt

Respuesta

0

¿Siempre hay una sola imagen de cada producto que se muestra en la página de la galería?

¿Qué pasa con una columna de caché en su base de datos. Siempre que se crea o actualiza una imagen que podría guardar esta image_url como gallery_picture_url en su base de datos y llamar directamente como

= 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 
Cuestiones relacionadas