好的,它是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服务。但如果服务实际上及时运行,分析功能可以作为额外的奖励。
好的,我在这里抛出一些想法:
以下是我们必须使用的代码,该代码当前在结束</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>
基本上它的工作原理是因为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%工作。
答案 0 :(得分:11)
考虑到加载的位置,您的网站其余部分会在向Google Analytics提出请求之前加载。加GA是异步加载的,不会停止执行任何代码,所以我真的没有看到问题。
答案 1 :(得分:6)
最新方法:
我们将超时设置为30秒。我们还设置了另一个全局变量(loadedGoogleAnalytics)并将其初始设置为0。当ga加载时,我们将此变量设置为1.在超时到期时,我们检查ga是否已加载。如果没有,我们删除dom元素ga。
<script type="text/javascript">
var loadedGoogleAnalytics = 0;
var gaClone;
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-123456789-1']);
_gaq.push(['_trackPageview']);
_gaq.push(function() {
loadedGoogleAnalytics = 1;
//console.log('GA Actualy executed!');
});
(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);
gaClone = ga;
})();
setTimeout(function() {
//console.log('timeout fired');
if (loadedGoogleAnalytics != 1) {
gaClone.parentNode.removeChild(gaClone);
}
}, 30000);
</script>
[我已经通过我的一个实际GA帐户验证了此方法,并且我能够看到所有实时跟踪]
以前的方法 [注意:如果我们尝试将其放入(文档).ready();中,则Ga不会执行 [此解决方案不起作用]
<script type="text/javascript">
$(document).ready(function() {
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-123456789-1']);
_gaq.push(['_trackPageview']);
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: 30000
});
});
</script>
希望这有帮助
答案 2 :(得分:0)
您可以在自己的服务器上托管www.google-analytics.com/ga.js
的副本,然后从那里加载它。如果你确实走了那条路,我会设置一个cron作业来定期获取ga.js,以确保你有最新的版本。
关于跟踪代码展示位置:在页面中(</head>
之前)放置跟踪代码的主要原因之一是与快速离开页面的访问者(可能在整个页面呈现之前)有关。在这种情况下,您越有可能在跟踪代码执行后越早收集一些数据。
答案 3 :(得分:-1)
如果您想使用Google分析,您需要与服务器进行一些沟通,如何,期间。正如许多其他答案所指出的那样,服务运行异步意味着它不会阻止您的网站运行。 “加载视觉效果”可以显示正在加载的东西......你可以做的很少。
你有两种选择;忍受谷歌分析或使用一些服务器端脚本来运行分析。
如果网站挂起,则是因为其他原因。
同样不包括GA也会降低统计数据的准确性;特别是跳出率不正确。