web-dev-qa-db-ja.com

キャッシュまたはCDNを使用する方が良いですか?

静的ファイルをロードするときのブラウザのパフォーマンスについて調べていたところ、この疑問が生じました。

一部の人々は、CDN静的ファイル(つまり、Google Code、jQuery latest、AJAX CDN、...)を使用すると、Webページ全体ではなく別のドメインから要求するため、パフォーマンスが向上すると言います。

パフォーマンスを向上させる他の方法は、Expiresヘッダーを数か月後に設定して、ブラウザーに静的ファイルをキャッシュさせ、リクエストを削減することです。

パフォーマンスについて、そして両方を組み合わせることができるかどうかを考えて、どちらの方法が最良かを考えています。

皆さん、ありがとうございます。StackOverflowが大好きです。

20
Gustavo Gondim

最終的には、フロントエンド最適化(FEO)とも呼ばれるサイトのWebパフォーマンス最適化(WPO)を行う場合は、両方の手法を採用することをお勧めします。彼らは手を取り合って驚くほど働くことができます。もし私が持っていた場合私は間違いなくcaching いつでも。実際、CDNを使用する場合でも、すべてのWebプロジェクトに対して適切なリソースキャッシュを設定することが不可欠だと思います。

キャッシング

Expiresヘッダーの設定とリソースのキャッシュは必須であり、リソースの時間の100%で実行する必要があります。キャッシングを行わない理由はありません。 Apacheでは、これはmod_expires.cおよびmod_headers.cHTML5ボイラープレートプロジェクト。htaccessファイル に適切な実装例があり、サーバーがnginx、lighttpdまたはIIS checkこれらのうち 他のサーバー構成

キャッシングについて学ぶことに興味がある方は、こちらをお読みください。 Mark Nottinghamのキャッシングチュートリアル

コンテンツ配信ネットワーク

Google Code, jQuery latest, AJAX CDNそして、私はあなたが支払うものとあなた自身のリソースをホストするものを含めて、一般的にCDNに触れたいだけですが、jqueryがホストするファイルのcdnを使用するか、または http:// cdnjs .com / など。

CDNはサーバー側ヘッダーキャッシングの設定よりも重要ではないと思いますが、CDNcanは大幅なパフォーマンス向上を提供しますが、コンテンツ配信ネットワークのパフォーマンスは異なります- プロバイダーによって異なります

これは、トラフィックが世界中のオーディエンスであり、CDNプロバイダーに世界中に多くのエッジ/ピアロケーションがある場合に特に当てはまります。また、リソースを配信するために一部の作業をCDNにオフロードしているため、Webホスティングの帯域幅とCPU使用量(ビット)が大幅に削減されます。

CDNのレイテンシがサーバーよりも遅くなると、CDNがまれにパフォーマンスに悪影響を与える場合があります。また、過剰な 並列化 リソースを過剰に使用すると(cdn1、cdn2、cdn3などのマルチサブドメインを使用して)、ユーザーエクスペリエンスが遅くなり、余分なDNSルックアップでオーバーヘッドが発生する可能性があります。ここではバランスが必要です。

発生する可能性のあるもう1つの悪影響は、CDNがダウンしている場合です。それは起こりました、そして再び起こります。これは、無料のCDNでより当てはまります。何らかの理由でCDNがダウンした場合、サイトもダウンします。それはさらに別の可能性です単一障害点(SPOF)。 JavaScriptリソースの場合、巧妙に取得してCDNからリソースをロードできます。失敗した場合は、どのような場合でも、ローカルコピーを検出してロードできます。次に、フォールバックを使用してajax.googleapis.comからjQueryをロードする例を示します(HTML5ボイラープレートから取得)。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.8.2.min.js"><\/script>')</script>

CDNを使用している場合、そこにある明らかな無料のAPIリソース(jquery、google apiなど)に加えて、使用料を支払わなければならない場合があるため、ホスティングコストに追加されます。もちろん、一部のCDNについては、特定の場所にアクセスするために追加料金を支払う必要さえあります。たとえば、アジアのノードは北米よりも追加料金になる場合があります。

