利用浏览器caching外部文件

我使用谷歌pagespeed洞察来testing我的nodejs网站的性能。 对于一些外部文件,它说是利用浏览器caching,但我不知道如何做到这一点?

利用浏览器caching

在静态资源的HTTP头文件中设置失效date或最大使用期限指示浏览器从本地磁盘加载之前下载的资源,而不是通过networking。 利用浏览器caching来获取以下caching资源:

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

http://www.google-analytics.com/analytics.js(2小时)

任何人都可以帮助我。

一种解决scheme是反向代理Google资源。 然后你可以添加caching控制和其他caching标题。 如果您使用的是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> 

这样做的缺点是:

  • 你会通过你的服务器获得大量额外的stream量。
  • 很明显,Google所做的更新将花费更长时间才能显示给您的网站的用户。

如果你不能像rudolfv的回答那样访问httpd.conf文件,这里有几个选项:

  1. 最简单的是你可以每天复制它的内容,以确保你的最新
  2. 我们可以使用cron的力量,这里有使用php的好的示例脚本
  3. 使用一个PHP脚本来生成每个请求上的谷歌分析脚本:

      $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. 使用.htaccess的权力,如果你的主机提供商允许mod_headers&mod_proxy

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

编辑

  1. 还有另一个解决这个问题的方法。