如果Google Analytics(分析)发生故障,我该如何保持网站正常运行?

好吧它是2013年1月19日22:30 NZST和大多数互联网似乎已经爬行,因为Google Analytics似乎运行速度非常慢。 Stackoverflow,Firefox.com,reddit和谷歌搜索都很慢。 对我来说最重要的是,我的生产商网站运行缓慢或根本没有加载。 不,这不仅仅是我的连接,我也在3G手机上测试了它。 没有Google Analytics的网站似乎运行正常。

这是一些发生的截图

这位于Firefox窗口的左下角。 它会像那样在那里停留20多秒。 如果它无法连接,我希望它在3秒后消失。

在此处输入图像描述

这个旋转的绿色图像位于Firefox选项卡中,只是坐在那里使它看起来像页面仍然加载20秒以上。 如果它无法连接,我希望它在3秒后消失。

在此处输入图像描述

现在它可能不是谷歌分析,我的国家’国际网关可能运行缓慢或其他东西。 但有证据表明它可能是谷歌分析。 现在,即使它不是谷歌分析,那么如果服务完全失效,我仍然会对某些方法感兴趣。 所以假设我们假设Google Analytics数据中心发生大火并且灭火系统失败了。 现在,Google Analytics几天完全脱机。 没有备份服务器。 没有备用数据中心。 假设情景确定。 现在我的网站仍然需要运行,因为我无法让我的网站依赖Google Analytics服务。 但是,如果服务实际上及时运行,那么分析function可以作为额外的奖励。

好的,我在这里抛出一些想法:

  1. 我可以添加到我的脚本中的超时是否会取消与Google Analytics的连接并停止请求/下载如果花费的时间过长? 然后它会在2秒后继续加载我的网站。
  2. 或者更好的是,也许它可以完全加载我的网站,然后在我的网站完全加载后使用Ajax向Google Analytics发送请求? 为什么默认情况下不这样做?

这是我们必须使用的代码,它当前在结束标记之前插入。

  var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-123456789-1']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();  

现在,我可以采用哪些方法来解决这个假设的灾难情景,并在Google Analytics停机时让我的网站保持连续性? 我对潜在的软件或硬件解决方案感兴趣。 假设我可以完全访问运行我的PHP / MySQL / HTML5网站的Linux VPS。

此外,对此的权威答案是什么:有些人说将代码放在结束标记之前。 其他人说把它放在结束标签之前。 哪种方式最好?

非常感谢

解决方案更新

好的,我发现了什么在Jaspal的帮助下有效。 解决方案如下。

  // Load Google Analytics after my site has completely loaded // Then when Google Analytics request is made it won't show any visuals in the browser setTimeout(loadGoogleAnalytics, 5000); // Setup _gaq array as global so that the code in the ga.js file can access it var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-123456789-1']); _gaq.push(['_trackPageview']); /** * Loads Google Analytics */ function loadGoogleAnalytics() { var srcUrl = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; $.ajax( { url: srcUrl, cache: true, dataType: "script", success: function(data) { console.log('got the script'); }, error: function() { console.log('failed to get the script'); }, timeout: 5000 }); };  

基本上它的工作原理是因为setTimeout持续5秒。 这使我的页面有足够的时间加载所有内容,JS,CSS,图像等。之后,它启动$ .ajax请求并下载实际将数据发送到Google Analytics的ga.js和__utm.gif。 在最初的5秒之后,基本上我之前提到的所有浏览器视觉效果都消失了,Google Analytics请求在后台静默发生,没有浏览器用户的加载视觉效果。 然后我尝试使用主机文件阻止Google Analytics,但我仍然没有获得任何浏览器视觉效果 – 完美。

应该注意, $ .ajax请求中的timeout: 5000属性似乎没有做任何事情。 最初我希望它会中止请求,如果它无法获取数据5秒,但API文档中有一条说明

仅在Firefox 3.0+中,超时无法取消脚本和JSONP请求; 即使在超时期限后到达,脚本也会运行。

为了以防万一,我会留在那里。 根据我的测试,如果无法访问Google Analytics(通过观察Firebug / Chrome中的网络/网络面板),那么它将在Firefox中以21-23秒后退出请求,在Chrome中退出16秒。 这可能是一些TCP超时。 我并不担心这一点,因为它是静默的超时,用户不会注意到,因为浏览器中没有加载视觉效果。

我已经接受了Jaspal在下面的答案并给了他赏金,因为他的解决方案对解决这个问题至关重要。 但是他的解决方案仍然在浏览器中显示加载的视觉效果。 所以我相信使用setTimeout在这里发布的解决方案(对他原来的一个稍作修改)是要走的路,并且经过测试对我100%工作。

最新方法:

  1. 我们允许ga正常加载。
  2. 我们在全局变量(gaClone)中存储对ga dom元素的引用。
  3. 我们将超时设置为30秒。 我们还设置了另一个全局变量(loadedGoogleAnalytics)并最初将其设置为0。 当ga加载时,我们将此变量设置为1.在超时到期时,我们检查ga是否已加载。 如果没有,我们删除dom元素ga。

      

[我已经通过我的一个实际GA帐户validation了这种方法,并且我能够看到所有实时跟踪]

以前的方法[注意:如果我们尝试将其放入(文档).ready();中,则Ga不会执行。[此解决方案不起作用]

  

希望这可以帮助

根据其加载位置,您的网站的其余部分将在向Google Analytics请求之前加载。 加GA是异步加载的,不会停止执行任何代码,所以我真的没有看到存在问题。

您可以在自己的服务器上托管www.google-analytics.com/ga.js的副本,然后从那里加载。 如果你确实走了那条路,我会设置一个cron作业来定期获取ga.js,以确保你有最新的版本。

关于跟踪代码放置:在页面中(在之前)放置跟踪代码的主要原因之一与快速离开页面的访问者(可能在整个页面呈现之前)有关。 在这种情况下,您越有可能在跟踪代码执行越早时收集一些数据。

试图修复一些没有破坏的东西

如果您想使用Google分析,则需要与服务器进行一些沟通,如何,期间。 正如许多其他答案所指出的那样,服务是异步运行的,这意味着它不会阻止您的网站运行。 “加载视觉效果”是为了显示正在加载的东西…你可以做的很少。

你有两个选择; 忍受谷歌分析或使用一些服务器端脚本来运行分析。

如果网站挂起,则是因为其他原因。

编辑

同样不包括GA也会降低统计数据的准确性; 特别是跳出率不正确。