一文带你了解 PageSpy,开启前端调试新姿势

blucas01 · 2024-10-11 08:56:47 · 326 次点击
## 前言

推荐一款多端的开源调试工具 PageSpy ,官方地址:<https://pagespy.org> 。

这款工具可以拿来做什么?如何使用?

接下来的内容会一一说明,你也可以前往官网的回放实验室体验:<https://pagespy.org/#/replay-lab> 。

## 介绍

日常开发中,项目出现问题基本都会通过 **本地浏览器控制台** 排查。可有些时候因为无法使用控制台,而导致排查故障需要多花费很多时间和人力,比如:

*   **真机调试 H5**:以往有产品提供了可以在 H5 上查看信息的面板,但真机屏幕太小操作不便、显示不友好,以及数据会被截断;
*   **远程办公、异地协同**:传统沟通方式如邮件、电话、视频等,沟通问题的周期长、效率不高、故障信息不全面,容易误解误判;
*   **用户设备白屏**:除了需要提前获知出现问题的用户信息,定位问题的方式包括查看数据监控、日志分析,甚至还要跑到客户现场等,这些方式依赖排障人员要理解业务场景、技术实现;
*   **全局的 "问题反馈" 组件**

    点击查看示例图:[问题反馈表单组件]( https://alist.jikejishu.com/d/%E9%98%BF%E9%87%8C%E4%BA%91OSS/pagespy/feedback.png?sign=80NP6n68s8Se_Jx5c9f3vGojmN_nOgxkHCpa3t0d0h8=:0)。

    大多注重用户体验的网站,会在产品端为用户提供反馈问题的表单组件。从用户的角度这确实会提升好感,但用户提交的内容对于排查问题的帮助可能并不大,根本原因是:用户提交的基本上是文字概述和截图,或许还包含用户信息,但开发者更希望看到的是:

    *   用户是如何操作的;
    *   伴随着操作,程序的运行时行为数据。例如:打印的日志、发出的网络请求以及响应数据等;

上述场景中列举的问题的共同点是:**开发者无法像使用本地控制台一样查看程序运行信息。**

![shapes at 24-10-09 14.46.35.png]( https://p0-xtjj-private.juejin.cn/tos-cn-i-73owjymdk6/25d418d3e31b485d8ea02c11ecf261f6~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgQmx1Y2Fz:q75.awebp?policy=eyJ2bSI6MywidWlkIjoiMTM0NTQ1Nzk2NDE5NjU5MCJ9&rk3s=f64ab15b&x-orig-authkey=f32326d3454f2ac7e96d3d06cdbb035152127018&x-orig-expires=1729212205&x-orig-sign=x7ngm4aRalwZmrhSBY4eXcbeuRo%3D)

你也被这些问题困扰了吗?那 PageSpy 可以给你一些帮助。

## 能力

为了方便理解,我们通过实例对 PageSpy 的使用场景和能力进行说明。

### PageSpy 在线实时调试

产品联调期间,测试人员上报问题后,开发者通过 **「 PageSpy 在线实时调试」** 查看程序的运行数据,其中包括实时的 `Console 、Network 、Page 、Storage` 以及 System 信息,还可以发送代码到真机上执行;

![shapes at 24-10-09 15.15.14.png]( https://p0-xtjj-private.juejin.cn/tos-cn-i-73owjymdk6/3b3c2501ab574313aa52996a2d63171d~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgQmx1Y2Fz:q75.awebp?policy=eyJ2bSI6MywidWlkIjoiMTM0NTQ1Nzk2NDE5NjU5MCJ9&rk3s=f64ab15b&x-orig-authkey=f32326d3454f2ac7e96d3d06cdbb035152127018&x-orig-expires=1729212205&x-orig-sign=SWOQ2ra7h23njgQq4LElIaB0GQM%3D)

![shapes at 24-10-09 15.28.17.png]( https://p0-xtjj-private.juejin.cn/tos-cn-i-73owjymdk6/4e6f59e4db29477491480b18e3fc85a6~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgQmx1Y2Fz:q75.awebp?policy=eyJ2bSI6MywidWlkIjoiMTM0NTQ1Nzk2NDE5NjU5MCJ9&rk3s=f64ab15b&x-orig-authkey=f32326d3454f2ac7e96d3d06cdbb035152127018&x-orig-expires=1729212205&x-orig-sign=Uy30Yp8Dw%2Fi3uj1HLEmvwXdQ5%2Bc%3D)

### PageSpy 日志回放调试

假设你开发的工厂系统已经上线、交付使用,某日系统使用人员反馈某个流程不符合预期,但是由于办公地点不同你们只能线上交流。

系统接入 PageSpy 之前,定位问题可能需要对方提供:

*   问题的现象说明;
*   在不同流程状态下的截图;
*   控制台面板的信息(这是有很高门槛的): 如 Console 面板的日志、Network 面板的数据;
*   等等……

系统接入 PageSpy 之后,收到类似的反馈只需告诉对方 **上传日志** 即可。(不用担心!上传 / 下载离线日志的功能 PageSpy 都已经提供。)

![shapes at 24-10-10 10.08.55.png]( https://p0-xtjj-private.juejin.cn/tos-cn-i-73owjymdk6/7c5e405ba1d544feab7d47df199d06c6~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgQmx1Y2Fz:q75.awebp?policy=eyJ2bSI6MywidWlkIjoiMTM0NTQ1Nzk2NDE5NjU5MCJ9&rk3s=f64ab15b&x-orig-authkey=f32326d3454f2ac7e96d3d06cdbb035152127018&x-orig-expires=1729212205&x-orig-sign=ZYXWcR6snpylkDpAk6Of63OD9ZQ%3D)

对方上传完成后就可以前往回放调试,开发者除了可以看到运行时数据外,还可以看到用户的操作轨迹。

![replay-page-a1f617cc.gif]( https://p0-xtjj-private.juejin.cn/tos-cn-i-73owjymdk6/2aab58bab78f41e9a3857abef722dcb8~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgQmx1Y2Fz:q75.awebp?policy=eyJ2bSI6MywidWlkIjoiMTM0NTQ1Nzk2NDE5NjU5MCJ9&rk3s=f64ab15b&x-orig-authkey=f32326d3454f2ac7e96d3d06cdbb035152127018&x-orig-expires=1729212205&x-orig-sign=BEABXR0tUHoikdU%2FffshHpdGMdq0%3D)

## 深入

### PageSpy 组成

PageSpy 主要由三个模块部分组成:

*   在项目中引入的 SDK ,源代码在 [HuolalaTech/page-spy]( https://github.com/HuolalaTech/page-spy) 维护;
*   开发者查看数据的调试端,源代码在 [HuolalaTech/page-spy-web]( https://github.com/HuolalaTech/page-spy-web) 维护;
*   在 SDK 和调试端之间转发消息的服务端,源代码在 [HuolalaTech/page-spy-api]( https://github.com/HuolalaTech/page-spy-api) 仓库维护;

<img src="https://p0-xtjj-private.juejin.cn/tos-cn-i-73owjymdk6/3d9f5e78354746bea86e4b3bc25b72a1~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgQmx1Y2Fz:q75.awebp?policy=eyJ2bSI6MywidWlkIjoiMTM0NTQ1Nzk2NDE5NjU5MCJ9&rk3s=f64ab15b&x-orig-authkey=f32326d3454f2ac7e96d3d06cdbb035152127018&x-orig-expires=1729212205&x-orig-sign=1kBh8pc%2FYCe%2B8ETUzMy%2FXJBdyVw%3D" alt="系统模块示意图 (2)">

### 使用

首先是考虑用户隐私和数据安全、其次为了方便大家使用,PageSpy 打包了上面的三个部分,提供一键启动、开箱即用的多种部署方案,你可以根据自己的情况选择部署方案。

*   使用 Docker 部署

    ```bash
    docker run -d --restart=always -v ./log:/app/log -v ./data:/app/data -p 6752:6752 --name="pageSpy" ghcr.io/huolalatech/page-spy-web:latest
    ```

*   使用 Node 部署

    ```bash
    yarn global add @huolala-tech/page-spy-api@latest && page-spy-api
   
    # 或者
   
    npm install -g @huolala-tech/page-spy-api@latest && page-spy-api
    ```

启动完成后,打开浏览器访问 `http://localhost:6752` 体验,本地测试完成后即可部署到服务器上。

## 最后

PageSpy 在 Web / 小程序 / ReactNative / OpenHarmony 平台上都已经有稳定的 SDK ,希望 PageSpy 能够帮助到大家!
举报· 326 次点击
登录 注册 站外分享
22 条回复  
sentinelK 初学 2024-10-11 09:10:18
试用了一下,挺有意思。
全力滚动的情况下(最大化的造成画面动作) 10 秒钟 400KB ,也不是很大。
同时记录屏幕效果、鼠标轨迹、事件、控制台、网络、存储。

很有意思的一种行为记录尝试。

但有几个疑问(抱歉没时间通读 readme ):
1 、我看官方的反馈组件,是没有暂停、停止等录制控制的。那么最长支持录制多长时间?(换句话说录制的内容是暂存在哪里的?如果突破了上限怎么办?是滚动录制,还是?)
2 、在 SDK 中是否支持自定义的反馈组件,或者通过调用 SDK 方法等形式拿到.json ?(比如我想实现静默自动 10 秒上传)
3 、基于成本等原因,我想只记录一部分信息或者调整信息质量(比如录屏的画质、帧率,甚至不需要录屏),目前是否支持。
superliy 小成 2024-10-11 09:17:54
不错
DreamingCTW 小成 2024-10-11 09:25:59
官网进不去?我自己的网络问题吗?
cloverstd 初学 2024-10-11 09:47:05
@DreamingCTW #4 托管在 GitHub Pages
zzNaLOGIC 小成 2024-10-11 11:21:53
年中的时候在公司推过一波了,确实好用。但是的但是,还是有一些注意点的
-对于页面内容的录制,如果是内嵌 iframe 加载的操作页面,会存在 iframe 内部内容无法记录的问题。需要折腾修改一下,好在不麻烦
-对于请求很频繁的页面,长时间监控和记录的情况下,会出现较为严重的性能问题(尤其是低性能电脑上,客户电脑环境不可控),现在已经很多人反馈有浏览器卡顿、延迟的问题了,十分建议不要把单次录制时间拉太长
-应该很多人都会像我一样,第一反应就是二开一下,加个监控指定接口或者报错就自动上传日志的功能吧。可以做,但强烈建议加上频率阈值限制,否则也会导致第二点的性能问题。
express 小成 2024-10-11 11:42:16
记得好久之前是不是也有个类似的工具叫 find bug 还是 fire bug ,搜了一圈没搜到...
youyouzi 初学 2024-10-11 11:48:19
有宣发的 PPT 吗?刚好可以做个内部分享 。嘿嘿嘿
yaocai321 小成 2024-10-11 14:30:05
提问,跟 Sentry 的 replays 比较起来,有什么优势呢。
replays 还只是 Sentry 其中一个能力。
rowG 小成 2024-10-11 15:20:01
点进仓库一看原来早已被我 star🤣
123下一页
返回顶部