Estoy intentando hacer que mis imágenes se vean y almacenen en s3 usando django-storage, boto y sorl-thumbnail. Lo tengo funcionando, pero es muy lento, incluso con imágenes pequeñas. No me importa que sea lento cuando guardo el formulario y cargo las imágenes en s3, pero me gustaría que muestre la imagen rápidamente después de eso.Almacenamiento de imágenes y miniaturas en s3 en django
La respuesta a esta pregunta SO explica que la miniatura no se creará hasta el primer acceso, pero que puede usar get_thumbnail() para crearla de antemano.
Django + S3 (boto) + Sorl Thumbnail: Suggestions for optimisation
estoy haciendo eso, y ahora parece que se crean todas las entradas en la tabla thumbnail_kvstore al cargar la imagen, en lugar de cuando se muestra.
El problema es que la página que muestra la imagen sigue siendo muy lenta. Al mirar el panel de registro en la barra de herramientas de depuración, parece que todavía hay mucha comunicación con s3. Parece que después de que la imagen y las miniaturas se cargan y almacenan en caché, la página debe procesarse rápidamente sin comunicarse con s3.
¿Qué estoy haciendo mal? ¡Gracias!
actualización: débil truco parece haber conseguido que funcione, pero me gustaría saber cómo hacer esto correctamente:
https://github.com/asciitaxi/sorl-thumbnail/commit/545cce3f5e719a91dd9cc21d78bb973b2211bbbf
actualización: para más información @sorl
estoy trabajando con 2 puntos de vista:
Añadir vista: en este punto de vista me envíe el formulario para crear el modelo con la imagen en ella. La imagen se carga en s3.En una señal de post_save, llamo get_thumbnail() para generar la miniatura antes de que sea necesario:
im = get_thumbnail(instance.image, '360x360')
visualización de la vista: En este punto de vista puedo mostrar la miniatura generada en la vista de complemento:
{% thumbnail object.image "360x360" as im %}
<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
{% endthumbnail %}
Sin la patch:
Añadir vista: 3 crea entradas en la tabla kvstore, accede a la caché de 10 veces (6 juegos, 4 Gets), pestaña de la barra de herramientas de depuración de registro dice que "el establecimiento de conexión HTTP" 12 veces
visualización de la vista: aún sólo 3 entradas en la tabla kvstore, a 1 obtenemos de caché, pero la barra de herramientas de depuración dice "el establecimiento de conexión HTTP" 3 veces aún
con sólo el cambio en la línea 122:
Añadir vista : igual que el anterior, excepto el registro sólo dice "el establecimiento de conexión HTTP" 2 veces visualización de la vista: igual que el anterior, excepto el registro sólo dice "el establecimiento de conexión HTTP" 1 vez
también añadiendo el cambio en la línea 118:
AGREGAR VER: igual que arriba, pero ahora estamos hasta 2 "de establecer una conexión HTTP" mensajes visualización de la vista: igual que el anterior, sin mensajes de registro en absoluto
ACTUALIZACIÓN: Parece que storage._setup() se llama dos veces, y storage.url() es llamado una vez. Basado en el tiempo, yo diría que cada uno hace que las conexiones a s3:
1304711315.4
_setup
1304711317.84
1304711317.84
_setup
1304711320.3
1304711320.39
_url
1304711323.66
Esto parece reflejarse por la tala de boto, que dice: "el establecimiento de conexión HTTP" 3 veces.
Tengo el mismo problema, por favor mantenganme actualizado –
¿Alguna actualización sobre esto? Además, ¿qué estás usando como tu S3_UPLOAD_URL en ese parche? – shadfc
Sé que es bastante viejo, pero estoy experimentando la misma lentitud, solo curiosidad si hay una actualización para esto? –