首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
首页标签前端性能监控

#前端性能监控

Web 和小程序等前端真实体验监控服务

aegis 自定义上报的监控平台上展示的msg (区别name)可以改变吗?

前端 node.js里造成内存泄露的具体场景有哪些?

有不少错误日志是 “Script error. @ (:0:0) 没啥信息” 这种是第三方 JS 异常吗?可以通过配置过滤掉吗?

已采纳
Script error. 也被称为跨域错误,当网站请求并且执行一个非本域名下的脚本的时候,如果跨域脚本发生错误,就有可能抛出这个错误。由于应用中,我们的脚本都是放在 CDN 上的,因此这种错误最为常见。 其实这并不是一个 JavaScript Bug。但出于安全考虑,浏览器会刻意隐藏其他域的 JS 文件抛出的具体错误信息,这样做可以有效避免敏感信息无意中被不受控制的第三方脚本捕获。因此浏览器只允许同域下的脚本捕获具体错误信息,而其他脚本只知道发生了一个错误,但无法获知错误的具体内容。更多信息,请参见 Webkit源码。 具体解决方式: 步骤1:资源添加 crossorigin 属性 步骤2:CDN 添加 cors 响应头,这个基本是 cdn 默认的,所以实际上我们并不需要做什么。 window.onerror 中只能捕获 Script error.,但是 try catch 中却能打印详细的错误栈。 如果不想解决,只想直接屏蔽,可以参考下一个问题,不上报特殊日志。... 展开详请

对于一些特殊的日志,不想上报到 RUM,可以怎处理?

已采纳

SDK 提供一个 hook 来帮助用户在日志上报前对日志进行屏蔽和修改,可以使用 beforeRequest,返回 false 就可以不上报该条日志,返回修改过后的 data 就可以实现对上报数据的修改。

beforeRequest

SDK 如何获取网络类型?为什么我的网络类型不正确?

已采纳
若 UA 里面有 NetType ,则 UA 是从 NetType 获取的。若没有,您用的是 navigator.connection.effectiveType || navigator.connection.type,effectiveType,则会根据您的网速推算出的一个类型,并不是实际类型。... 展开详请

为什么 SDK 上报的接口请求耗时跟 network 里面的时间不一致?

已采纳

SDK 通过劫持 fetch 和 xhr 的方式实现对接口的测速,在请求前和请求后分别进行打点测速,因为 JS 计算时间差的逻辑依赖 js 主线程执行,如果 end 时间执行的时候有线程阻塞,会导致实际计算的时长要大于浏览器 network 时长。

为什么上报的网络类型跟实际网络类型不符合,例如当前用户使用的是 wifi,上报的却是 4G?

已采纳
我们目前通过 UA 里面的 NetType 和 navigator.connection.effectiveType 获取网络类型,前者依赖浏览器注入网络信息到 UA,后者是浏览器提供的 “等效网络类型”,并不代表真实的网络类型。navigator.connection.effectiveType 这个 API 目前还存在兼容性问题,IOS 暂不支持,所以会被识别为未知。... 展开详请

我开启了 SPA 参数,但是页面之间跳转的时候,为什么没有上报页面性能呢?

已采纳

SPA 页面之间的跳转,本质上只是一段 JS 代码的执行,首屏探测的是从用户浏览器发起请求到页面可见元素渲染完成的时间,因此没有办法计算首屏。

日志里面上报了非常多 AJAX 异常,状态码是 0 ,这个可能是什么原因导致的?

