当前位置: 首页 > 面试题库 >

利用第三方JS的浏览器缓存

韩寒
2023-03-14
问题内容

我在httpd.conf上设置了Expiry

ExpiresActive On
ExpiresDefault "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType application/x-javascript "access plus 1 month"

这有助于浏览器缓存图像,字体文件,站点自己的css和js文件。但我的网站中也包含外部JS:

http://connect.facebook.net/en_US/sdk.js (20 minutes)
http://apis.google.com/js/client.js (30 minutes)
https://apis.google.com/js/rpc:shindig_random.js?onload=init (30 minutes)
https://platform.twitter.com/widgets.js (30 minutes)
https://www.google-analytics.com/analytics.js (2 hours)

Google Pagespeed Insights对上面的文件说:
在静态资源的HTTP标头中设置到期日期或最长期限,可以指示浏览器从本地磁盘而不是通过网络加载以前下载的资源。

如何利用浏览器缓存此外部JS文件?有帮助吗?


问题答案:

确实是个烦人的问题。恐怕没有一个那么 容易 修复的。但是您可以使用cron

首先,请记住,Google不太可能因自己的工具(如Google
Analytics(分析))而对您进行惩罚。但是,如前所述,可以使用进行修复cron,这基本上意味着您可以在本地加载JavaScript并提取更新的脚本。

这个怎么做:

首先,您需要下载正在运行的脚本。我将以Google Analytics(分析)为例(这似乎是人们抱怨最多的问题脚本,但是您可以将其复制到任何外部脚本中)。

在您的代码中查找并找到脚本的名称,在本例中为:google- analytics.com/ga.js。将此URL弹出到Web浏览器中,它将显示源代码。只需将其复制并另存为ga.js

在我的情况下,将此新创建的JavaScript文件保存到您的网络服务器上:

- JS
  - ga.js

接下来,您将需要更新正在调用脚本的页面上的代码,只需更改正在调用JavaScript文件的目录即可。在本例中,我们将再次更改此行:

ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';

ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.yoursite.com/js/ga.js';

至此,您的站点现在将从 本地 站点运行脚本!但是,这意味着脚本将永远不会更新。除非您每周重新运行此简短过程。那取决于你..但我对此实在太懒了。

这是CRON发挥作用的地方:

几乎每一个托管服务都会有一个选项供您设置cron作业。在Hostinger上,它位于您的主机面板上,在GoDaddy上,您可以在“内容”选项下找到它。

将以下脚本放入您的脚本cron,您所需要做的就是更改变量的绝对路径$localfile。该脚本的作用是从Google提取文件的更新脚本ga.js。您可以设置运行该过程的频率范围。从每小时一次到每月一次甚至更长时间不等。

如果您还针对Google
Analytics(分析)以外的外部文件执行此操作,则还需要更改变量$remoteFile。所以,$remoteFile是的URL外部JavaScript文件和变量$localFile,你就会把路到新的本地存储的文件,就这么简单!

<?
// script to update local version of Google analytics script

// Remote file to download
$remoteFile = 'http://www.google-analytics.com/ga.js';
$localfile = 'ENTER YOUR ABSOLUTE PATH TO THE FILE HERE';
//For Cpanel it will be /home/USERNAME/public_html/ga.js

// Connection time out
$connTimeout = 10;
$url = parse_url($remoteFile);
$host = $url['host'];
$path = isset($url['path']) ? $url['path'] : '/';

if (isset($url['query'])) {
  $path .= '?' . $url['query'];
}

$port = isset($url['port']) ? $url['port'] : '80';
$fp = @fsockopen($host, '80', $errno, $errstr, $connTimeout );
if(!$fp){
  // On connection failure return the cached file (if it exist)
  if(file_exists($localfile)){
    readfile($localfile);
  }
} else {
  // Send the header information
  $header = "GET $path HTTP/1.0\r\n";
  $header .= "Host: $host\r\n";
  $header .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6\r\n";
  $header .= "Accept: */*\r\n";
  $header .= "Accept-Language: en-us,en;q=0.5\r\n";
  $header .= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
  $header .= "Keep-Alive: 300\r\n";
  $header .= "Connection: keep-alive\r\n";
  $header .= "Referer: http://$host\r\n\r\n";
  fputs($fp, $header);
  $response = '';

  // Get the response from the remote server
  while($line = fread($fp, 4096)){
    $response .= $line;
  }

  // Close the connection
  fclose( $fp );

  // Remove the headers
  $pos = strpos($response, "\r\n\r\n");
  $response = substr($response, $pos + 4);

  // Return the processed response
  echo $response;

  // Save the response to the local file
  if(!file_exists($localfile)){
    // Try to create the file, if doesn't exist
    fopen($localfile, 'w');
  }

  if(is_writable($localfile)) {
    if($fp = fopen($localfile, 'w')){
      fwrite($fp, $response);
      fclose($fp);
    }
  }
}
?>

就是这样,它应该可以解决您利用Leverage Browser Caching第三方脚本遇到的所有问题。

资料来源:http : //diywpblog.com/leverage-browser-cache-optimize-google-
analytics/

注意:

实际上,这些文件不会对您的实际页面速度产生很大影响。但是我能理解您对Google惩罚您的担心。但是,如果你有一个,只会出现
运行这些外部脚本量。正如我之前所说,与Google相关的任何事情都不会对您不利。



 类似资料:
  • 我为google speed insight工作,它要求利用浏览器缓存 我已经添加了代码。htaccess如下所示 js文件没有生效,我的js文件内容类型是应用程序/javascript,因为我通过检查检查了这些。 我的代码有什么问题?我也试过了 但它并没有得到任何改进,而且文件中也并没有添加过期日期。 有人能帮忙吗?

  • 本文向大家介绍js清除浏览器缓存的几种方法,包括了js清除浏览器缓存的几种方法的使用技巧和注意事项,需要的朋友参考一下 关于浏览器缓存 浏览器缓存,有时候我们需要他,因为他可以提高网站性能和浏览器速度,提高网站性能。但是有时候我们又不得不清除缓存,因为缓存可能误事,出现一些错误的数据。像股票类网站实时更新等,这样的网站是不要缓存的,像有的网站很少更新,有缓存还是比较好的。今天主要介绍清除缓存的几种

  • 推荐: http://www.cnblogs.com/skynet/archive/2012/11/28/2792503.html 304 Not Modified

  • 问题内容: 在这里做什么?我有大量文件,Google Speed Page说它们“利用浏览器缓存”。.但是我不知道怎么办?我是否会弄乱或更改Apache配置文件(如下),或者在.htaccess页面中放置一些内容? 问题答案: 几天前我在做同样的事情。将此添加到我的.htaccess文件中: 现在,当我运行google speed page时,利用浏览器缓存不再是重中之重。 希望这可以帮助。

  • 我有一个使用assetic的Symfony2应用程序。一切都很好,只是在localhost中,浏览器不会缓存我的资产。 任何想法,为什么以下资产没有得到缓存响应304和毫秒,而是与200响应,需要大约15秒... 响应头 Accep-Ranges bytes Cache-Control max-age=604800 Connection Keve-Alive Content-Encode gzip

  • 本文向大家介绍Nginx与浏览器缓存的处理方法,包括了Nginx与浏览器缓存的处理方法的使用技巧和注意事项,需要的朋友参考一下 一、浏览器对缓存的处理:Internet选项   ★ 控制请求服务器策略:是忽略资源的缓存策略的情况下额外强制请求服务器的意思。     ★ 检查存储的页面较新版本          1.每次访问网页时                 不管是否有缓存、资源状态是否过期,都