Webサイトのいくつかのコンテンツには、それ自体に変更を行わない種類のものがあり、直接WebサーバやContent Delivery Network(CDN)から配信することがあります。例えば、JavaScriptや画像、CSSのようなファイルです。
静的コンテンツにはランディンページに利用する画像や、ユーザが作成するコンテンツなど、開発プロセス中に生成されるものもあります。Djangoではこれらをassets、mediaと呼びます。
Content Delivery Network(CDN)は静的コンテンツを保管し、配信するためのサービスです。Amazon CloudFront、AkamaiやRackspace Cloud Filesなどがあります。CDNの目的は動的なWebコンテンツが扱う静的コンテンツへのリクエストの読み込みを無くすことです。例えば、512MBのVPSで静的コンテンツの配信と、Gunicorn WSGIサーバのフロントとしてNGINXを利用した場合、アクセスが多くなると圧迫した状態で動作することになります。CDNを利用することで静的コンテンツの配信をGunicornへのリクエストのパフォーマンスが下がること無く、静的コンテンツの配信を行うことができるようになります。
CDNはリクエスト元に近いデータセンターからレスポンスが送られるようになっています。
Crushing, caching and CDN deployment in Djangoでは、Django Compressorの使い方、静的コンテンツとメディアファイルの配信のスケールにCDNを利用する方法を解説しています。
ローカルのWebサーバの代わりに、静的コンテンツを配信するために利用するCDNを決めましょう。Amazon S3とCloundFrontを使うと、セットアップやスケールアップを簡単にできます。
Webアプリケーションの開発プロセスで、静的コンテンツを更新したらCDNにアップロードされるようにしてみましょう。
静的コンテンツをwwwサブドメインで提供する代わりに、static(または類似した名前)サブドメインで配信し、wwwサブドメインへのHTTPリクエストと分散するように静的コンテンツが読み込まれるようにしましょう。