已采纳
HTTP 接口的 status 是 0,有以下几种可能:超时,abort,cancel,跨域。 开发者本地调试可能没有发现这种错误,但是在用户侧却能经常发生,这个是什么原因呢?因为用户侧可能随时离开页面,或者因为网络问题把某次 HTTP 请求中断了,这种情况就会发生 status 为 0 的情况。 虽然 status 为 0 有多种情况,但是我们也可以根据日志里面的信息看出一些端倪。例如:上述截图里面的耗时都非常小,而且发生的用户比较集中,因此可以判断该接口是浏览器插件屏蔽掉了,这种情况常见于一些数据上报的接口。如果接口出现比较随机,耗时也不高,整体量也不算大,这种情况,abort 和 cancel 的概率比较大,经常发生于用户离开页面,刷新页面,接口没有请求完成的情况。如果看到 duration 非常长,那超时的可能性就比较大了,开发者也可以查看自己接口的超时时间来进行对比。至于跨域的情况,可以检查一下后台的业务逻辑是否正常,而 cancel 的情况,多半是前端业务控制的,也可以看下具体的业务逻辑。 因为用户侧可能随时离开页面,或者因为网络问题把某次 HTTP 请求中断了,这种情况就会发生 status 为 0 的情况。 虽然 status 为 0 有多种情况,但我们也可以根据日志里面的信息看出一些问题。例如上述截图里面的耗时都非常小,而且发生的用户比较集中,因此可以判断该接口是浏览器插件屏蔽掉了,这种情况常见于一些数据上报的接口。 如果看到 duration 非常长,那超时的可能性就比较大了,开发者也可以查看自己接口的超时时间来进行对比。至于跨域的情况,可以检查一下后台的业务逻辑是否正常,而 cancel 的情况,多半是前端业务控制的,也可以看下具体的业务逻辑。 SDK 通过从用户接口的返回值中的第一层和第二层中获取 code, ret, retcode, errcode 这几个参数中的任意一个,作为接口业务的返回码(区别于HTTP的状态码),默认这个返回码等于0接口为正常。 业务对于返回码有不同的定义,开发者可以通过 api 参数下的 retCodeHandler 函数对其进行矫正,retCodeHandler 函数返回 isErr 和 code 两个值。isErr 用来计算接口返回值的成功率,code 用来统计接口的返回码占比。当该函数返回 isErr 为 true 的时候,这个接口的信息会同时上报到历史日志里面的“接口返回码异常”,方便开发者定位接口问题。除此之外,还有很多非业务的接口,如一些数据上报,是不满足这些规范的,建议可以通过 beforeRequest 进行修正。 Aegis sdk 根据 DOM 变化记录首屏,如果您的 sdk 引入较晚,或者初始化较晚,可能会出现无法获取首屏的情况。如果出现这种情况的话,建议可以试着把 sdk 引入和初始化放在更前面,如 head 里,然后再观察一下数据。 有可能是因为初始化 Aegis 的时候这个接口已经发出去了。Aegis web sdk 目前只劫持了 fetch 和 xhr 两种发送请求的方式,如果您的请求是其他的方式,例如 beacon,就无法监控到。Aegis 小程序 sdk 也是通过劫持 wx.request 实现的,如果在引入 Aegis 之前,wx.request 已经被修改了,也可能监控不到,建议尽早引入和初始化 Aegis sdk。 总体来说,页面首屏和页面完全加载时间是正相关的。大多数情况下,用户的首屏时间是小于页面完全加载的。Aegis SDK 根据用户页面DOM变化计算首屏时间,如果用户页面完全加载后,还继续发生DOM变化,就有可能发生首屏时间晚于页面完全加载的情况。在服务端直出场景,瀑布图会出现首屏时间大于dom解析的情况,这是由于移动端设备兼容性问题,有些设备无法获取到DNS查询、TCP连接、SSL建连时间,这三个指标汇总后的平均值偏小,导致除了首屏时间外的其他指标都往左偏移。 接直出的页面需要注意两件事情: 1. aegis-web-sdk 只能运行在浏览器环境,所以记得在服务端不要执行初始化操作。2. SSR 页面初始化完成比较早,所以如果把 aegis-sdk 初始化放在比较靠后的地方(body里面或者最后)可能会导致 sdk 无法获取到页面首屏的情况。建议 SSR 页面使用 script 标签引入 aegis sdk,并且放在head中初始化,解决上述两个问题。 aegis sdk 上报数据的时候,默认只上报了接口的 url,没有上报参数,对于这种情况,我们提供 reportApiSpeed.urlHandler 钩子函数对上报内容进行修正,用户可以根据 urlHandler 参数里面的内容进行优化。 例如:腾讯云控制台上的接口,名称统一都是 console.cloud.tencent.com/cgi/capi,接口真实名称通过参数里面的 cmd 确定,这样的情况,优化方式如下:... 展开详请
HTTP 接口的 status 是 0,有以下几种可能:超时,abort,cancel,跨域。 开发者本地调试可能没有发现这种错误,但是在用户侧却能经常发生,这个是什么原因呢?因为用户侧可能随时离开页面,或者因为网络问题把某次 HTTP 请求中断了,这种情况就会发生 status 为 0 的情况。 虽然 status 为 0 有多种情况,但是我们也可以根据日志里面的信息看出一些端倪。例如:上述截图里面的耗时都非常小,而且发生的用户比较集中,因此可以判断该接口是浏览器插件屏蔽掉了,这种情况常见于一些数据上报的接口。如果接口出现比较随机,耗时也不高,整体量也不算大,这种情况,abort 和 cancel 的概率比较大,经常发生于用户离开页面,刷新页面,接口没有请求完成的情况。如果看到 duration 非常长,那超时的可能性就比较大了,开发者也可以查看自己接口的超时时间来进行对比。至于跨域的情况,可以检查一下后台的业务逻辑是否正常,而 cancel 的情况,多半是前端业务控制的,也可以看下具体的业务逻辑。 因为用户侧可能随时离开页面,或者因为网络问题把某次 HTTP 请求中断了,这种情况就会发生 status 为 0 的情况。 虽然 status 为 0 有多种情况,但我们也可以根据日志里面的信息看出一些问题。例如上述截图里面的耗时都非常小,而且发生的用户比较集中,因此可以判断该接口是浏览器插件屏蔽掉了,这种情况常见于一些数据上报的接口。 如果看到 duration 非常长,那超时的可能性就比较大了,开发者也可以查看自己接口的超时时间来进行对比。至于跨域的情况,可以检查一下后台的业务逻辑是否正常,而 cancel 的情况,多半是前端业务控制的,也可以看下具体的业务逻辑。 SDK 通过从用户接口的返回值中的第一层和第二层中获取 code, ret, retcode, errcode 这几个参数中的任意一个,作为接口业务的返回码(区别于HTTP的状态码),默认这个返回码等于0接口为正常。 业务对于返回码有不同的定义,开发者可以通过 api 参数下的 retCodeHandler 函数对其进行矫正,retCodeHandler 函数返回 isErr 和 code 两个值。isErr 用来计算接口返回值的成功率,code 用来统计接口的返回码占比。当该函数返回 isErr 为 true 的时候,这个接口的信息会同时上报到历史日志里面的“接口返回码异常”,方便开发者定位接口问题。除此之外,还有很多非业务的接口,如一些数据上报,是不满足这些规范的,建议可以通过 beforeRequest 进行修正。 Aegis sdk 根据 DOM 变化记录首屏,如果您的 sdk 引入较晚,或者初始化较晚,可能会出现无法获取首屏的情况。如果出现这种情况的话,建议可以试着把 sdk 引入和初始化放在更前面,如 head 里,然后再观察一下数据。 有可能是因为初始化 Aegis 的时候这个接口已经发出去了。Aegis web sdk 目前只劫持了 fetch 和 xhr 两种发送请求的方式,如果您的请求是其他的方式,例如 beacon,就无法监控到。Aegis 小程序 sdk 也是通过劫持 wx.request 实现的,如果在引入 Aegis 之前,wx.request 已经被修改了,也可能监控不到,建议尽早引入和初始化 Aegis sdk。 总体来说,页面首屏和页面完全加载时间是正相关的。大多数情况下,用户的首屏时间是小于页面完全加载的。Aegis SDK 根据用户页面DOM变化计算首屏时间,如果用户页面完全加载后,还继续发生DOM变化,就有可能发生首屏时间晚于页面完全加载的情况。在服务端直出场景,瀑布图会出现首屏时间大于dom解析的情况,这是由于移动端设备兼容性问题,有些设备无法获取到DNS查询、TCP连接、SSL建连时间,这三个指标汇总后的平均值偏小,导致除了首屏时间外的其他指标都往左偏移。 接直出的页面需要注意两件事情: 1. aegis-web-sdk 只能运行在浏览器环境,所以记得在服务端不要执行初始化操作。2. SSR 页面初始化完成比较早,所以如果把 aegis-sdk 初始化放在比较靠后的地方(body里面或者最后)可能会导致 sdk 无法获取到页面首屏的情况。建议 SSR 页面使用 script 标签引入 aegis sdk,并且放在head中初始化,解决上述两个问题。 aegis sdk 上报数据的时候,默认只上报了接口的 url,没有上报参数,对于这种情况,我们提供 reportApiSpeed.urlHandler 钩子函数对上报内容进行修正,用户可以根据 urlHandler 参数里面的内容进行优化。 例如:腾讯云控制台上的接口,名称统一都是 console.cloud.tencent.com/cgi/capi,接口真实名称通过参数里面的 cmd 确定,这样的情况,优化方式如下:

