本文根据神策数据资深前端研发工程师王磊《如何用 JS 实现页面录制与回放》的直播整理而成。以下为正文:

一、业务背景

对于研发来说,总是需要处理一些线上问题。To B 和 To C 企业在应对线上问题的流程上有很多相似之处,同时也存在一定差异点。

对于 To C 企业,我们通常会通过用户反馈或线上实时监控系统获取到系统异常状态,同时我们整合获取到的用户环境、系统、配置、版本等信息在本地进行调试复现,成功复现后进行 bugfix 和发布操作。

而对于 To B 企业,总体流程和前者很相似,但是 To B 的性质决定了我们很难获取到问题的上下文和监控内容,往往需要客户、售后、技术支持或相应的值班人员进行信息传递来协助研发定位问题。同时,不同企业类型的客户环境也是对研发的一种挑战,研发无法像普适的 To C 环境一样去模拟 To B 客户的上下文,这对问题定位起到一定的阻碍作用。

为了提高定位线上问题的效率,我们着手调研并落地了内部异常诊断平台。在无需进入客户真实环境的情况下,通过客户提供的诊断文件快速定位问题。对于前端研发工程师而言,除了环境、版本等信息外,操作路径往往非常重要,为了清晰、快速的复现客户操作路径,我们引入了页面录功能。

二、异常诊断与调研

前端研发在诊断异常时往往会依赖客户的操作流程,为了降低与客户的沟通成本,我们希望能够直接录制用户的操作流程。为此,我们在调研时发现业界对于 Web 录制主要有两种方式。其一是以 WebRTC 浏览器原生录制的方式为代表进行录屏,另一种是录制页面的 DOM 结构。

针对神策数据的业务场景,我们需要考虑客户的数据敏感性(针对指定数据进行脱敏)、产物大小等因素,最终我们选择更灵活、传播性更低的 DOM 录制来实现功能。而通过调研我们发现 rrweb 开源仓库对于 DOM 录制的支持性非常好,能够将页面 DOM 结构通过相应算法高效转换为 JSON 数据,对于可操作性较强的 JSON 格式数据而言,我们可以自行实现压缩、加密、敏感数据处理等操作,同时压缩后的文件大小也非常可观,总体可以控制在 5M 以下。

三、页面录制与回放

1. 录制原理

rrweb 对于录制与回放的实现主要由 rrweb、rrweb-snapshot、rrweb-player 三部分组成,其对页面录制和回放有很好的支持性,下图演示了录制和回放的大致操作流程。

rrweb 在录制时会首先进行首屏 DOM 快照,遍历整个页面的 DOM Tree 并通过 nodeType 映射转换为 JSON 结构数据,同时针对增量改变的数据同步转换为 JSON 数据进行存储。整个录制的过程会生成 unique id 来确定增量数据所对应的 DOM 节点,通过 timestamp 保证回放顺序,下图分别对应首屏快照和录制原理图。

对于首屏快照后的增量数据更新,则是通过 mutationObserver 获取 DOM 增量变化,通过全局事件监听、事件(属性)代理的方式进行方法(属性)劫持,并将劫持到的增量变化数据存入 JSON 数据中。

2. 回放原理

回放功能的原理和录制有些类似,首先针对首屏 DOM 快照进行重建,在遍历 JSON 产物的同时通过自定义 type 映射到不同的节点构建方法,重建首屏的 DOM 结构。

而对于录制产生的增量数据,rrweb 内部则根据不同的增量类型调用不同的函数,在页面进行展现。同时,播放时通过录制产生的时间戳来保证回放顺序,通过 Node id 作用至指定的 DOM 节点,通过 requestAnimationFrame 保证页面播放流畅度。

四、小结

相对于视频的形式来说,通过录制页面结构和行为来实现录屏,不仅数据可操作性更强(例如可以对 JSON 产物进行加密、压缩、分段、剔除等操作),还可以进行多方式传输(例如分段传输、指定业务场景传输)。同时,页面录制的使用场景也较为丰富,可以用来定位问题、产品使用分析、自动化测试记录、重要信息(操作)备份以及多人协作等场景。

点击链接查看直播回放:https://sensorswww.datasink.sensorsdata.cn/t/Qer

✎✎✎

【更多内容】

  • 神策数据陈宁:前端国际化技术需求及模型实现

  • A/B 测试实战解析,搞定超 60% 会员增长

  • 在线教育大数据营销平台实战(搭建篇)

