web-dev-qa-db-ja.com

期限切れとCDNS-YSlowの問題

まず、いくつかの掘り下げを行ったが、私が探しているものに対する適切な答えを見つけることができないようであることを最初に述べさせてください。

私はいくつかの外部リソースを使用しているサイトで作業しています:

コンテンツ配信ネットワーク(CDN)を使用する

「コンテンツ配信ネットワーク(CDN)を使用する」で「F」グレードを取得しています。別の SO Post YSlowへのリンクFAQ( direct link )ですが、これは自分のCDNを定義する必要があることを示しているようですブラウザ、これは私にとって簡単な修正のようですが、これは他のブラウザやデバイスの問題を解決しません。

Expiresヘッダーを追加する

「Add Expiresヘッダー」グレードについては、Eを取得します。問題は、これが私が取得しているものです。

There are 3 static components without a far-future expiration date.

(2014/2/26) http://fonts.googleapis.com/css?...
(2014/2/26) http://www.google-analytics.com/analytics.js
(2014/2/26) http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js

これを修正するにはどうすればよいですか?次に示すように、ローカルファイルはすべて.htaccessによって処理されます。

AddType image/x-icon .ico

ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresByType image/ico "access plus 1 year"
ExpiresDefault "access plus 7 days"

<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$">
    # access plus 1 year
    Header set Cache-Control "max-age=31536000"
</FilesMatch>

この SO post は、それが不可能であるか、または帯域幅を使用して必要な外部ファイルをロード(およびキャッシュ)するローカルスクリプトを呼び出すことを示唆しているようです。

これらのことを念頭に置いて、私が見ているのは次のとおりです。

  1. 外部リソースはCDNである必要がありますが、YSlowはユーザーごとに異なるローカル設定を読み取るため、YSlow公式サイトが提案するabout:configソリューションの代替案が必要です。
  2. 有効期限はファイルがあるサーバーによって設定されるため、有効期限の値を定義するためのアクセス権がないようです。だから、私が集めたものから、これらのファイルを私のサーバーに運ぶことができますまたはローカルPHPファイルとキャッシュを使用しますPHPファイルは私のサーバーにありますが、これは最適ではないようです。これを回避する方法はありますか?
14
davewoodhall

簡潔な答え:

そのような外部サーバーからリソースをロードしているときは、あまり制御できませんが、それでもあなたのサイトには問題ないかもしれません。 YSlowのようなツールを使用するときは、すべてのAグレードに追いつかないことが重要です。ツールが提供するヒントを理解し、それに応じて決定を下すことが最善です。

より長い答え:

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

YSlowは、CDNとして認識しないドメインについて、より低い成績を報告します。 CDNホスト名を追加 することで、より良いグレードが反映されます。 fonts.googleapis.comajax.googleapis.comは、どちらもCDNのように動作するため、追加します。 YSlowのコピーに設定を保存すると考えてください。ここにドメインを追加しても、実際にはパフォーマンスは変わりませんが、スコアが向上するだけです。

Expires Headers

別のサイトからロードしているコンテンツの有効期限ヘッダーを制御することはできません。検討できるオプション:

  1. 外部サイトを引き続き使用します。この場合、これらはかなりうまく動作し、あなたのパフォーマンスはおそらくかなり良いでしょう。 YSlowが提供する低学年は無視してください。
  2. フォントとjQueryファイルをローカルでホストし、.htaccessで示したように、遠い将来の有効期限ヘッダーを設定します。これによりYSlowグレードが向上しますが、サーバーがCDNより遅い場合、実際のパフォーマンスは低下する可能性があります。 (これを見てください SO質問
  3. 外部サイトを使用しますが、URLを調整します。 jQueryの場合、より多くのバージョンレベル(1.8ではなく1.8.0)を指定すると、遠い期限切れヘッダーが表示されます(これを参照してください SO質問
39
BrianC