这是我参与「第五届青训营 」笔记创作活动的第12天
前言
前端监控是一种技术,它用于跟踪和报告Web前端应用程序的性能和错误。它可以帮助开发人员发现并解决问题,提高用户体验。前端监控通常包括跟踪加载时间、JavaScript错误、AJAX请求和其他前端指标。
1.前端监控为什么那么重要以及前端监控到底监控了什么?
前端监控对于Web应用程序的重要性有以下几个方面:
- 用户体验:前端监控可以帮助开发人员了解Web应用程序的性能和可用性,以提高用户体验。
- 错误检测:前端监控可以帮助开发人员发现和诊断JavaScript错误、网络问题和其他前端问题,以提高应用程序的稳定性。
- 数据分析:前端监控可以收集有关用户行为和应用程序性能的数据,以帮助开发人员了解应用程序的使用情况和可用性。
- 解决问题:前端监控可以帮助开发人员快速诊断和解决问题,以提高应用程序的可靠性。
关于前端监控监控的内容,它可以监控的内容包括但不限于:
- 页面加载时间:测量页面从请求到完成加载的时间。
- JavaScript错误:监控页面上的JavaScript错误,以诊断问题。
- 网络请求:监控页面上的网络请求,以了解数据加载情况。
- 资源加载:监控页面上的资源加载情况,以诊断性能问题。
- 用户行为:监控用户在页面上的行为,以了解用户体验和行为模式。
2.各类前端监控中的以用户为中心的性能指标
- 首屏时间 (First Contentful Paint, FCP): 这个指标的单位是毫秒(ms),用于表示浏览器第一次呈现内容的时间。通常,较短的 FCP 值表示页面的首次加载速度较快,更高的用户体验。
- 首次有效绘制 (First Meaningful Paint, FMP): 这个指标的单位也是毫秒(ms),用于表示页面上第一个有实际意义的元素呈现的时间。较短的 FMP 值表示页面更快地呈现关键内容,提高了用户体验。
- 交互时间 (Time to Interactive, TTI): 这个指标的单位是毫秒(ms),表示用户第一次可以在页面上进行交互的时间。较短的 TTI 值意味着页面更快地变得交互,用户可以更快地进行操作,提高了用户体验。
- 网页加载时间 (Load Time): 这个指标的单位是毫秒(ms),表示页面加载完成的时间。较短的 Load Time 表示页面加载速度更快,提高了用户体验。
- 白屏时间 (Time to First Byte, TTFB): 这个指标的单位是毫秒(ms),TTFB 表示从用户发出请求到服务器第一次响应的时间,它包括了 DNS 查询、TCP 连接、请求的处理等的时间。白屏时间越短,表明页面内容的发送速度更快,可以更快地呈现给用户,从而提升用户体验。
3.常见的异常
3.1静态资源错误
静态资源错误指的是在前端页面加载过程中,因为某些原因,未能正确加载静态资源(如图片、CSS、JS等)导致的错误。这些错误会影响到页面的加载速度,以及页面的外观和功能,因此是需要重视的问题。
通常情况下,对于静态资源错误,我们可以采取以下处理方法:
- 检查静态资源文件的路径是否正确,是否存在错误的文件名或路径。
- 确保服务器上的静态资源文件可以正常访问,并且不受任何限制。
- 对于图片文件,检查图片是否正确的格式,以及是否已经损坏。
- 使用浏览器的开发者工具检查网络请求,确定具体的错误原因。
以下是一个通过使用 try-catch 语句来捕获静态资源加载错误的示例代码:
php
<img id="myImage" src="image.jpg">
<script>
try {
var image = document.getElementById('myImage');
image.addEventListener('error', function() {
console.error('图片加载失败!');
});
} catch (error) {
console.error('静态资源错误:', error);
}
</script>
- 在代码中通过
document.getElementById('myImage')获取页面中的图片元素; - 为该图片元素绑定一个 'error' 事件监听器,在图片加载失败时触发;
- 在 'error' 事件监听器中,打印错误信息
console.error('图片加载失败!'); - 如果任何错误发生,将在 catch 块中打印该错误信息
console.error('静态资源错误:', error)。
这段代码的功能是监听图片的加载状态,在图片加载失败时,将错误信息打印到控制台,从而方便排查问题。
3.2请求异常问题
前端监控下的请求异常是指在前端请求后端数据过程中发生的错误。请求异常的常见状态码有:
- 400 Bad Request:请求的格式不正确
- 401 Unauthorized:请求需要用户验证
- 403 Forbidden:服务器拒绝请求
- 404 Not Found:服务器找不到请求的资源
- 500 Internal Server Error:服务器内部错误
通常情况下,我们可以通过使用 try-catch 语句,结合 fetch API 和 Promises 来捕获请求异常,并进行相应的错误处理。以下是一个示例代码:
javascript
fetch('https://api.example.com/data')
.then(response => {
if (!response.ok) {
throw new Error(`请求异常,状态码:${response.status}`);
}
return response.json();
})
.then(data => {
console.log(data);
})
.catch(error => {
console.error('请求异常:', error);
});
这串代码使用 fetch API 向后端发送数据请求,如果请求成功且状态码为 200,则将请求到的 JSON 数据打印在控制台中;如果请求失败或状态码不为 200,则将请求异常信息打印在控制台中。
3.3JS错误
JS 错误是指 JavaScript 代码执行过程中出现的错误。前端监控中需要监控 JS 错误,因为它们很可能导致页面的不正常行为或故障。
通常情况下,我们可以使用 try-catch 语句来捕获 JS 错误,从而捕获错误信息并记录日志。如下代码:
javascript
try {
// 代码块
} catch (error) {
console.error('JS 错误:', error);
}
还可以使用 window.onerror 事件来监听所有页面的 JS 错误:
javascript
window.onerror = function(message, source, lineno, colno, error) {
console.error('JS 错误:', message, '\n', error);
};
还可以使用前端监控工具,如 Sentry、Rollbar 等,它们会自动捕获 JS 错误并将错误信息发送到后台服务器,方便我们实时监控和跟踪错误。
3.4白屏异常
白屏异常指的是用户在访问一个网页时,在网页没有正确显示内容之前等待了过长的时间,从而导致白屏的情况。这个问题通常是由长时间的页面加载或资源加载导致的。
处理白屏异常的方法:
- 优化页面加载速度:优化页面代码,使用CDN,图片压缩等方法可以减少页面加载时间。
- 使用预加载:预加载能够保证页面显示之前已经加载完必要的资源。
- 设置合适的加载动画:在页面加载过程中,可以设置一个合适的加载动画,以此来规避白屏现象。
以下是一个使用 JavaScript 和 CSS 实现的加载动画的示例代码:
HTML:
php
<div class="loader">
<div class="spinner"></div>
</div>
CSS:
css
.loader {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: #f2f2f2;
display: flex;
justify-content: center;
align-items: center;
z-index: 999;
}
.spinner {
border: 4px solid #f3f3f3;
border-top: 4px solid #3498db;
border-radius: 50%;
width: 50px;
height: 50px;
animation: spin 1s linear infinite;
}
@keyframes spin