Сохранение изображений и эскизов на s3 в django

Я пытаюсь сохранить свои изображения в виде миниатюр на s3, используя django-storerages, boto и sorl-thumbnail. У меня он работает, но очень медленно даже с небольшими изображениями. Я не возражаю, когда я сохраняю форму и загружаю изображения в s3 медленно, но я Я бы хотел, чтобы после этого изображение отображалось быстро.

Ответ на этот вопрос SO объясняет, что эскиз не будет создан до первого доступа, но вы можете использовать get_thumbnail (), чтобы создать его заранее.

Django + S3 (boto) + Миниатюра Sorl: предложения по оптимизации

Я делаю это, и теперь кажется, что все записи в таблице thumbnail_kvstore создаются при загрузке изображения, а не при его отображении.

Проблема в том, что страница, на которой отображается изображение, все еще очень медленная. Глядя на панель ведения журнала на панели инструментов отладки, похоже, что с s3 еще много связи. Похоже, что после того, как изображение и миниатюры загружены и кэшированы, страница должна быстро отображаться без взаимодействия с s3.

Что я делаю не так? Спасибо!

Обновление : Слабый хак, похоже, заставил его работать, но я хотел бы знать, как это сделать правильно:

https://github.com/asciitaxi/sorl-thumbnail/commit/545cce3f5e719a91dd9cc21d78bb973b2211bbbf

Обновление : дополнительная информация для @sorl

Я работаю с двумя представлениями:

ДОБАВИТЬ ВИД: В этом представлении я отправляю форму для создания модели с изображением в ней. Изображение загружено в s3. В сигнале post_save я вызываю get_thumbnail (), чтобы сгенерировать эскиз до того, как он понадобится:

im = get_thumbnail(instance.image, '360x360')

DISPLAY VIEW: В этом представлении я показываю эскиз, созданный в представлении добавления:

    {% thumbnail object.image "360x360" as im %}
    
    {% endthumbnail %}

Без патча:

ADD VIEW: создает 3 записи в таблице kvstore, обращается к кешу 10 раз (6 наборов, 4 получения), на вкладке журнала на панели инструментов отладки 12 раз отображается «установление HTTP-соединения»

DISPLAY VIEW: все еще только 3 записи в таблице kvstore, DISPLAY VIEW: same as above, except the logging only says "establishing HTTP connection" 1 time

Also adding the change on line 118:

ADD VIEW: same as above, but now we are down to 2 "establishing HTTP connection" messages DISPLAY VIEW: same as above, with no logging messages at all

UPDATE: It looks like storage._setup() is called twice, and storage.url() is called once. Based on the timing, I'd say each one makes connections to s3:

1304711315.4
_setup
1304711317.84
1304711317.84
_setup
1304711320.3
1304711320.39
_url
1304711323.66

This seems to be reflected by the boto logging, which says "establishing HTTP connection" 3 times.

21
задан Community 23 May 2017 в 12:07
поделиться