功能概述
面对日益增长的用户体验要求和激烈的市场竞争,业务团队迫切需要更加深入地了解用户在与应用页面交互的行为,针对性地进行页面设计、内容布局或交互流程优化,从而提升产品体验与用户转化。 Session Replay (会话回放)和热力图功能提供了一种可视化、聚合式的用户行为数据分析能力,从而帮助我们基于真实的用户行为数据快速发现交互障碍,优化页面布局和交互体验。
SessionReplay(会话回放)
SessionReplay 支持录制用户在页面上的所有操作,包括:
DOM 变化
用户交互动作(点击、输入、滚动等)
网络请求
页面性能指标
录制完成后,您可以在监控平台回放完整的用户会话,帮助您:
快速定位问题:通过回放用户操作,快速复现错误场景
优化用户体验:观察用户真实操作路径,发现交互问题
提升转化率:分析用户行为,优化关键流程
热力图
热力图功能通过采集用户的点击行为数据,生成可视化的热力图,帮助您:
了解用户关注点:查看用户最常点击的区域
发现无效点击:识别用户点击但无响应的区域
优化页面布局:根据点击热力图调整页面元素位置
提升用户体验:减少误触,提高操作效率
快速入门
前置条件
已完成 RUM SDK 接入,确保 SDK 版本(≥ 0.1.5),接入参考 接入Web & H5应用
启用 SessionReplay
最简单的启用方式:
armsRum.init({
endpoint: "your endpoint",
replay: true, // 启用会话回放
});
启用热力图
启用热力图的使用依赖SessionReplay(基于SessionReplay作为热力图的背景页面),需要开启replay(对采样率没有要求),另外需要配置 action 采集器的 trackUserInteractions 选项:
armsRum.init({
endpoint: "your endpoint",
replay: true, // 启用会话回放
collectors: {
action: {
enable: true,
trackUserInteractions: true, // 启用热力图数据采集
}
}
});
完整配置示例
同时启用 SessionReplay 和热力图:
armsRum.init({
endpoint: "https://your-endpoint.com/rum/web/v2",
// SessionReplay 配置
replay: {
enable: true,
sampling: 20, // 会话回放采样率,此处代表 20% 的会话会被录制
privacy: {
level: 'user-input', // 仅遮蔽用户输入
}
},
// 热力图配置
collectors: {
action: {
enable: true,
trackUserInteractions: true, // 启用热力图分析
sampling: 100, // 100% 采样率
}
},
// Session 配置
sessionConfig: {
sampleRate: 1, // 会话采样配置,默认 100% 采样率
storage: 'localStorage',
}
});
SessionReplay 配置
配置项说明
通过 replay 配置项进行配置,支持简单启用或详细配置。
参数 | 类型 | 描述 | 是否必填 | 默认值 |
| boolean | 是否启用会话回放功能 | 否 |
|
| number | 采样率,取值范围:0-100,表示百分比(例如:20 表示 20% 的会话会被录制) | 否 |
|
| string | Replay 数据存放位置,指定录制数据的存储 API | 否 | 基于 |
| object | 隐私保护配置 | 否 |
|
privacy 配置
在启用 Session Replay 前,建议您进行正式的隐私影响评估,规划隐私保护配置以控制录制内容的敏感信息遮蔽,RUM 提供了不同级别的隐私保护级别配置。
参数 | 类型 | 描述 | 是否必填 | 默认值 |
| string | 隐私保护级别。可选值: - - - - | 否 |
|
allowlisted| Array | 白名单配置。当level为'allowlisted'时生效,指定允许录制的元素选择器或元素列表
可以通过添加特定 CSS 类来控制录制行为:
rum-block:避免该元素及其子元素被录制,回放时是一个同等宽高的占位元素rum-ignore:避免录制该元素的输入事件rum-mask:该元素及其子元素的 text 内容将会被屏蔽
<!-- 不录制该区域 -->
<div class="rum-block">
这部分内容不会被录制
</div>
<!-- 避免录制该元素的输入事件 -->
<input class="rum-ignore" />
<!-- 遮蔽敏感信息 -->
<div class="rum-mask">
敏感信息会被遮蔽显示
</div>配置示例
示例 1:简单启用(默认配置)
armsRum.init({
endpoint: "your endpoint",
replay: true
});
示例 2:设置采样率
armsRum.init({
endpoint: "your endpoint",
replay: {
enable: true,
sampling: 20, // 20% 的会话会被录制,降低存储成本
}
});
示例 3:隐私保护 - 遮蔽所有文本
armsRum.init({
endpoint: "your endpoint",
replay: {
enable: true,
privacy: {
level: 'mask' // 遮蔽所有文本内容和输入框
}
}
});
示例 4:隐私保护 - 仅遮蔽用户输入
armsRum.init({
endpoint: "your endpoint",
replay: {
enable: true,
privacy: {
level: 'user-input' // 仅遮蔽用户输入的内容(密码、输入框等)
}
}
});
示例 5:隐私保护 - 白名单模式
armsRum.init({
endpoint: "your endpoint",
replay: {
enable: true,
privacy: {
level: 'allowlisted',
allowlisted: ['.main-content', '#app', '.product-card'] // 仅录制这些元素
}
}
});
工作原理
录制时机:SessionReplay 在以下时机开始录制:
Session 初始化时
页面加载完成后(
DOMContentLoaded)
数据上传:录制数据会在以下时机上传:
页面隐藏时(
visibilitychange)页面冻结时(
freeze)页面卸载前(
beforeunload)路由变化时(
pv)
录制限制:
单个会话录制的最长时间为 1 小时(3600 秒)
超过最大时长后会自动停止录制
采样控制:
采样率在 Session 级别控制,采样的命中前提是Session命中采样
可通过
replay.sampling配置采样决策在 Session 初始化时确定,整个会话期间保持不变
热力图配置
配置项说明
热力图功能通过 collectors.action 采集器配置,需要启用 trackUserInteractions 选项。
参数 | 类型 | 描述 | 是否必填 | 默认值 |
| boolean | 是否启用点击事件采集 | 否 |
|
| boolean | 是否追踪用户交互(用于热力图分析)。当为 | 否 |
|
| number | 采样率,取值范围:0-100,表示百分比 | 否 |
|
配置说明
trackUserInteractions: false(默认):只采集可交互元素(button、a、input、select、option、textarea 等)的点击事件
采集的数据包括:元素名称、XPath、持续时间等基础信息
适用于只需要基础点击统计的场景
trackUserInteractions: true:采集所有元素的点击事件,包括不可交互元素
采集的数据包括:
位置信息:点击的 X/Y 坐标(相对于文档)、元素内相对坐标
目标元素信息:元素选择器、宽度、高度、是否为可交互元素、是否可信的交互
视口信息:页面视口的宽度和高度
适用于需要生成热力图的场景
配置示例
示例 1:启用热力图(推荐配置)
armsRum.init({
endpoint: "your endpoint",
collectors: {
action: {
enable: true,
trackUserInteractions: true, // 启用热力图分析
sampling: 100, // 100% 采样率
}
}
});
示例 2:仅采集基础点击事件(不启用热力图)
armsRum.init({
endpoint: "your endpoint",
collectors: {
action: {
enable: true,
trackUserInteractions: false, // 不启用热力图
sampling: 100,
}
}
});
采集的数据字段
当 trackUserInteractions: true 时,采集的点击事件包含以下字段:
position(位置信息)
{
x: 123, // 点击 X 坐标(相对于文档)
y: 456, // 点击 Y 坐标(相对于文档)
ex: 50, // 元素内相对 X 坐标
ey: 30 // 元素内相对 Y 坐标
}
target(目标元素信息)
{
selector: "#root > div > button:nth-child(15)", // 元素选择器
width: 120, // 元素宽度(像素)
height: 40, // 元素高度(像素)
reaction: 1, // 是否为可交互元素(0=不可交互, 1=可交互)
trust: 1 // 是否可信的交互(0=不可信, 1=可信)
}
viewport(视口信息)
{
width: 1920, // 视口宽度(像素)
height: 1080 // 视口高度(像素)
}
工作原理
事件监听:SDK 监听页面的
click事件(使用捕获阶段)元素识别:
当
trackUserInteractions: false时,只采集可交互元素的点击当
trackUserInteractions: true时,采集所有元素的点击
数据采集:
计算点击位置(相对于文档和元素)
获取元素信息(选择器、尺寸、交互性)
判断交互可信度(基于元素大小、可见性等)
数据上报:采集的数据会随其他 RUM 事件一起上报到监控平台
使用场景
SessionReplay 常见使用场景
1. 错误复现和调试
场景:用户报告了一个错误,但无法准确描述操作步骤。
解决方案:
启用 SessionReplay,设置合理的采样率(如 20%)
当错误发生时,通过 Session ID 关联找到对应的会话回放
回放用户操作,快速定位问题原因
2. 用户体验优化
场景:分析用户在关键流程中的操作路径,优化转化率。
解决方案:
针对关键页面(如购买流程)提高采样率
回放用户会话,观察用户操作习惯
发现操作障碍点,优化页面布局和交互
3. 支持客服场景
场景:客服需要了解用户遇到的具体问题。
解决方案:
通过用户 ID 或 Session ID 查找对应的会话回放
回放用户操作,快速理解问题上下文
提供更精准的解决方案
热力图使用场景
1. 页面布局优化
场景:了解用户最常点击的区域,优化页面布局。
解决方案:
启用热力图数据采集
在监控平台查看点击热力图
根据热力图调整重要元素的位置
2. 无效点击分析
场景:发现用户点击但无响应的区域(无效点击)。
解决方案:
通过
target.reaction字段识别不可交互元素的点击分析无效点击的分布和频率
优化页面,减少无效点击
3. 移动端适配优化
场景:移动端用户误触率高,需要优化点击区域。
解决方案:
通过热力图查看移动端的点击分布
识别误触热点区域
调整元素大小和位置,减少误触
最佳实践
SessionReplay 最佳实践
1. 采样率设置
生产环境:建议设置 10-20% 的采样率,平衡成本和覆盖率
测试环境:可以设置 100% 采样率,便于问题排查
关键页面:对转化率关键页面提高采样率
const isProduction = process.env.NODE_ENV === 'production';
armsRum.init({
endpoint: "your endpoint",
replay: {
enable: true,
sampling: isProduction ? 20 : 100, // 生产环境 20%,测试环境 100%
}
});
2. 隐私保护
敏感信息:对于包含敏感信息的页面,使用
'mask'或'user-input'级别公开页面:对于公开页面,可以使用
'allow'级别,获得更完整的回放合规要求:根据合规要求,合理设置隐私级别
3. 存储成本优化
合理设置采样率,按需配置采样率
对于非关键页面,可以降低采样率或禁用录制
定期清理过期的录制数据(默认30天)
4. 性能考虑
SessionReplay 会对页面性能产生一定影响,建议在关键页面使用
监控录制数据的体积,避免影响上报性能
热力图最佳实践
1. 采样率设置
分析阶段:建议使用 100% 采样率,获得完整数据
稳定运行:可以降低到 50-80%,减少数据量
高流量页面:可以适当降低采样率
armsRum.init({
endpoint: "your endpoint",
collectors: {
action: {
enable: true,
trackUserInteractions: true,
sampling: 80, // 80% 采样率
}
}
});
2. 结合业务分析
结合页面路径、用户属性等维度分析热力图
关注关键转化路径的点击热力图
定期分析热力图变化,优化页面布局
3. 移动端优化
移动端误触率高,重点关注无效点击
通过
target.trust字段识别可信点击优化移动端元素的点击区域大小
常见问题
SessionReplay 常见问题
开启 SessionReplay 对页面性能有影响吗?
SessionReplay 会对页面性能产生一定影响,主要体现在:
内存占用:录制数据会占用一定内存
CPU 使用:DOM 变化监听会消耗 CPU 资源
网络传输:录制数据需要上传,可能影响网络性能
建议:
合理设置采样率,避免全量录制
在非关键页面可以禁用录制
监控页面性能指标,确保影响在可接受范围内
如何控制录制数据的体积?
可以通过以下方式控制录制数据体积:
降低采样率:减少录制的会话数量
设置隐私级别:使用
'mask'或'user-input'级别,减少录制内容限制录制时长:单个会话最多录制 1 小时
过滤不需要的元素:使用
allowlisted模式,只录制关键区域
Q3: 是否支持Canvas 和 IFrame的录制?
A: 基于合规和录制性能方面的考量,暂不支持Canvas和IFrame的录制,会留白处理。
Q4: 采样率是如何工作的?
A: 采样率在 Session 初始化时确定,整个会话期间保持不变。例如:
如果Session的采样率配置为20%,Replay配置为20%,SessionReplay的整体采样率是 20% × 20% = 4%
如果采样率设置为 20%,则 20% 的 Session 会被录制
采样决策基于 Session ID 的哈希值,确保同一 Session 的决策一致
一旦 Session 被选中录制,整个会话期间都会持续录制
热力图常见问题
Q1: 热力图数据什么时候上报?
A: 热力图数据会随其他 RUM 事件一起上报,上报时机包括:
达到
reportConfig.maxEventCount时批量上报达到
reportConfig.flushTime时间间隔时上报页面卸载前上报
Q2: 热力图数据包含哪些信息?
A: 当 trackUserInteractions: true 时,热力图数据包含:
位置信息:点击的 X/Y 坐标(文档坐标和元素内坐标)
元素信息:选择器、尺寸、是否为可交互元素
交互信息:是否可信的交互
视口信息:页面视口的宽度和高度
Q3: 如何判断点击是否有效?
A: 可以通过以下字段判断:
target.reaction:1表示可交互元素,0表示不可交互元素target.trust:1表示可信的交互,0表示可能误触
无效点击通常表现为:reaction: 0 或 trust: 0