GA EC事件跟踪通常非常缓慢,导致用户体验不良

时间:2017-04-17 16:38:50

标签: javascript jquery performance google-analytics usage-statistics

我刚刚实施了GA增强型电子商务活动,用于跟踪产品点击次数。当用户点击产品缩略图时,会发送此事件。

此实施基于Google Analytics guide for enhanced ecomm。我还使用performance.now()添加了性能分析代码。骨架如下:

var addProductHandler = (function() {
    return function(ev) {
        var t1 = performance.now();
        ...
        ga('ec:addProduct', {
           'id': SKU,
           'position': item_position
        });
        ga('ec:setAction', 'click', {list: 'Prod Reco'});
        ga('send', 'event', 'UX', 'click', 'Results', {
            hitCallback: function() {
                console.log('perf1:', (performance.now()-t1)*1000);
                document.location = _href;
            }
        });
        ...
    }
})();

在测试过程中,我发现如果我在访问该页面后立即点击产品缩略图,那么该事件将在〜53ms内被推出。这非常好,没有问题。

但是,如果我将咔嗒声延迟到更长的时间,比如说〜5秒,那么它需要1-2.5秒之间的任何时间!

这种低迷的响应能力会影响用户参与度。想要使用Chrome进行分析,我会发现以下内容:

当事件在~53 ms内成功发送时,会发出如下所示的1个请求:

https://www.google-analytics.com/collect?v=1&_v=j50&t=event&a=...
status: 200

但是当需要1-2.5秒的时间时,转移看起来像这样:

1 https://www.google-analytics.com/r/collect?v=1&_v=j50&a=...
  status: 302
2 https://stats.g.doubleclick.net/r/collect?v=1&aip=1&t=dc&_r=3&tid=UA-...
  status: 302
3 https://www.google.com/ads/ga-audiences?v=1&aip=1&t=sr&_r=4&tid=UA-...
  status: 302
4 https://www.google.co.in/ads/ga-audiences?v=1&aip=1&t=sr&_r=4&tid=UA-...
  status: 200

这表明有4个https请求,前3个有302重定向,最后一个做这个工作。他们每个都添加自己的延迟(DNS /初始连接/ SSL /等待/内容下载),总结到上述1-2.5秒的延迟。只有在完成这4个请求后,才会调用hitCallback,然后开始加载点击的产品页面。

避免这种缓慢行为的任何帮助都会很棒。据我所知,这种延迟不是预期或发生的事情。

(请注意,我还没有在hitCallback上引入setTimeout,因为这只会导致延迟超出配置值的传输,从而跳过这些事件。 另请注意,在两次传输中,我都看到有'gif'的请求,即使我已经配置了传输:ga''create'例程中的'beacon'。

1 个答案:

答案 0 :(得分:0)

我通过纠正我将传输设置为'beacon'的方式来解决这个问题。

根据google(错误)文档here,我在ga的transport: 'beacon'电话中设置了'create'。这是不对的,因此GA没有使用'beacon'。

正确的方式如GA的文档中的其他地方所述:

ga('set', 'transport', 'beacon');

另请注意,GA并未感知可用作传输的最佳方法。它应该使用'xhr'方法,它是使用XMLHttpRequest的同步POST,但是又回到'gif'GET(在Chrome 57.0上测试)。

要解决此问题,我目前正在使用以下JS代码:

if (window.navigator && window.navigator.sendBeacon) {
    ga('set','transport','beacon');
} else if (window.XMLHttpRequest) {
      ga('set','transport','xhr');
}

在非支持XMLHttpRequest的旧版浏览器中,如IE5 / 6,希望GA能使用'gif'方法。我们不需要为它们设置“运输”。但是,我们不支持这些旧版浏览器。