我正在追求达到100/100的PageSpeed,我几乎在那里。我试图找到一个很好的解决方案来缓存谷歌分析。

这是我得到的信息:

利用浏览器缓存 在静态资源的HTTP报头中设置过期日期或最大年龄指示浏览器从本地磁盘加载以前下载的资源,而不是通过网络。 利用浏览器缓存以下可缓存资源: http://www.google-analytics.com/analytics.js(2小时)

我找到的唯一解决方案是2012年的,我不认为这是一个好的解决方案。本质上,您复制GA代码并自己托管它。然后运行cron作业,每天重新检查谷歌一次,以获取最新的GA代码并替换它。

http://diywpblog.com/leverage-browser-cache-optimize-google-analytics/

我还能做什么来达到100/100,同时也使用谷歌分析?

谢谢你!


当前回答

谷歌警告不要使用分析脚本的本地副本。 然而,如果你正在这样做,你可能会想要使用本地副本的插件和调试脚本。

关于主动缓存的第二个问题是,您将从缓存的页面获得点击——这些页面可能已经从站点中更改或删除了。

其他回答

如果谷歌欺骗了你,你也可以欺骗谷歌:

这是pageSpeed的用户代理:

“Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.8 (KHTML, like Gecko; Google Page Speed Insights) Chrome/19.0.1084.36 Safari/536.8”

你可以插入一个条件来避免为PageSpeed提供分析脚本:

<?php if (!isset($_SERVER['HTTP_USER_AGENT']) || stripos($_SERVER['HTTP_USER_AGENT'], 'Speed Insights') === false): ?>
// your analytics code here
<?php endif; ?>

显然,这不会带来任何真正的改善,但如果你唯一关心的是获得100/100的分数,这就可以了。

PHP

在你的HTML或PHP代码中添加这个:

<?php if (!isset($_SERVER['HTTP_USER_AGENT']) || stripos($_SERVER['HTTP_USER_AGENT'], 'Speed Insights') === false): ?>
  <script>
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

    ga('create', 'UA-PUT YOUR GOOGLE ANALYTICS ID HERE', 'auto');
    ga('send', 'pageview');
  </script>
<?php endif; ?>

JavaScript

这在JavaScript中工作得很好:

  <script>
  if(navigator.userAgent.indexOf("Speed Insights") == -1) {
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

    ga('create', 'UA-<PUT YOUR GOOGLE ANALYTICS ID HERE>', 'auto');
    ga('send', 'pageview');
  }
  </script>

NiloVelez已经说过:很明显,它不会带来任何真正的改善,但如果你唯一关心的是获得100/100的分数,它就可以做到。

您可以设置一个将www.google-analytics.com作为其源服务器的cloudfront发行版,并在cloudfront发行版设置中设置一个较长的过期报头。然后在谷歌片段中修改该域。这可以防止在您自己的服务器上加载,也可以避免在cron作业中不断更新文件。

这就是设置&忘记。所以你可能想要添加一个账单警报到cloudfront,以防有人“复制”你的代码片段并窃取你的带宽;-)

编辑:我试过了,它不是那么容易,Cloudfront通过缓存控制头没有简单的方法来删除它

我不会担心的。不要把它放在你自己的服务器上,听起来这是谷歌的一个问题,但它得到的很好。将文件放在您自己的服务器上将产生许多新问题。

他们可能需要每次都调用该文件,而不是从客户端的缓存中获取,因为这样就不会计算访问次数。

如果你觉得有问题,可以在谷歌insights上运行谷歌insights URL,笑一笑,放松一下,继续你的工作。

根据你对谷歌Analytics数据的使用,如果你想要基本信息(比如访问量、UI交互),你可能根本不需要包含Analytics .js,但仍然可以在GA中收集数据。

一种选择可能是在缓存的脚本中使用度量协议。 谷歌分析:测量协议概述

当您显式地将传输方法设置为image时,您可以看到GA如何构造自己的图像信标。

ga('set', 'transport', 'image');

https://www.google-analytics.com/r/collect
  ?v={protocol-version}
  &tid={tracking-id}
  &cid={client-id}
  &t={hit-type}
  &dl={location}

您可以使用所需的有效负载创建自己的GET或POST请求。

但是,如果你需要更详细的内容,那就不值得你这么做了。