我正在尝试使用 django-storages、boto 和 sorl-thumbnail 将我的图像缩略图并存储在 s3 上。我有它的工作,但它很慢,即使是小图像。我不介意保存表单并将图像上传到 s3 时速度很慢,但我希望它在此之后快速显示图像。
这个 SO question 的答案解释说,在第一次访问之前不会创建缩略图,但您可以使用 get_thumbnail() 预先创建它。
Django + S3 (boto) + Sorl Thumbnail: 优化建议
我正在这样做,现在似乎 thumbnail_kvstore 表中的所有条目都是在上传图像时创建的,而不是在显示时创建的。
问题是显示图像的页面仍然很慢。查看调试工具栏中的日志记录面板,看起来与 s3 的通信仍然很多。似乎在上传和缓存图像和缩略图后,页面应该快速呈现而不与 s3 通信。
我究竟做错了什么?谢谢!
更新:weak hack 似乎已经让它工作了,但我很想知道如何正确地做到这一点:
https://github.com/asciitaxi/sorl-thumbnail/commit/545cce3f5e719a91dd9cc21d78bb973b2211bbbf
更新:@sorl 的更多信息
我正在使用 2 个视图:
添加视图:在此视图中,我提交表单以创建包含图像的模型。图片上传到s3。在 post_save 信号中,我调用 get_thumbnail() 在需要之前生成缩略图:
im = get_thumbnail(instance.image, '360x360')
显示视图:在此视图中,我显示在添加视图中生成的缩略图:
{% thumbnail object.image "360x360" as im %}
<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
{% endthumbnail %}
没有补丁:
添加视图:在 kvstore 表中创建 3 个条目,访问缓存 10 次(6 组,4 次获取),调试工具栏的日志记录选项卡显示“建立 HTTP 连接”12 次
显示视图:kvstore 表中仍然只有 3 个条目,只有 1 个从缓存中获取,但调试工具栏仍然显示“建立 HTTP 连接”3 次
只有第 122 行的更改:
添加视图:同上,除了日志只说“建立 HTTP 连接”2 次 显示视图:同上,除了日志只说“建立 HTTP 连接”1 次
还在第 118 行添加更改:
添加视图:与上面相同,但现在我们减少到 2 条“建立 HTTP 连接”消息 显示视图:与上面相同,根本没有日志消息
更新:看起来 storage._setup() 被调用了两次, storage.url() 被调用了一次。根据时间,我会说每个人都与 s3 建立连接:
1304711315.4
_setup
1304711317.84
1304711317.84
_setup
1304711320.3
1304711320.39
_url
1304711323.66
这似乎反映在 boto 日志记录中,它说“建立 HTTP 连接”3 次。