神策数据王磊:如何用 JS 实现页面录制与回放相关推荐

  1. 如何用JS获取页面上的所有标签

    最近忙的一匹,忙着大保健,都来不及写博客,今天特意抽出点时间来写一写 前两天看到一个题,是问如何从页面上获取所有的标签的并查看他们的数量,感觉还是有点意思的,所以给大家来搞一下子 我们先来捋捋思路,那 ...

  2. 在html中如何设置静音,如何用JS静音页面中的所有声音?

    小编典典 规则1:切勿在页面加载后启用音频自动播放. 无论如何,我将使用jQuery显示HTML5: // WARNING: Untested code ;) window.my_mute = fal ...

  3. 页面url带参数_微信小程序云开发教程微信小程序的JS高级页面间数据传递

    同学们大家好,我是小伊同学,上一节课我们讲解了全局数据的读写方法,那么在页面间同样需要数据交互,今天我们就来学习这部分内容. 在微信小程序中,我们常常需要将数据在页面之间进行传递,比如用户的身份信息, ...

  4. 招聘数据爬取、数据处理与可视化(v2--解析JS渲染页面)

    招聘数据爬取.数据处理与可视化(v2--解析JS渲染页面) 更新说明 程序说明 数据爬取 观察网页结构 页面解析 将数据写入csv文件中 通过观察页面链接,爬取所有页面 爬虫程序完整代码 爬取数据结果 ...

  5. html粘贴excel内容,如何用JS解析剪切板里的excel内容

    前言 这次记录的是昨晚一个想法:把excel内容复制到剪切板并转成自己想要的json格式,核心是要把excel内容转json,这部分主要看excel的格式和json如何业务的映射,不展开.倒是通过实践 ...

  6. PPT 下载 | 神策数据杜明翰:打造趁手、好用的标签用户画像系统

    本文根据神策数据产品总监杜明翰在<用户个性化运营-标签体系搭建新机遇>主题沙龙中演讲整理所得. 关于标签体系,我们经常会听到这样一些问题: 图 企业思考的问题 在与众多企业的接触过程中,我 ...

  7. PPT 下载 | 神策数据朱静芸:电商行业精细化运营四大场景

    本文内容根据神策数据分析师朱静芸在<数据分析-运营与产品场景的应用实践>主题沙龙中演讲整理所得.主要内容包括: 精细化运营的四个关键词 场景 1:小程序产品的用户分析运营 场景 2:新用户 ...

  8. 喜报!中华万年历签约神策数据

    随着"互联网+"引领企业转型升级,大数据为随身云决策与发展提供了重要支撑.一直以来,随身云坚持以用户为中心.用户数据驱动产品的优化与改进.近期,随身云旗下产品中华万年历 APP 签 ...

  9. 广发证券王环:神策数据不止为我节省了 3 名研发工程师

    随着"互联网 +"引领金融业转型升级,大数据为企业提供了重要支撑.一直以来,广发证券坚持以用户为中心,用户数据驱动产品的优化与改进,因此很早便成立了大数据部门.此部门最初为业务发展 ...

最新文章

  1. Windows server 2003/2008更改远程桌面端口脚本
  2. Hexo错误_FATAL missed comma between flow collection entries at line
  3. PS教程第十三课:是时候开始战斗了
  4. skyeye linux qt,ARM仿真器SkyEye的安装及使用
  5. hhkb mac设置_把 HHKB 放在 MacBook 上使用的解决方案
  6. 佳能g3800故障灯说明书_佳能打印机故障如何维修 佳能打印机故障维修方法【介绍】...
  7. LeetCode-1208:尽可能使字符串相等
  8. jQuery中的筛选(六):first()、last()、has()、is()、find()、siblings()等
  9. Apache POI组件操作Excel,制作报表(四)
  10. 华为 博士 实习_华科女博士年薪156入职华为!最新回应:在深圳也难买房…
  11. HCIE-Security Day29:IPSec:实验(四)总部与分支机构之间建立IPSec PN(采用策略模板方式,总部采用固定IP)
  12. 【HUST】网安|计算机网络安全实验|实验一 TCP协议漏洞及利用
  13. 钉钉机器人关键字自动回复_【原创新软件】办公引流机器人个人微信企业微信QQ通用的自动回复,群发助手...
  14. 计算机动画相关论文,计算机动画论文.doc
  15. Spring--AOP知识学习
  16. Redis的多路复用机制
  17. 专心致志求精进——给自己的生日祝福
  18. 家里WiFi慢?几招帮你解决
  19. 共享出行的最后一片战场
  20. Liang-GaRy啃linux书想吐(六)

热门文章

  1. elasticsearch java likequery_ElasticSearch的模糊查询
  2. 代码签名证书Authenticode签名伪造——PE文件的签名伪造与签名验证劫持
  3. small2java_java类
  4. 弹性地基梁板法计算原理_建筑混凝土结构设计和计算方法,老师傅总结:其原理就是这么简单...
  5. java awt table_java.awt.image 类 LookupTable - Java 中文参考手册
  6. python3.6安装包多大_win10下Python3.6安装、配置以及pip安装包教程
  7. post json后台处理数据_Python爬虫教程-07-post介绍(百度翻译)(上)
  8. 邮件头解析=?utf-8?Q?乱码
  9. PCA与SVD的关系
  10. java三目运算符判断boonlean,java三元运算符