Я пытаюсь сохранить свои изображения в виде миниатюр на 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.