61

CDNには、複数のサーバーを提供し、トラフィックをクライアントに最も近い場所に自動的にルーティングするという利点があります。これにより、場所ごとに最適化された、より迅速な配信が可能になります。

また、静的コンテンツは特別なアプリケーションサーバー(動的コンテンツなど)を必要としないため、CDNにコンテンツをオフロードできるため、トラフィックを完全に削減できます。ストリーミングビデオクリップは大きすぎてキャッシュできないか、キャッシュしてはいけません。ただし、その帯域幅をサポートする必要はありません。 CDNがそのトラフィックを引き継ぎます。

常にキャッシュについてではありません。小規模なアプリケーションWebサーバーは、動的コンテンツを提供したいだけの場合がありますが、ほとんど変更されない大ヒットメディアに対するソリューションが必要です。 CDNはスケーリングの問題を処理します。

4
jdi

公開アプリケーションの場合は、CDNにアクセスしてください。キャッシングは繰り返しのリクエストには役立ちますが、最初のリクエストには役立ちません。 CDNを使用して最初のページの訪問での高速読み込みを確実にするために、ファイルがすでに別のサイトによってすでにキャッシュされている可能性はかなり高いです。他の人がすでに述べたように、もちろんCDNの結果も大量にキャッシュされます。

ただし、イントラネットWebサイトを使用している場合は、通常CDNからよりも内部ソースからロードするほうが速いため、自分でファイルをホストすることをお勧めします。また、リクエストの数を減らすために、いくつかのファイルを1つに結合するオプションもあります。

4
Albin Sunnanbo

@Anthony_Hatzopoulos(+1)に同意する

CDNはキャッシュを補完しますが、場合によってはキャッシュディレクティブの最適化にも役立ちます。

たとえば、私がCDNに統合された行動学習アルゴリズムを使用して、動的に生成されたオブジェクトを識別およびキャッシュする会社です。

通常、これらのオブジェクトはキャッシュ不可能です(つまり、[Cache-Control:max-age = 0] Httpヘッダー)。ただし、この場合、システムはキャッシュの可能性を識別し、元のHTTPヘッダーの方向を上書きできます。 (たとえば、動的に生成される一方で、キャッシュされる必要がある動的に生成された人気のある製品または人気のある検索結果ページは、何千ものユーザーに同じ形式で時間をかけて何度も表示されます)。

そして、はい、あなたが尋ねる前に、システムは個人化されたデータと非常に新鮮さを識別して、誤検知を防ぎます... :)

このようなアルゴリズムの実装は、リバースプロキシCDNテクノロジーが原因でのみ可能でした。これは、CDNとキャッシングが互いに補完して、より優れたスマートなアクセラレーションソリューションを作成する方法の例です。

1
Igal Zeifman

これらの専門家の引用の上に、説明はCDN技術とキャッシュを理解するのに最適です。私は個人的な経験を提供するだけです。私はjoomla virtuemartサイトで作業していましたが、残念ながら新しいjoomlaとvirtuemartのバージョンを更新できません。製品ページのフィールド。したがって、900/DAYとロットまでの訪問者がアイテムをバスケットに入れることができなくなると、ロットjsとajaxを呼び出すたびに注文アイテムを呼び出すのに時間がかかりすぎるため、

サイトを最適化した後、CDNを使用することにしました。gtmetrixからのレコードに従って、パフォーマンスは本当に良くなっています。最初のYSlowスコアは50%でしたが、最適化+ CDNの後は74%になりました

https://gtmetrix.com/reports/www.florihana.com/jWlY35im

cDNのダッシュボードから、マーケティングを改善するためにどのデータセンターが最も費用がかかり、データが最も高額かを確認できます。

enter image description here

しかし、CDNを構成するには、パージ時間に注意し、リソースCDNの原因の数を均衡させる必要があります。

これが役に立てば幸い

0
tess hsu