Javascript 连续的GA命中被丢弃

Javascript 连续的GA命中被丢弃,javascript,google-analytics,Javascript,Google Analytics,我想跟踪离线事件使用谷歌分析和本地存储。 这是我的代码: var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-27966345-1']); _gaq.push(['_setDomainName', 'none']); _gaq.push(['_setSessionCookieTimeout',10]); _gaq.push(['_setSampleRate', '400']); _gaq.pus

我想跟踪离线事件使用谷歌分析和本地存储。 这是我的代码:

    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-27966345-1']);
    _gaq.push(['_setDomainName', 'none']);
    _gaq.push(['_setSessionCookieTimeout',10]);
    _gaq.push(['_setSampleRate', '400']);
    _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);
     })();
我只是将事件保存在本地存储中,当用户重新联机时,我尝试以for的形式将事件发送到Google,但当我将计数器与在实时模式(Google Analytical)中看到的页面视图进行比较时,我无法理解它们为何不同。我想是关于谷歌的采样率之类的,因为我测试了很多次,我看到了不同的结果,有时结果是正确的,但有时有1000或更多的差异

以下是我发送事件的代码:

      while(ctr>0){
        if(sd==0){
            sd=1;
            alert(ctr);
        }
        //
        if(flag==0)break;
        var name='tosend';
        var tosend_action=localStorage.getItem(name+'action'+ctr);
        var tosend_label=localStorage.getItem(name+'label'+ctr);
        var tosend_value=localStorage.getItem(name+'value'+ctr);
        _gaq.push(['_trackEvent',value,tosend_action,tosend_label+"_val:"+tosend_value,tosend_value]);
        _gaq.push(['_trackPageview',name+'value'+ctr]);
        localStorage.removeItem(name+'action'+ctr);
        localStorage.removeItem(name+'label'+ctr);
        localStorage.removeItem(name+'value'+ctr);
        ctr=Number(ctr)-1;
        localStorage.removeItem('counter');
        localStorage.setItem('counter',ctr);
        ctr=localStorage.getItem('counter');
       }

}

p、 s:flag是我的变量,用于查看用户是否在线。

谷歌将对您可以发送的连续事件进行评级限制。这里是规则

  • 一次突发最多可以发送10个点击(事件或页面视图)
  • 在那之后,所有的点击都会被无声地删除
  • 每5秒你会获得1次额外命中。最多10个
这就像一个算法,其中最大令牌数为10,刷新率为每5秒1个新令牌

现在
\u setSampleRate
\u setSessionCookietimeout
在这里对您没有帮助,您应该从跟踪代码中删除这些参数。你能做的最好的事情就是限制你的请求,在你的终端实现相同的算法。下面是一个关于如何做到这一点的示例:

var令牌=10;
函数更新_令牌(){
如果(令牌<10)令牌++;
}
//即使新的令牌应该每5秒生成一次,我也会给它10秒,以确保我们有可用的令牌。
setInterval(更新_令牌,10*1000);
变量命中到发送=[
[u trackPageview','/page1'],
[u trackPageview','/page2'],
[“跟踪事件”、“类别”、“动作”、“标签”],
//...
];
//用于检查令牌和发送请求的递归函数。
函数send_next(){
if(hits_to_send.length==0)返回;
如果(令牌>0){
代币--;
_gaq.push(点击发送到发送的shift());
}
否则{
设置超时(下一步发送,5*1000);
返回;
}
发送_next();
返回;
}
//当你上网时,只需打电话:
发送_next();

这将为您提供更好的数字,即使某些指标看起来不太好。例如,timeOnSite和timeOnPage。如果用户脱机超过30分钟,即使他正在与系统交互,也可能会创建新的访问

还要注意的是,如果你有太多的事件在那里,它可能需要一段时间来更新它们。我建议你把活动量控制在合理的范围内。试着只跟踪那些对你将来的分析很重要的事情


\u setSampleRate应该是一个百分比。将其设置为高于
'100'
的值是没有意义的。顺便说一句,
'100'
是默认设置,因此您根本不需要设置它。当用户联机时,您最多向GA发送多少次点击。您知道连续点击次数限制为10次,对吗?为什么要将会话cookie超时设置为10毫秒?它很可能会在每个页面浏览时跨越一次新的访问。这可能不是你想要的。@EduardoCereto:它是100,但我改成了更高的数字,我想可能会更好。@EduardoCereto:我将它设置为10毫秒,因为谷歌对每次访问的事件数量有限制。我需要在一个会话中发送大量的事件,所以我应该减少会话时间,因为我每次都有10次点击用户或我的所有用户每秒点击10次?