据我所知,谷歌建议如何设置gtag,它是一个始终将更多变量推入数组的函数:
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
遵循有关如何在SPA中使用它的文档之后,看来我实际上是在造成内存泄漏。
gtag('config', 'GA_TRACKING_ID', {'page_path': '/new-page.html'});
console.log('window.dataLayer', window.dataLayer);
我的控制台显示,每次导航到新页面时,window.dataLayer数组都会变大。
我假设有些事情我不了解,因为我怀疑Google是否希望我在我的应用程序中造成内存泄漏,但现在我很困惑。
答案 0 :(得分:5)
当前dataLayer的大小上限为300(FIFO样式)。
目前尚无记录,将来可能会更改。但是存在限制是为了避免在同一页内发生重复事件的情况下耗尽内存。
答案 1 :(得分:0)
我不太清楚,但是我认为这只是在加载gtag之前初始化的普通数组。如果唯一要考虑的是防止该数组变大,那么我们是否可以创建一个防止其自身超过设定限制的数组?像这样吗?:
function createDL(limit){
var dL = [],//the array
iCounts = [];//the log of arg. length every time push is called
dL.push = function(){
if(this.length >= limit) {
return (
!!iCounts[1]
&&
(
this.splice(iCounts[0],iCounts[1]),
iCounts.splice(1,1),
this.push.apply(this,arguments)
)
);
}
this.constructor.prototype.push.apply(this,arguments);
iCounts.push(arguments.length);
return this;
}
return dL;
}
用法:
window.dataLayer = dataLayer || createDL(5);
dataLayer.push(1,2,3);//1,2,3
dataLayer.push(4,5);//1,2,3,4,5
dataLayer.push(6);//1,2,3,6
dataLayer.push(8,9,10,11);//1,2,3,6,8,9,10,11
dataLayer.push("aaa");//1,2,3,"aaa"
我没有碰到推送到dataLayer的第一件事,因为它们包含“ config”指令和一些可选参数。如果推入数组的第一件事大于限制,那么显然它将始终返回false,您将无法再继续推入。
在您的情况下,上限为300。
还是我错过了什么?