本文介绍Web/H5监控使用过程中遇到的常见问题、可能原因和解决方法等。
JS错误
1. 部分上报错误信息为“Script error”,没有具体字段信息:
由于浏览器安全限制,跨域脚本出现的报错无法被捕获,只显示message为“Script error”。解决方法是在<script>标签上加上crossorigin属性,参考Script-error。
2. 部分“unhandledrejection”类型的报错没有其他相关信息:
若代码存在Promise中调用reject传入空参数或一个字符串,则插件无法采集到错误堆栈等其他相关信息。
3. 有些报错没有异常堆栈:
部分场景下浏览器不会返回异常堆栈,无法采集,常见情况有:
上述两种场景。
语法错误时,在脚本解析就会报错,没有堆栈,此时错误名称为:SyntaxError。
浏览器插件导致的报错。
白屏
1. 对于较复杂的页面,每次打开都会上报白屏:
白屏插件配置中,默认配置了timeout为3秒的白屏检测时机,即当页面开始加载3秒后,会进行白屏检测判断是否在加载阶段出现白屏。若是较为复杂的页面,需要更长时间加载,则会出现检测时页面仍在加载,从而上报白屏。
对于这类页面,可以根据实际经验,配置白屏插件的timeout值(SDK API),从而监控页面是否未能在预期时间内加载完成、出现白屏问题。
页面性能
1. 部分页面,上报指标中LOAD、TTFB等指标始终为空:
在页面存在重定向或相应子页面不存在的情况下,页面会自动跳转至网站默认主页,导致部分页面的加载时间(Load)、首字节时间(TTFB)等指标数据为空。
2. SPA、微应用等场景部分指标为空:
目前该类应用仅支持首次加载时相关性能采集,应用内部页面切换时的加载性能待后续支持。
请求
1. 控制台上报HTTP状态码出现0:
当遇到fetch请求失败时,无法获取状态码,此时会将状态码设置为0。
跨域请求失败时,返回的错误状态码本身即为0。
请求超时、abort等一些情况下,返回的错误码也为0。
2. 部分请求未被采集到:
若fetch请求的method=HEAD或mode=no-cors会跳过采集,jsonp类型的请求暂不支持。
静态资源
1. 控制台上报HTTP状态码出现0或者--:
0表示未知状态码。由于跨域请求等原因,无法获取状态码(查看MDN参考文档),此时展示状态码值为0。--同0,且当确定为错误请求时,将状态码置为--。
2. 一些资源加载异常,但HTTP状态码为200:
可能出现资源类型不匹配,例如一个<img>标签加载了一个HTML文档,或是写了一个空的src属性,此时浏览器会将空地址解析成当前主文档的URL。对于这类资源,虽然状态码为200,依然会归为错误加载。
3. 发现一些资源上报量大,且资源uri类似请求:
可能接入了一些其它三方插件,通过资源加载的方式进行网络请求。这些插件在运行过程中发送请求,则会被当作资源大量上报。若无需监控其资源加载情况,可以对特定资源进行SDK上报配置,以免预期外的事件量开销。
其它事项
1. 线上环境开启debug日志:
当线上环境数据采集有异常时,需要通过SDK debug日志进行问题排查。在浏览器控制台中执行如下代码,可以手动开启debug日志。
localStorage.setItem('emas_apm_log_debug', 'debug')