利用浏览器缓存外部文件



我使用google pagspeed Insights来测试我的nodejs网站的性能。对于一些外部文件,它说利用浏览器缓存但我不知道如何做到这一点?

利用浏览器缓存

在静态资源的HTTP头文件中设置过期日期或最长时间,指示浏览器从本地磁盘加载以前下载的资源,而不是通过网络。为以下可缓存资源利用浏览器缓存:

http://maps.googleapis.com/...kwPPoBErK_--SlHZI28k6jjYLyU&sensor=false(30分钟)

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

谁来帮帮我啊

一个解决方案是对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>

这样做的缺点是:

  • 您将通过服务器汇集大量额外的流量。
  • 显然,谷歌的更新将需要更长的时间来显示你的网站的用户。

如果您无法访问httpd.conf文件作为rudolfv的答案,这里有几个选项:

  1. 最简单的是你可以每天复制它的内容,以确保你的最新
  2. 我们可以利用cron的力量,有一个很好的示例脚本使用php张贴在这里
  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

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

最新更新