[解決済み】Amazon CloudFrontからS3経由でgzip圧縮されたCSSとJavaScriptを提供する。
質問
サイトの読み込みを速くする方法を探していますが、その1つにCloudfrontの活用があります。
CloudfrontはもともとカスタムオリジンCDNとして設計されておらず、gzipをサポートしていなかったため、私はこれまですべての画像のホストに使用してきました。画像はサイトコード内のCloudfront cnameで参照され、far-futuresヘッダーで最適化されています。
一方、CSSとjavascriptのファイルは自分のサーバでホストしています。これまで、Cloudfrontからgzipで提供できないという印象があり、gzipによる利益(約75%)がCDNの使用による利益(約50%)を上回ると考えていたからです。Amazon S3(そしてCloudfront)は、ブラウザがgzip圧縮のサポートを示すために送信するHTTP Accept-Encodingヘッダを使用することにより、標準的な方法でgzip圧縮コンテンツの提供をサポートしていなかったため、その場でGzipしてコンポーネントを提供することができなかったのです。
このように、今までは2つの選択肢のどちらかを選ばなければならないという印象を持っていました。
-
すべてのアセットをAmazon CloudFrontに移動し、GZippingのことは忘れてください。
-
コンポーネントをセルフホスティングしておき、入ってくるリクエストを検知してその場でGZippingを行うようにサーバーを構成します。
そこで でした。 この問題を解決するための回避策ですが、基本的には以下の通りです。 うまくいかなかった . [ リンク ].
さて、Amazon Cloudfrontはカスタムオリジンをサポートしているようで、その カスタムオリジンを使用している場合、gzip形式のコンテンツを提供するために標準のHTTP Accept-Encodingメソッドを使用することが可能になりました。 [ リンク ].
私のサーバーでは、今のところ新機能を実装できていません。 上にリンクしたブログ記事は、私が見つけたこの変更に関する唯一のものですが、カスタムオリジンを選択した場合のみ、gzipを有効にできる(回避策もあるが、私はそれを使いたくない)ことを示唆しているようです。私は、自分のCloudfrontサーバでcorespondingファイルをホストし、そこからリンクする方が簡単だと思います。ドキュメントを注意深く読んだけど、よくわからない。
-
この新機能は、ファイルを独自ドメインのサーバーでホストすることを意味するのかどうか。 を経由して もしそうなら、どのようなコード設定でこれを実現できるのか。
-
css と javascript のヘッダーを設定して、Cloudfront から gzip で提供されるようにする方法。
解決するには?
UPDATEしてください。 Amazonがgzip圧縮に対応したため、不要になりました。 アマゾンからのお知らせ
オリジナルの回答です。
答えは、CSSとJavaScriptのファイルをgzipで圧縮することです。はい、その通りです。
gzip -9 production.min.css
これは
production.min.css.gz
. を削除します。
.gz
を設定し、S3(または使用している任意のオリジンサーバー)にアップロードし、明示的に
Content-Encoding
ヘッダを
gzip
.
これはオンザフライのgzipではありませんが、非常に簡単にビルド/デプロイメントスクリプトに包むことができます。その利点は
- ファイルが要求されたときにApacheがコンテンツをgzipするためにCPUを必要としない。
-
ファイルは最高圧縮レベルでgzip圧縮されます(仮定)
gzip -9
). - CDNからファイルを配信している。
CSS/JavaScriptファイルが(a)最小化されており、(b)ユーザーのマシンで解凍するのに必要なCPUを正当化できるほど大きいと仮定すると、ここでかなりのパフォーマンスを得ることができます。
CloudFrontにキャッシュされているファイルを変更する場合は、この種の変更を行った後、必ずキャッシュを無効にしておくことを忘れないでください。
関連
-
JSクロスドメインソリューション リアクト構成 リバースプロキシ
-
[解決済み】リソースの読み込みに失敗した:Bind関数でサーバーが500(Internal Server Error)のステータスで応答した【非公開
-
[解決済み】awaitは非同期関数でのみ有効です。
-
[解決済み】 Uncaught TypeError : undefined のプロパティ 'replace' を読み取れない In Grid
-
[解決済み】「.addEventListener is not a function」なぜこのエラーが発生するのか?
-
jq は html ページとデータを動的に分割する。
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] CSSでcellpaddingとcellspacingを設定する?
-
[解決済み] CSSは常にJavascriptより優先されるべきか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
Vueにシンプルなメモ帳機能を実装
-
Javascript Bootstrapのグリッドシステム、ナビゲーションバー、ローテーションの説明
-
[解決済み] テスト
-
[解決済み】JavaScriptの配列でforEachが関数でない不具合
-
[解決済み】gulp anythingを実行するたびに、アサーションエラーが発生します。- タスク関数を指定する必要があります
-
[解決済み】「.addEventListener is not a function」なぜこのエラーが発生するのか?
-
nodejs unhandledPromiseRejectionWarning メッセージ
-
フロントエンド非同期(アシンク)ソリューション(全ソリューション)
-
Uncaught TypeError: null のプロパティ 'offsetHeight' を読み取れませんでした。