事件批处理
事件批处理
本主题介绍云眼特性标帜(Feature Flag)AB实验 JavaScript(节点)SDK 如何使用事件处理器将决策和转换事件批处理到单个有效负载中,然后再将其发送到云眼。
从变体 3.3.0 开始,SDK 允许批处理事件,并包括用于设置最大批处理大小和刷新间隔超时的选项。事件批处理的好处是,跟踪的展示和转化事件数量相同,网络流量更少。
默认情况下,在 JavaScript SDK 版本 3.3.0 及更高版本中启用事件批处理。
📘 注意
事件批处理适用于现成事件调度程序和自定义事件调度程序。
事件批处理过程不会从事件中删除任何个人身份信息 (PII)。仍必须确保不会向云眼发送任何不必要的 PII。
配置事件批处理
我们提供了两个选项来配置事件批处理:eventBatchSize
和eventFlushInterval
。可以在客户端创建期间传入这两个选项。事件保留在队列中,直到:
- 事件数达到定义的
eventBatchSize
。 - 最旧的事件在队列中存在的时间超过了定义的
eventFlushInterval
,该值以毫秒为单位指定。然后刷新队列,并在单个网络请求中将所有排队的事件发送到 Eyeofcloud 功能实验。 - 收到新的数据文件修订版。仅当启用了实时数据文件更新时,才会发生这种情况。
JavaScript
const eyeofcloudSdk = require('@eyeofcloud/eyeofcloud-sdk')
eyeofcloudSdk.createInstance({
// other options
eventBatchSize: 100,
eventFlushInterval: 3000,
})
下表定义了这些选项,并列出了浏览器和服务器默认设置的一般建议。在浏览器上,我们建议使用小eventBatchSize
(10)和短eventFlushInterval
(1000)。这可确保以相对较快的方式发送事件,因为如果用户立即退回,某些事件可能会丢失,同时在许多决策调用连续发生的情况下获得网络效率。
对于服务器,这些数字更加灵活,应根据组织的流量和需求进行设置。请联系支持人员以获取针对特定实施的建议。
名字 | 描述 | 推荐值 |
---|---|---|
事件批量大小 | 队列中要保留的最大事件数。达到此数字后,将刷新所有排队的事件并将其发送到云眼灰度实验。 注意:将此值设置为 1,不会对事件进行批处理,并且事件请求的行为与 3.3.0 之前的 JavaScript SDK 中的行为完全相同。 | 默认值:10 |
事件刷新间隔 | 事件在刷新之前可以存在于队列中的最长持续时间(以毫秒为单位)。 | 默认值:30000 ms |
描述
推荐值
事件批量大小
队列中要保留的最大事件数。达到此数字后,将刷新所有排队的事件并将其发送到云眼特性标帜(Feature Flag)AB实验。
默认值:10
注意:将此值设置为 1,不会对事件进行批处理,并且事件请求的行为与 3.3.0 之前的 JavaScript SDK 中的行为完全相同。
根据组织的要求。
事件刷新间隔
事件在刷新之前可以存在于队列中的最长持续时间(以毫秒为单位)。
默认值:30000 ms
根据组织的要求。
📘 注意
最大有效负载大小为 3.5 MB。如果生成的批处理有效负载超过此限制,请求将被拒绝,并显示 400 响应代码
Bad Request Error
。负载大小较大的最常见原因是批大小较高。如果有效负载超出大小限制,请尝试配置较小的批大小。
在应用程序退出时关闭云眼灰度实验
如果启用事件批处理,则必须在退出之前调用 Close 方法(eyeofcloud.close()
)。这可确保尽快刷新排队的事件,以避免数据丢失。
❗
警告
由于 Eyeofcloud 客户端维护排队事件的缓冲区,因此必须在关闭应用程序之前或在取消引用实例时调用
close()
Eyeofcloud 功能实验实例。
方法 | 描述 |
---|---|
关闭() | 停止所有计时器并刷新事件队列。此方法还将停止数据文件管理器发生的任何计时器。 注意:我们建议将此方法连接到正在运行的进程的终止信号。 |
可以挂钩到SIGTERM
事件以确保调用close()
事件,从而保证发送队列中的所有事件。
节点
// respond to SIGTERM and close eyeofcloud
process.on('SIGTERM', async () => {
console.log('SIGTERM signal received.');
await eyeofcloud.close()
process.exit(0)
});