2012-02-18 55 views
3

我想使用Google Analytic和本地存儲來跟蹤離線事件。 這是我的代碼:連續的GA點擊被丟棄

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); 
    })(); 

我只需保存在本地存儲,當事件用戶重新上線我嘗試將事件發送到谷歌在一份爲,但是當我比較我的計數器,我看到的網頁瀏覽量在實時模式(谷歌分析)我不明白他們爲什麼不同。我認爲是關於谷歌的採樣率或什麼的,因爲我多次測試,我看到不同的結果,有時結果是正確的,但有時有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:標誌是我的變量,看看用戶是否在線。

+0

_setSampleRate應該是一個百分比。將它設置爲比「100」更高的值是沒有意義的。順便說一句'100'是默認設置,所以你根本不需要設置 – Eduardo 2012-02-18 09:16:07

+0

當用戶上線時,你最多發送給GA的點擊次數。你知道有10個連續命中的限制是正確的嗎? – Eduardo 2012-02-18 09:16:47

+1

爲什麼您將會話cookie超時設置爲10ms?它很可能會在每個網頁瀏覽中進行一次新的訪問。這可能不是你想要的。 – Eduardo 2012-02-18 09:23:58

回答

7

Google會限制您對可以發送的連續事件的限制。這是規則。

  • 您可以在一次突發中發送最多10次點擊(事件或綜合瀏覽量)。
  • 之後,所有的點擊都被無聲地拋下了。
  • 每5秒你會得到1次額外的擊中。最多可達到10個。

這就像Token Bucket算法,其中最大令牌數爲10,刷新率爲每5秒1個新令牌。

現在_setSampleRate_setSessionCookietimeout在這裏不會幫你,你應該從你的跟蹤代碼中刪除這些參數。你可以做的最好的事情是扼殺你的請求,在你的最後實現相同的算法。這裏是你如何能做到這一點的例子:

var tokens = 10; 

function update_tokens() { 
    if (tokens < 10) tokens++; 
} 

// Even though new tokens should be generated each 5 seconds I give it 10 seconds just to make sure we have tokens available. 
setInterval(update_tokens, 10 * 1000); 


var hits_to_send = [ 
    ['_trackPageview', '/page1'], 
    ['_trackPageview', '/page2'], 
    ['_trackEvent', 'category', 'action', 'label'], 
    //... 
    ]; 

// Recursive function to check tokens and send requests. 
function send_next() { 
    if (hits_to_send.length==0) return; 
    if (tokens > 0) { 
     tokens--; 
     _gaq.push(hits_to_send.shift()); 
    } 
    else { 
     setTimeout(send_next, 5 * 1000); 
     return; 
    } 
    send_next(); 
    return; 
} 


//When you go online just call: 
send_next(); 

這應該給你即使有些指標將不會好看更好的數字。例如,timeOnSite和timeOnPage。如果用戶離線超過30分鐘,即使他正在與系統交互,也可能創建新的訪問。

另請注意,如果您的活動太多,可能需要一段時間才能更新所有活動。我建議你保持你的事件合理的數額。儘量只追蹤對未來分析非常重要的事情。

GA Hit Limit Reference

+0

我每個用戶有10個點擊,或者每個用戶每秒有10個點擊? – pooya 2012-02-19 08:39:00

+0

每個用戶10次點擊 – Eduardo 2012-02-19 09:37:36