pythonで書かれたGoogleアプリエンジンでjinja2を使ってウェブサイトを運営しています。データベースのほとんどのコンテンツで memcached が機能するようになりましたが、ブロブストアから提供される画像の効率を向上させる方法がわかりません。GAE では他のフレームワークとあまり変わらないと思いますが、念のため言及しておきます。
とにかく、イメージをキャッシュしたり、読み書きクォータを使い果たしてしまうのを防ぐための推奨される方法はありますか?
pythonで書かれたGoogleアプリエンジンでjinja2を使ってウェブサイトを運営しています。データベースのほとんどのコンテンツで memcached が機能するようになりましたが、ブロブストアから提供される画像の効率を向上させる方法がわかりません。GAE では他のフレームワークとあまり変わらないと思いますが、念のため言及しておきます。
とにかく、イメージをキャッシュしたり、読み書きクォータを使い果たしてしまうのを防ぐための推奨される方法はありますか?
ブロブストアは問題ありません。
URL ハンドラーで HTTP キャッシュ ヘッダーを設定していることを確認してください。これにより、ファイルはブラウザーによってキャッシュされる (この場合は料金は発生しません) か、App Engine のエッジ キャッシュ (帯域幅に対して料金が発生しますが、ブロブストアへのアクセスには料金が発生しません) のいずれかになります。
ただし、エッジ キャッシングには十分注意してください。過度に長い有効期限を設定すると、更新されたバージョンがユーザーに表示されなくなります。多くの場合、これに対する解決策は、バージョンを変更するときに URL を変更することです。
画像の保存にはGoogle Cloud Storageを使用することをお勧めします。静的ファイルの提供に適していて、推奨されます。良いことは、同じ Images API を使用できるようになったことです。
注: Google Cloud Storageに保存されている画像を提供することもできます。これを行うには、Blobstore API のcreate_gs_key()関数を使用して Blob キーを生成する必要があります。また、イメージ サービスが独自の ACL をオブジェクトに追加できるように、使用するバケットにアプリのアクセス許可を付与するデフォルトのオブジェクトACLを設定する必要があります。
FULL_CONTROL
ACL と権限については、Google Cloud Storage のドキュメントをご覧ください。
PS。ここで私が気に入っているもう 1 つの優れた機能は、さまざまなサイズで画像を提供する必要がある場合に、画像のさまざまな解像度を保存する必要がないことです。によって返されるURLにパラメーターを追加するだけでget_serving_url
、それが実行されます。また、一度呼び出すget_serving_url
だけで、この URL をどこかに保存して、画像を提供する必要があるときにいつでも使用できます。さらに、同じ画像をすべての異なるサイズで提供するために同じ URL を再利用できます。
URL の変更:
=sXX 画像のサイズを変更するには、画像 URL の末尾に =sXX を追加します。XX は、新しい画像サイズをピクセル単位で表す 0 ~ 1600 の整数です。最大サイズは IMG_SERVING_SIZES_LIMIT で定義されています。API は指定された値に画像のサイズを変更し、指定されたサイズを画像の最長の寸法に適用し、元の縦横比を維持します。たとえば、=s32 を使用して 1200x1600 の画像のサイズを変更すると、結果の画像は 24x32 になります。その画像が 1600x1200 の場合、サイズ変更された画像は 32x24 ピクセルになります。
=sXX-c 画像をトリミングしてサイズを変更するには、画像 URL の末尾に =sXX-c を追加します。XX は、新しい画像サイズをピクセル単位で表す 0 ~ 1600 の整数です。最大サイズは IMG_SERVING_SIZES_LIMIT で定義されています。API は指定された値に画像のサイズを変更し、指定されたサイズを画像の最長の寸法に適用し、元の縦横比を維持します。画像が縦向きの場合、API は上下から均等にスライスして正方形を作成します。画像が横向きの場合、API は左右から均等にスライスして正方形を作成します。トリミング後、API は画像を指定されたサイズにサイズ変更します。
Google画像API https://developers.google.com/appengine/docs/python/images/functionsを使用できます
私が通常行うのはアップロード時です。images.get_serving_url(blob_key) によって作成された URL を保存します。安いかどうかはわかりませんが、私の開発サーバーでは get_serving_url を呼び出すたびにデータストアへの書き込みが作成されます。