答案:通过window.onerror和addEventListener捕获JavaScript错误,结合上下文信息与用户行为,利用sendBeacon上报并节流,配合Source Map还原堆栈,实现稳定高效的前端监控。

设计一个前端监控系统来捕获 JavaScript 错误,核心在于全面收集运行时异常、结构化上报数据,并确保不影响用户正常使用。关键点是利用浏览器提供的全局错误捕获机制,结合自定义日志和性能数据,实现稳定、低损耗的监控能力。
1. 捕获全局JavaScript错误
通过监听全局事件,可以捕获未被处理的脚本错误和资源加载问题。
window.onerror:捕获同步 JavaScript 运行时错误,包括跨域脚本错误(需配合 CORS 和 script 标签 crossorigin 属性) window.addEventListener(‘error’):可捕获更广泛的资源加载错误,如 img、script 加载失败 window.addEventListener(‘unhandledrejection’):专门用于捕获未处理的 Promise 异常,避免异步错误静默失败示例代码:
window.onerror = function(message, source, lineno, colno, error) { reportError({ type: 'runtime', message: error?.message || message, stack: error?.stack, file: source, line: lineno, column: colno, url: location.href, userAgent: navigator.userAgent }); return true; // 阻止默认上报};window.addEventListener('unhandledrejection', event => { reportError({ type: 'promise', message: event.reason?.message || 'Unknown promise rejection', stack: event.reason?.stack, url: location.href });});
2. 收集上下文信息以辅助定位
单纯记录错误信息不足以排查问题,需附加用户环境和行为上下文。
用户设备信息:浏览器类型、版本、操作系统、屏幕分辨率 网络状态:有效连接类型(如 4g、wifi)、RTT 延迟 页面状态:当前 URL、referrer、DOMReady 或 load 是否完成 自定义标记:用户 ID(匿名化)、路由路径、操作流程标记(如“点击提交按钮后”)建议将上下文封装为统一对象,在上报时合并:
function getContext() { return { url: location.href, referrer: document.referrer, timestamp: Date.now(), viewport: `${window.innerWidth}x${window.innerHeight}`, connection: navigator?.connection?.effectiveType, readyState: document.readyState };}
3. 实现错误上报与节流控制
频繁上报可能影响性能或打满服务端接口,需合理控制上报频率和时机。
立即学习“Java免费学习笔记(深入)”;
使用 navigator.sendBeacon 在页面卸载前发送数据,保证日志不丢失 对重复错误进行去重或限频,例如相同错误5分钟内只上报一次 设置采样率,高流量场景下按比例采集(如10%),避免数据爆炸 离线缓存:在 localStorage 中暂存错误,下次页面打开时补发基础上报函数示例:
function reportError(data) { const payload = JSON.stringify({ ...data, ...getContext() }); if (navigator.sendBeacon) { navigator.sendBeacon('/log', payload); } else { fetch('/log', { method: 'POST', body: payload, keepalive: true // 确保请求在页面关闭后仍可完成 }); }}
4. 结合Source Map还原堆栈
生产环境通常使用压缩后的 JS 文件,原始堆栈中的行列号无法直接对应源码。
构建时生成 Source Map 并部署到服务器 监控后台接收错误后,根据文件名和行列号查询 Source Map,还原原始文件位置和代码片段 注意安全:Source Map 不应暴露在公开路径下,可通过鉴权接口提供查询
基本上就这些。一个实用的前端错误监控系统不需要一开始就非常复杂,重点是把错误捕获全、带上足够上下文、稳定上报,再逐步加入聚合分析、报警规则等功能。关键是让开发者能快速定位问题,而不是制造噪音。
以上就是如何设计一个前端监控系统以捕获JavaScript错误?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1528032.html
微信扫一扫
支付宝扫一扫