我刚刚实施了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'。
答案 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'方法。我们不需要为它们设置“运输”。但是,我们不支持这些旧版浏览器。