使用保留事件和发送事件控制云眼 Web 实验事件调度的时间

云眼About 6 min

使用保留事件和发送事件控制云眼 Web 实验事件调度的时间

本主题介绍如何:

  • 了解如何使用 holdEventssendEvents JavaScript API 来解决分析差异并提高性能

配置为使用 /events 终结点日志批处理的事件(而不是为每个事件生成一个网络请求)的云眼 Web 实验代码段。这些批次在代码段激活后的前十秒内每秒发送一次,然后立即发送。holdEventssendEvents 协同工作以控制事件日志记录的计时。 可以使用它们来更好地控制代码段何时开始发送事件批次。在以下情况下,可能需要执行此操作:

  • 希望通过等待页面完成加载后再发送事件来提高页面加载性能

  • 为了解决数据差异,需要使云眼 Web 实验日志记录与分析平台保持一致。

实现 holdEvents 和 sendEvents API

  1. 在代码段激活之前调用holdEvents(例如,在 JavaScript 项目中或云眼 Web 实验 代码段标记之上)。这将阻止代码段记录任何事件,直到sendEvents被调用(尽管触发的任何事件都将在 localStorage 中排队):

window.eyeofcloud = window.eyeofcloud || []; window.eyeofcloud.push({type: "holdEvents"});

  1. 当想要“发布”事件时调用sendEvents。建议添加一个侦听器/超时,以便从同一位置调用sendEvents,以确保正确调用它们。如果调用holdEvents但不调用sendEvents,云眼 Web 实验将不会跟踪任何数据。
window.eyeofcloud = window.eyeofcloud || [];
window.eyeofcloud.push({type: "sendEvents"});

调用sendEvents后,代码段将被允许在下一个轮询间隔及其后发送成批排队的事件。后续批次将每秒发送一次,直到自代码段激活以来经过 10 秒。在此之后,单个事件将在触发后立即发送。访问者导航时未发送的任何事件都将保存在 localStorage 中,并在实现代码段的下一页上发送,即使下一次页面浏览发生在数小时或数天后(例如,在新会话开始时)。

使用案例

实现sendEventsholdEvents的两个主要用例,每个用例都需要不同的实现策略。

提高页面加载性能

提高页面性能的一种方法是减少浏览器在页面开始加载后关键的最初几秒钟内发出的请求数。这是用户最有可能注意到页面加载缓慢的时候。

可以确保云眼 Web 实验在此期间不会跟踪任何事件,方法是在代码段激活之前调用holdEvents(如上所述),然后在浏览器完成页面的某些部分加载时将调用sendEvents绑定到浏览器触发的事件。

例如,希望阻止云眼 Web 实验在 window.load 之后生成任何事件请求。可按如下方式实现:

window.eyeofcloud = window.eyeofcloud || [];
window.eyeofcloud.push({type: "holdEvents"});
window.addEventListener("load", function() {
    window.eyeofcloud.push({type: "sendEvents"});
});

选择最合适的事件来绑定 sendEvents 调用。加载事件发生在所有资产下载完成之后,也就是页面加载过程的后期。更激进的实现可能会使用 DOMContentLoaded 生命周期事件。有了 sendEvents,可以灵活地调整代码段的日志记录行为,以满足网站的各种需求。

减少分析差异

如本文中有关分析差异疑难解答的文章中所述,在云眼 Web 实验中看到的数字可能与在分析平台中看到的数字不匹配的原因有多种。差异的一个常见原因是时间。

通常,云眼 Web 实验代码段将在页面头部的高处实现。这可确保云眼 Web 实验可以快速初始化并运行版本代码来操作内容,而不会导致页面闪烁。相比之下,分析跟踪代码经常在页面加载期间触发,通常在文档正文中触发。分析库不负责操作内容,因此闪烁不是问题。

这种计时不匹配意味着云眼 Web 实验通常会在分析平台之前开始记录事件 - 有时提前几秒钟。这会导致云眼 Web 实验计算的转化次数和唯一身份访问者比分析平台多,因为快速退出页面的访问者可能会被云眼 Web 实验跟踪,但不会被分析平台跟踪。

通过在代码段激活之前调用holdEvents,然后从分析库提供的回调函数中调用sendEvents来解决此计时不匹配问题。

例如,希望阻止云眼 Web 实验生成任何事件请求,直到 Google Analytics 跟踪器对象准备好进行交互。你可以利用readyCallback来做到这一点。实现可如下所示:

// Implemented above the 云眼 snippet code
    window.eyeofcloud = window.eyeofcloud || [];
    window.eyeofcloud.push({type: "holdEvents"});

// Implemented later on the page
    ga(‘create’, ‘UA-XXXXX-Y’, ‘auto’);
    ga('set', 'anonymizeip', true);
    ga(function(tracker) {
        window.eyeofcloud.push({type: "sendEvents"});
    });

此实现指示云眼 Web 实验在 GA 跟踪器对象准备好进行交互后发送事件。但是,这并不意味着已触发 GA 事件。如果要将云眼 Web 实验与在每个页面上实现的 GA 事件(例如,网页浏览事件)对齐,则可以使用hitCallback

最后,实施将根据使用的分析平台而有所不同。许多平台都提供类似的回调功能:

混音面板

  • mixpanel.init():初始化 Mixpanel 库时触发,利用对象中的回调loaded``config

  • mixpanel.track():使用 Mixpanel 跟踪事件时触发,支持可选的回调函数

波幅

  • amplitudeClient.init():初始化振幅SDK时触发,支持可选回调函数

  • amplitudeClient.logEvent():记录事件时触发,支持可选的回调函数

对结果的影响

实现holdEventssendEvents时,云眼 Web 实验代码段在开始发送事件之前可能会遇到延迟。这将以两种方式影响云眼 Web 实验结果:

  • 云眼 Web 实验将记录更少的唯一身份访问者。查看一个页面,在发送第一批事件之前退出,并且永远不会返回网站的访问者将不会受到跟踪。

  • 云眼 Web 实验将记录更少的转化。在发送批处理之前立即退出且从未返回网站的访问者触发的转化将不会被跟踪。

这些影响的大小将随着代码段在开始发送事件之前必须等待的时间而增加。如果目标是使云眼 Web 实验的结果与分析平台保持一致,这是可取的。

转换然后导航到实施代码段的新页面(而不是退出网站)的访问者将在拾取和发送他们在 localStorage 中举行的事件时被跟踪。即使下一次网页浏览发生在数小时或数天后(即在新会话开始时),也是如此。

Last update:
Contributors: zhangweixue