Я пытаюсь получить свои изображения и сохранить их на s3, используя django-хранилища, boto и sorl-thumbnail.У меня это работает, но очень медленно, даже с небольшими изображениями.Я не возражаю, если я сохраняю форму и загружаю изображения на s3 медленно, но мне бы хотелось, чтобы после этого изображение отображалось быстро.
Ответ на этот вопрос SO объясняет, что миниатюране будет создан до первого доступа, но вы можете использовать get_thumbnail (), чтобы создать его заранее.
Django + S3 (boto) + Sorl Thumbnail: Предложения по оптимизации
Я делаю это, и теперь кажется, что все записи в таблицу 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: в этом представлении я отображаю миниатюру, сгенерированную в представлении add:
{% thumbnail object.image "360x360" as im %}
<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
{% endthumbnail %}
Без патча:
ADD VIEW: создает 3 записи в таблице kvstore, обращается к кэшу 10 раз (6 наборов, 4 получает), на вкладке журналирования панели инструментов отладки 12 раз указано «установление соединения HTTP»
DISPLAY VIEW: по-прежнему всего 3 записи в таблице kvstore, только 1 получают из кэша, но на панели инструментов отладки еще 3 раза сказано «установление HTTP-соединения»
Только с изменением в строке 122:
ДОБАВИТЬ ПРОСМОТР: то же, что и выше, за исключением того, что в журнале только 2 раза указано «установление HTTP-соединения». ПОКАЗЫВАЕТСЯ: то же самое, что и выше, за исключением того, что в журнале только «устанавливается HTTP-соединение» 1 раз
Такжедобавив изменение в строку 118:
ADD VIEW: то же самое, что и выше, но теперь мы дошли до 2 сообщений «Установка HTTP-соединения» DISPLAY VIEW: то же, что и выше, снет сообщений регистрации вообще
ОБНОВЛЕНИЕ : похоже, что storage._setup () вызывается дважды, а storage.url () вызывается один раз.Исходя из времени, я бы сказал, что каждый из них устанавливает соединение с s3:
1304711315.4
_setup
1304711317.84
1304711317.84
_setup
1304711320.3
1304711320.39
_url
1304711323.66
Это, похоже, отражается в логе boto, который говорит "установление HTTP-соединения" 3 раза.