接入 SDK 后没有数据是怎么回事?

已采纳

接口请求报错 403 要怎么处理?

已采纳
接口403一般是因为页面域名校验失败导致的,可以检查应用创建时候设置的域名跟实际上报的域名是否一致。如果应用不需要校验,域名可以填 *。 用户在 RUM 上创建应用后,会得到一个长度为 18 位的字符串,这个字符串为上报 ID,new Aegis 的时候传入的 ID 就是这个上报 ID。如果这个 ID 不正确,也会报403。 Aegis 初始化... 展开详请

应用接入 SDK 后,为什么会有一个

已采纳

webvitals 中 CLS 的值必须是页面可见性改变的时候才计算的,用户刷新页面的时候,如果选中了 Preserve log,就会有一条请求处理发送中,但恰好被页面刷新给 cancel 掉,就出现这种情况。对用户和数据没有影响,可以忽略。

代码中

已采纳

在 VUE 框架中,Vue.config.errorHandler 会主动捕获错误,可以通过主动捕获再调用 aegis.error() 进行上报。

Aegis SDK 的作用是什么?

已采纳

Aegis SDK 是嵌入到用户页面或者使用 npm 安装到用户代码中的上报 SDK,主要负责采集用户侧性能和质量数据。

RUM 支持私有化部署吗?

