web-dev-qa-db-ja.com

外部ファイルをキャッシュするブラウザを活用する

Google pagespeed Insightsを使用して、nodejsWebサイトのパフォーマンスをテストしました。一部の外部ファイルでは、ブラウザのキャッシュを活用すると言っていますが、これを行う方法がわかりませんか?

ブラウザのキャッシュを利用する

静的リソースのHTTPヘッダーに有効期限または最大経過時間を設定すると、以前にダウンロードしたリソースをネットワーク経由ではなくローカルディスクからロードするようにブラウザーに指示します。次のキャッシュ可能なリソースにブラウザのキャッシュを活用します。

http://maps.googleapis.com/ …kwPPoBErK _-- SlHZI28k6jjYLyU&sensor = false(30分)

http://www.google-analytics.com/analytics.js (2時間)

誰でもこれについて私を助けてください。

12
Manoj

1つの解決策は、Googleリソースをリバースプロキシすることです。次に、Cache-Controlおよびその他のキャッシュヘッダーを追加できます。 Apacheを使用している場合は、httpd.confファイルで次のように実行できます。

ProxyRemote http://www.google-analytics.com http://yourinternalproxy:yourport

<Location /analytics.js>
  ProxyPass http://www.google-analytics.com/analytics.js
  ProxyPassReverse http://www.google-analytics.com/analytics.js
  Header set Cache-Control "max-age=86400"
</Location>

これの欠点は次のとおりです。

  • サーバーを介して多くの追加トラフィックを集中させることになります。
  • 明らかに、Googleによって行われた更新は、サイトのユーザーに表示されるまでに時間がかかります。
5
rudolfv

Httpd.confファイルにアクセスできない場合 rudolfvの回答 ここにはいくつかのオプションがあります。

  1. 最も簡単な方法は、コンテンツを毎日コピーして、最新の状態に保つことです。
  2. cronの力を利用できます。phpを使用した素敵なサンプルスクリプトが投稿されています here
  3. phpスクリプトを使用して、オンザフライですべてのリクエストにGoogleアナリティクススクリプトを生成します。

        $context = stream_context_create(['http' => ['Content-Type' => 'text/javascript', 'enable_cache' => true, 'enable_optimistic_cache' => true, 'read_cache_expiry_seconds' => 86400,]]);      
        echo file_get_contents("http://www.google-analytics.com/analytics.js", false, $context);
    
  4. ホスティングプロバイダーがmod_headersとmod_proxyを許可している場合は、.htaccessの機能を使用してください

        RewriteEngine On        
        Header set Cache-Control "max-age=86400"        
        RewriteRule ^js/analytics.js http://www.google-analytics.com/analytics.js [P]
    
3
Chetabahana