监控这个词对于前端,个人觉得有三个定义,分别是“性能监控”、“异常监控”、“数据监控”
性能监控可以让我们更好的监控当前应用的性能情况,然后对性能情况反馈去做优化,性能会影响到用户体验,而常见的性能指标我们能通过浏览器Performance里面看到
允许访问当前页面性能相关的信息,performance对象中常见的属性
通过 window.performance 查看?
通过Performance的timing属性计算一些常见的指标
const timing = performance.timing;
const time = {};
//http请求响应时间
time.httpComplete = timing.responseEnd - timing.requestStart;
//白屏时间,head内资源加载完成
time.ttfb = timing.responseStart - timing.navigationStart
//页面渲染时间
time.loadComplte = timing.domLoading - timing.domInteractive;
//页面加载完成的时间
time.loadPage = timing.loadEventEnd - timing.navigationStart;
复制代码
如果觉得自己写麻烦,可以参考github上的开源的工具 timing.js 点我?
npm install timing.js //安装
timing.getTimes(); //控制台模式
timing.printSimpleTable(); //控制台表格模式
复制代码
异常监控旨在我们快速的定位开发的应用上所出现的bug等,当线上用户反馈应用出现异常时,你可以通过监控的方式来第一时间分析,在开发过程中,能及时上报异常情况,可以预防线上故障的发生。
Sentry是开源的前端异常监控上报工具,通过集成到项目中,你可以在不同环境(测试,生产等)中,帮你收集记录问题,并定位到问题所在代码
Sentry官方服务需要付费,建议自行搭建,可以通过docker去部署搭建,不作详细说明介绍,官方链接 点我?
需要在sentry创建项目,并与你项目绑定关联(获取dsn)
sentry与vue项目结合中,需要用到raven(sentry官方针对vue推荐的插件) 可以使用封装好的sentry工具来集成,树酱封装了sentry-report点我?,集成了raven,可以直接使用npm安装,免去自行配置
npm install sentry-report
复制代码
import Report from 'sentry-report';
// 配置dsn
const option = {dsn:http://753ce3bf82e94ab0aa7b5e62fae16d3c@sentry.***.com/2}
// 初始化
const sentry = Report.getInstance(Vue, option);
复制代码
在sentry操作面板上可以看到具体的异常报错及对应的代码行,快速定位问题
前端项目中,异常监控分为异常捕获和异常上报
我们使用 window.onerror 捕获一般情况下 JS 错误的异常信息。
window.onerror = function (message, source, lineno, colno, error) {
console.log('errror')
// todo
}
复制代码
onerror无法监控网络请求的异常包括图片请求失败、资源加载失败等等及promise异常,这个时候需要监听 unhandledrejection,用来全局监听 Uncaught Promise Error
window.addEventListener('unhandledrejection', event => {
console.log('error');
});
function reject() {
Promise.reject('Hello, Fundebug!');
}
reject();
复制代码
主要用于捕获偶现的难以捕获的异常情况,最适合处理那些我们无法控制的错误,不过大部门前端代码少依赖环境,比较少用到,用node开发后端的同学,经常会有非常多的异步调用,需要对异常作捕获处理
try {
//可能会导致错误的代码
} catch (error) {
//错误时的处理方式
}
复制代码
数据监控一般是监控用户的行为,一般监控的指标主要包括:
数据监控的意义在于更好的统计和分析用户行为,包括了解用户的来源、那个功能交互用户点击比较多等等,可以更好的促使产品做得更好
数据采集方式: