django-storages、boto、および sorl-thumbnail を使用して、画像をサムネイル化し、s3 に保存しようとしています。動作していますが、小さな画像でも非常に遅いです。フォームを保存してs3に画像をアップロードするときは遅くても構わないのですが、その後は早く画像を表示してほしいです。
この SO の質問に対する回答では、サムネイルは最初のアクセスまで作成されませんが、get_thumbnail() を使用して事前に作成できることが説明されています。
Django + S3 (boto) + Sorl Thumbnail: 最適化の提案
私はそれをやっていますが、画像が表示されるときではなく、画像をアップロードするときに、thumbnail_kvstore テーブルへのすべてのエントリが作成されるようです。
問題は、画像を表示するページがまだ非常に遅いことです。デバッグ ツールバーのログ パネルを見ると、s3 との通信がまだたくさんあるようです。画像とサムネイルがアップロードされてキャッシュされた後、s3 と通信せずにページがすばやくレンダリングされるようです。
私は何を間違っていますか?ありがとう!
更新:弱いハックでうまくいったようですが、これを適切に行う方法を知りたいです:
https://github.com/asciitaxi/sorl-thumbnail/commit/545cce3f5e719a91dd9cc21d78bb973b2211bbbf
更新: @sorl の詳細情報
私は2つのビューで作業しています:
ADD VIEW: このビューでは、フォームを送信して、画像を含むモデルを作成します。画像は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行目の変更のみ:
ADD VIEW: 上記と同じですが、ログに「HTTP 接続の確立」のみが 2 回表示されます DISPLAY VIEW: 上記と同じですが、ログに「HTTP 接続の確立」と 1 回のみ表示されます
また、118 行目に変更を追加します。
ADD VIEW: 上記と同じですが、「HTTP 接続を確立しています」というメッセージが 2 つになりました DISPLAY VIEW: 上記と同じで、ログ メッセージはまったくありません
更新: storage._setup() が 2 回呼び出され、storage.url() が 1 回呼び出されたようです。タイミングに基づいて、それぞれが s3 に接続していると思います。
1304711315.4
_setup
1304711317.84
1304711317.84
_setup
1304711320.3
1304711320.39
_url
1304711323.66
これは、「HTTP 接続を確立しています」と 3 回表示される boto ロギングに反映されているようです。