# sunshine-track **Repository Path**: frontend-monitoring/sunshine-track ## Basic Information - **Project Name**: sunshine-track - **Description**: ` sunshine-track ` 应用于前端监控,借鉴了 [web-see](https://github.com/xy-sea/web-see#) 的监控设计。` sunshine-track ` 基于 ` 行为上报 `,实现了 ` 用户行为、错误监控、页面跳转、页面白屏检测、页面性能检测 `等上报功能。适用于 ` Vue、React、Angular ` 等框架 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 3 - **Created**: 2024-01-04 - **Last Updated**: 2025-04-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 简介 ` sunshine-track ` 应用于前端监控,借鉴了 [web-see](https://github.com/xy-sea/web-see#) 的监控设计。` sunshine-track ` 基于 ` 行为上报 `,实现了 ` 用户行为、错误监控、页面跳转、页面白屏检测、页面性能检测 `等上报功能。适用于 ` Vue、React、Angular ` 等框架 ## 功能 ` sunshine-track `具备以下功能: - ✅ 用户行为上报:包括 ` 点击、跳转页面、跳转页面记录数组、请求 ` 等 - ✅ 用户手动上报:提供 ` Vue 自定义指令` 以及` add、report `函数,实现用户手动上报 - ✅ 自定义上报:提供 ` 格式化上报数据、自定义上报函数、自定义决定上不上报 ` 等配置项,更灵活地上报数据 - ✅ 请求数据上报:提供 ` 检测请求返回、过滤请求 ` 等配置项,让用户决定上报哪些请求数据 - ✅ 上报方式:提供 ` 上报方式 ` 配置项,用户可选择 ` img、http、beacon ` 三种方式,` http `方式又支持 ` xhr、fetch ` 两种,且支持 ` 自定义headers ` - ✅ 上报数据缓存:可配置 ` 本地缓存、浏览器本地缓存、IndexedDB ` 三种方式 - ✅ 上报数据阈值:可配置上报数据 ` 阈值 ` ,达到 ` 阈值 ` 后进行上报操作 - ✅ 全局点击上报:可通过配置 ` 选择器、元素文本 `,对全局DOM节点进行点击上报 - ✅ 页面的性能检测,包括 ` 白屏、FP、FCP、LCP、CLS、TTFB、FID ` 等 ## 上报数据格式 选项 | 描述 | 类型 | | ------ | ----------- | ----------- | | ` uuid `   | 上报数据的id | ` string ` | | ` type `  | 上报数据的类型 | ` string ` | | `data `  | 上报数据 | ` any ` | | `time `   | 上报时间 | ` number ` | | `status `   | 上报状态 | ` string ` | | `domain `   | 当前域名 | ` string ` | | `href `   | 当前网页路径 | ` string ` | | `userAgent `   | 当前user-agent | ` string ` | | ` deviceInfo `   | 设备的相关信息 | ` object ` | ## 安装 ```js // npm npm i sunshine-track // yarn yarn add sunshine-track // pnpm pnpm i sunshine-track ``` ## 使用 ```js import Track from 'sunshine-track' const options = { projectKey: 'test-project', // 项目的key userId: 'digger', // 用户id report: { url: 'http://example.com/report', // 上报url reportType: 'img' // 上报方式 }, switchs: { // 上报数据开关 xhr: true, // xhr请求 fetch: true, // fetch请求 error: true, // 报错 hashchange: true, // hash变化 history: true, // history变化 whitescreen: true // 白屏 performance: true // 页面性能 }, } // Vue app.use(Track, options) // React、Angular Track.init(options) ``` ### 全局点击监听 可以通过配置` globalClickListeners `来对于某些DOM节点进行点击监听上报 ```js app.use(Track, { ...options, globalClickListeners: [ { selector: '.cla', // 选择器 data: 'report data1' // 上报数据 }, { elementText: 'report2', // 元素文本 data: 'report data2' }, { selector: '.r', // 选择器 + 元素文本 elementText: 'report3', data: 'report data3' } ] }) click => report data1 click => report data2 click => report data3 ``` ### 配置上报阈值 上报分为几种: - 用户行为上报:点击、跳转页面、请求,这些上报数据会缓存着,当达到阈值时再进行上报 - 错误上报:请求报错、代码报错、异步错误,这些是立即上报 - 页面性能上报:白屏、FP、FCP、LCP、CLS、TTFB、FID,这些是立即上报 用户行为上报的阈值默认是 ` 10 `,支持自定义 ` maxEvents ` ```js app.use(Track, { ...options, maxEvents: 30 // 可自定义阈值 }) ``` ### 配置缓存方式 如果你想要避免用户重新打开网页之后,造成上报数据的丢失,那么你可以配置缓存方式,通过配置` cacheType `: - normal:默认,本地缓存 - storage:浏览器 localStorage 本地缓存 - db:浏览器 IndexedDB 本地缓存 ```js app.use(Track, { ...options, cacheType: 'storage' // 配置缓存方式 }) ``` ### 打印上报数据 可以通过配置 ` log ` ,开启打印上报数据 ```js app.use(Track, { ...options, log: true // 开启上报数据打印 }) ``` ### 灵活上报请求数据 请求也是一种行为,也是需要上报的,或许我们有这个需求 - 过滤:某些请求我们并不想上报 - 自定义校验请求响应数据:每个项目的响应规则可能都不同,我们想自己判断哪些响应是成功,哪些是失败 ```js app.use(Track, { ...options, filterHttpUrl: (url, method) => { // 过滤url return url === 'xxx.com' && method === 'post' }, checkHttpStatus: (data) => { // 判断响应数据是否是成功 return data.status === 200 } }) ``` ### 格式化上报数据、自定义决定上不上报、自定义上报 如果你想在数据上报之前,格式化上报数据的话,可以配置` report `中的` format ` ```js app.use(Track, { ...options, report: { url: 'http://example.com/report', reportType: 'img', format: (data) => { // 格式化上报数据 const v = data // format v return v } } }) ``` 如果你想要自己决定某次上报的时候,进行取消,可以配置` report `中的` isReport ` ```js app.use(Track, { ...options, report: { url: 'http://example.com/report', reportType: 'img', isReport: (data) => { // 返回一个布尔值决定要不要上报 return true } } }) ``` 如果你不想用这个库自带的上报功能,想要自己上报,可以配置` report `中的` customReport ` ```js app.use(Track, { ...options, report: { url: 'http://example.com/report', reportType: 'img', customReport: (data) => { // 自定义上报 // custom report } } }) ``` ### 手动上报 手动上报分为三种: - 手动添加上报数据:添加到缓存中,等到达到阈值再上报 - 手动执行数据上报:立即上报 - 自定义指令上报:如果你是 Vue 项目,支持指令上报 ```js import Track from 'sunshine-track' // 手动添加数据 const addTrack = () => { Track.add({ type: 'click', data: 'add track' }) } // 手动上报数据 const reportTrack = () => { Track.report({ type: 'click', data: 'report track' }) } ``` 如果你是 Vue 项目,可以使用指令` v-track `进行上报 ```html // 首次上报 // 点击上报 ``` ## 配置参数 选项 | 描述 | 类型 | 默认 | | ------ | ----------- | ----------- | ----------- | | ` projectKey `   | 项目key | ` string ` | - | | ` userId `   | 用户id | ` string ` | - | | ` report.url `   | 上报url | ` string ` | - | | ` report.reportType `  | 上报方式 | ` img、http、beacon ` | ` http ` | | ` report.headers `  | 上报自定义请求头,` http ` 上报模式生效 | ` object ` | - | | ` report.format `  | 上报数据格式化 | ` function ` | - | | ` report.customReport `  | 自定义上报 | ` function ` | - | | ` report.isReport `  | 自定义决定上不上报 | ` function ` | - | | ` cacheType `   | 数据缓存方式 | ` normal、storage、db ` | ` normal ` | | ` globalClickListeners `   | 上报状态 | ` array ` | - | | ` log `   | 当前域名 | ` boolean ` | ` false ` | | ` maxEvents `   | 上报阈值 | ` number ` | ` 10 ` | | ` historyUrlsNum `   | 需要记录的url跳转数组 | ` number ` | ` 3 ` | | ` checkHttpStatus `   | 判断响应数据 | ` function ` | - | | ` filterHttpUrl `   | 过滤上报请求数据 | ` function ` | - | | ` switchs.xhr `   | 是否开启xhr请求上报 | ` boolean ` | ` false ` | | ` switchs.fetch `   | 是否开启fetch请求上报 | ` boolean ` | ` false ` | | ` switchs.error `   | 是否开启错误上报 | ` boolean ` | ` false ` | | ` switchs.whitescreen `   | 是否开启白屏检测上报 | ` boolean ` | ` false ` | | ` switchs.hashchange `   | 是否开启hash变化请求上报 | ` boolean ` | ` false ` | | ` switchs.history `   | 是否开启history变化上报 | ` boolean ` | ` false ` | | ` switchs.performance `   | 是否开启页面性能上报 | ` boolean ` | ` false ` |