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

设计一个前端监控系统来捕获 JavaScript 错误,核心在于全面收集运行时异常、结构化上报数据,并确保不影响用户正常使用。关键点是利用浏览器提供的全局错误捕获机制,结合自定义日志和性能数据,实现稳定、低损耗的监控能力。
通过监听全局事件,可以捕获未被处理的脚本错误和资源加载问题。
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
});
});
单纯记录错误信息不足以排查问题,需附加用户环境和行为上下文。
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
};
}
频繁上报可能影响性能或打满服务端接口,需合理控制上报频率和时机。
立即学习“Java免费学习笔记(深入)”;
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 // 确保请求在页面关闭后仍可完成
});
}
}
生产环境通常使用压缩后的 JS 文件,原始堆栈中的行列号无法直接对应源码。
基本上就这些。一个实用的前端错误监控系统不需要一开始就非常复杂,重点是把错误捕获全、带上足够上下文、稳定上报,再逐步加入聚合分析、报警规则等功能。关键是让开发者能快速定位问题,而不是制造噪音。
以上就是如何设计一个前端监控系统以捕获JavaScript错误?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号