好的,现在是 2013 年 1 月 19 日 22:30 NZST,由于 Google Analytics 的运行速度似乎非常缓慢,因此大多数互联网似乎都陷入了困境。Stackoverflow、Firefox.com、reddit 和谷歌搜索速度很慢。对我来说最重要的是,我的生产业务网站运行缓慢或根本没有加载。不,这不仅仅是我的连接,我也在我的手机上用 3G 测试了它。没有 Google Analytics 的网站似乎运行良好。
这是发生的一些屏幕截图
它位于 Firefox 窗口的左下角。它会像那样坐在那里 20 多秒。如果无法连接,我希望它在 3 秒后消失。
这个旋转的绿色图像位于 Firefox 选项卡中,只是坐在那里,看起来页面仍在加载 20 多秒。如果无法连接,我希望它在 3 秒后消失。
现在可能不是谷歌分析,我国家的国际网关可能运行缓慢或其他什么。但有证据强烈表明它可能是谷歌分析。现在,即使它不是谷歌分析,如果服务完全关闭,我仍然会对一些方法来应对它感兴趣。所以假设我们假设谷歌分析的数据中心发生了一场大火,灭火系统发生了故障。现在谷歌分析完全离线了几天。没有备份服务器。没有备用数据中心。假设场景ok。现在我的网站仍然需要运行,因为我无法让我的网站依赖于谷歌分析服务。但是,如果服务实际上是及时运行的,那么分析功能将是一个额外的好处。
好的,所以我在这里抛出一些想法:
- 是否有一个超时我可以添加到我的脚本中,如果它花费的时间太长,它将取消与 Google Analytics 的连接并停止请求/下载?然后它将在 2 秒后继续加载我的网站。
- 或者更好的是,也许它可以完全加载我的网站,然后在我的网站完全加载完成后使用 Ajax 向 Google Analytics 发送请求?为什么默认情况下不这样做?
这是我们必须使用的代码,当前插入到结束</body>
标记之前。
<script type="text/javascript">
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);
})();
</script>
现在,我可以采用哪些方法来修复这种假设的灾难场景并在 Google Analytics 关闭时让我的网站保持连续性?我对潜在的软件或硬件解决方案感兴趣。假设我可以完全访问运行我的 PHP/MySQL/HTML5 网站的 Linux VPS。
另外,对此的权威答案是什么:有人说将代码放在结束</head>
标记之前。其他人说把它放在结束</body>
标签之前。哪个是最好的方法?
非常感谢
解决方案更新
好的,我在 Jaspal 的帮助下找到了有效的方法。解决方案如下。
<script type="text/javascript">
// 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
});
};
</script>
基本上它起作用的原因是因为有一个 5 秒的 setTimeout。这让我的页面有足够的时间来加载所有内容、JS、CSS、图像等。然后它会启动 $.ajax 请求并下载 ga.js 和 __utm.gif,这实际上是将数据发送到 Google Analytics。在最初的 5 秒之后,基本上我之前提到的所有浏览器视觉效果都消失了,Google Analytics 请求在后台静默发生,浏览器用户没有加载视觉效果。然后我尝试用主机文件阻止谷歌分析,但我仍然没有得到任何浏览器视觉效果——完美。
应该注意的是$.ajaxtimeout: 5000
请求中的属性似乎没有做任何事情。最初我希望它会在 5 秒内无法获取数据时中止请求,但 API 文档中有一条注释说
仅在 Firefox 3.0+ 中,脚本和 JSONP 请求不能被超时取消;即使脚本在超时期限之后到达,它也会运行。
无论如何我都会把它留在那儿以防万一。根据我的测试,如果无法访问 Google Analytics(通过观察 Firebug/Chrome 中的网络/网络面板),它将在 Firefox 中 21-23 秒和 Chrome 中 16 秒后中止请求。这可能是一些 TCP 超时。无论如何,我并不担心,因为它会静默超时,并且用户不会注意到,因为浏览器中没有加载视觉效果。
我在下面接受了 Jaspal 的回答并授予他赏金,因为他的解决方案对于解决这个问题至关重要。然而,他的解决方案仍然在浏览器中显示加载视觉效果。所以我相信这里使用 setTimeout 发布的解决方案(对他的原始解决方案稍作修改)是可行的方法,并且经过测试可以 100% 为我工作。