已采纳

私有化方案目前还在开发中,敬请期待。

前端性能监控目前支持了哪些平台?提供了什么平台的 SDK?

已采纳

目前支持 Web、Hippy、小程序(微信、QQ)和 React Native 等平台的数据上报,更多 SDK 的支持工作也在进行中。

什么是离线日志?

已采纳

离线日志是把大部分日志存储在用户本地,只有在需要使用的时候才把日志上报到监控平台的解决方案。

RUM 根据哪个字段来计算 UV ?

已采纳

Aegis SDK 为每个用户独立生成一个 aid 作为用户(设备)的唯一标识,存储在浏览器的 localStorage,用于计算 UV。aid 不受登录态影响,只有用户清理浏览器缓存 aid 才会更新。

RUM 为什么不根据用户 UIN 来计算 UV ?

已采纳

因为当前用户没有登录,则没有 UIN 值,并且 UIN 值由开发者设置,可靠性比较低,也无法将用户登录前后的状态统一。

日志类型里面的接口请求日志是什么?

已采纳

接口请求日志是用户的接口的请求和返回的内容。一般只有白名单用户才会上报接口请求日志,但是如果一个用户在使用过程中,中途发生 JS 错误,我们会把这个用户之前一段时间的接口信息也上报到服务端,方便开发者查找和分析问题。

领券