- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我已经在我的 httpd.conf 中设置了过期时间
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 header 中设置过期日期或最长期限会指示浏览器从本地磁盘而不是通过网络加载之前下载的资源。
如何利用浏览器缓存这些外部 JS 文件?有什么帮助吗?
最佳答案
确实是个恼人的问题。恐怕不是容易可修复的。但是您可以做的是使用 cron
。
首先,请记住,Google 不太可能因为他们自己的工具(如 Analytics)而惩罚您。但是,如前所述,它可以使用 cron
修复,这基本上意味着您在本地加载 JavaScript 并提取更新的脚本。
如何做到这一点:
首先,您需要下载正在运行的脚本。我将使用 Google Analytics 作为示例(这似乎是人们提示的最有问题的脚本,但您可以将其复制到任何外部脚本)。
查看您的代码并找到脚本的名称,在我们的例子中是:google-analytics.com/ga.js
。将此 URL 弹出到您的网络浏览器中,它将显示源代码。只需复制一份并将其另存为 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
是外部 JavaScript 文件的 URL 和变量 $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);
}
}
}
?>
就是这样,应该可以解决您在使用“利用浏览器缓存”第三方脚本时遇到的任何问题。
来源:http://diywpblog.com/leverage-browser-cache-optimize-google-analytics/
注意:
事实上,这些文件不会对您的实际页面速度产生很大影响。但我能理解你对谷歌惩罚你的担忧。但这只有在您运行了大量 的这些外部脚本时才会发生。正如我之前所说,与 Google 相关的任何事情都不会对您不利。
关于php - 为 3rd 方 JS 使用浏览器缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38376871/
我花了几个小时在 R-exts 手册和文档上parse_Rd() (以及引用文献中的 PDF 文档),但我 还没搞清楚是什么results=rd手段或如何使用它。我以为我可以 使用 R 代码片段动态创
这是对 this 的后续问题.我正在使用 为 __AVR_HAVE_LPMX__ 处理器 (avr25) 编写代码 GNU C (WinAVR 20100110) 版本 4.3.3 (avr)/由 G
我正在记录一个内部的、非导出的函数。 roxygen2 正在创建一个 Rd 文件,即使文档中没有 @export 标记。 roxygen2 为以下文档创建了一个 Rd 文件。我错过了什么? #
我正在记录一个内部的、非导出的函数。 roxygen2 正在创建一个 Rd 文件,即使文档中没有 @export 标记。 roxygen2 为以下文档创建了一个 Rd 文件。我错过了什么? #
如何正确指定 rd 文件的编码?我正在尝试将以下记录虚拟函数的帮助文件添加到我的包中: \name{dummy} \encoding{ISO-8859-2} \alias{dummy} \title{
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 3年前关闭。 Improve thi
结合试图为自己寻找解决方案 this question ,我发现自己陷入了尝试编写有效 Rd 标记的过程中。我想要的是添加一个名为 Raw Function Code 的部分并将函数的代码放在它下面。
我正在为一个函数填写一个 Rd 文件。 当我在 Details 部分使用\eqn{2^{x}} ,然后构建和安装包时,没有上标指数。 查看 R-exts.pdf,它以 Poisson.Rd 为例说明如
我在一家从事能源业务的研发公司工作。我们开发了一些成功的产品,但现在似乎所有的时间都花在解决与这些产品相关的问题上。我们似乎没有时间开发新产品。有没有人知道如何既能处理现有产品出现的问题,又能有时间和
我正在尝试将 R 文档文件(扩展名 .Rd)转换为纯文本。我知道 RdUtils 包含一个名为 Rdconv 的工具,但据我所知它只能从命令行使用。有没有办法从 R session 中访问 Rdcon
正如标题所说,我在生成 时遇到问题R 使用 打包文档roxygen2 . 我 99.9% 肯定已经按照说明准备了一切here and here已经。我知道几乎不可能得到像这样的主要远程诊断非病例的答案
我正在使用 Rstudio 简化 Sweave 和 R 进行数据分析,我将与其他分析师分享。为了使变量的编码更加清晰,最好有一个帮助文件这样他们可以调用?myData。并获得有用的文件,如果他们需要的
简短版本:我可以使用 roxygen 模拟 stats 包中 Normal 的文档吗? 长版本:我正在开发一个包,并试图通过在一个标题下收集许多具有公共(public)输入/参数的函数来使文档更具可读
我无法使用 RStudio 和 Roxygen2 为我的包生成 .Rd 文档文件。首先,我要提一下,我已经遇到了此处发布的类似问题,并且已经完成了以下操作: Roxygen2 阻止在文件开头以 #'
我正在通过 JS 调用 ipinfodb。最近我收到了大约 5-6 条回复(来自大约 600 条),将国家/地区代码指定为“RD”。 “RD”不是 ccTLD,我找不到任何理由将其退回。有没有人遇到过
我正在使用 roxygen 来记录 R 包。我在包的“man/macros”子目录中有一个宏文件 myMacro.Rd。该文件指定 \myMacro宏。 (该宏将 标记插入 HTML 帮助文件以更改
我有一个 Windows 批处理文件,它删除了 Windows 主目录中的一些目录。 REM clear Ivy cache on windows RD /s %Use
以下 MWE 无法编译(通过 devtools::document()): #' MWE #' #' @examples #' format('{}') # Works #' format('{')
.R 和 .rd 文件(文档)的名称是否需要与它所指的函数具有完全相同的名称? 例如,我能否在同一个 R 包中拥有一个名为“b”的函数和另一个名为“B”的函数,并将文档写入不同的 .R 和 .rd 文
实际问题 如何避免 Rd 文件名冲突 S4 泛型及其方法不一定全部定义在同一个包中(包含(某些)自定义方法的包取决于包含泛型的包)和 使用 roxygenize()从包装 roxygen2生成实际的
我是一名优秀的程序员,十分优秀!