利用浏览器缓存外部文件

时间:2014-08-25 06:34:11

标签: node.js google-maps-api-3 express browser-cache pagespeed

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

利用浏览器缓存

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

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

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

任何人都可以帮助我。

2 个答案:

答案 0 :(得分:5)

一种解决方案是反向代理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所做的更新需要更长的时间才能显示给您网站的用户。

答案 1 :(得分:3)

如果您无法以rudolfv's answer访问httpd.conf文件,则可以使用以下几种方法:

  1. 最简单的一个是你可以每天复制其内容以确保你的最新
  2. 我们可以使用cron的强大功能,有一个很好的示例脚本使用php发布here
  3. 使用php脚本动态生成每个请求的Google Analytics(分析)脚本:

        $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&amp; mod_proxy的

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