2.Promise场景
Promise场景的处理方式有所不同,当Promise被reject且没有reject处理器的时候,会触发unhandlerejection事件,所以通过监听unhandlerejection的事件来捕获错误 。
export function listenerPromiseError() {window.addEventListener('unhandledrejection', (event) => {console.log('这是Promise场景中错误', event);})}
二、接口错误对于浏览器来说,所有的接口均是基于XHR和Fetch实现的,为了捕获接口中的错误,可以通过重写该方法,然后通过接口返回的信息来判断当前接口的状况,下面以XHR为例来展示封装过程 。
function newXHR() {const XMLHttpRequest = window.XMLHttpRequest;const oldXHROpen = XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open = (method, url, async) => {// 做一些自己的数据上报操作return oldXHROpen.Apply(this, arguments);}const oldXHRSend = XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.send = (body) => {// 做一些自己的数据上报操作return oldXHRSend.apply(this, arguments);}}
3.1.4 业务信息每个产品都会有自己的业务信息,例如用户在线时长、pv、uv、用户分布等,通过获取这些业务信息才能更加清楚的了解目前产品的状况,以便产品经理更好的去规划产品的未来方向 。由于每个产品业务信息多种多样,小伙伴本可以按照自己的需求进行撰写代码,此处我就不再赘述 。3.2上报
对于上报的方式无外乎两种:一种是Ajax的方式上报;另一种是通过Image的形式进行上报 。目前很多大厂采用的上报方式均是通过一个1*1像素的的gif图片进行上报,既然人家都采用该种策略,那我们就来唠一唠下面两个问题 。
- 为什么采用Image的方式上报?
- 没有跨域问题 。因为数据服务器和后端服务器大概率是不同的域名,若采用Ajax的方式进行处理还要处理跨域问题,否则数据会被浏览器拦截 。
- 不会阻塞页面加载,只需new Image对象即可 。
- 图片类型很多,为什么采用gif这种格式进行上报?
其实归结为一个字——小 。对于1*1px的图片,BMP结构的文件需要74字节,PNG结构的文件需要67字节,GIF结构的文件只需要43字节 。同样的响应,GIF可以比BMP节约41%的流量,比PNG节约35%的流量,所以选择gif进行上报 。
日志上报之后需要进行清洗,获取自己所需要内容,并将分析内容进行存储 。根据数据量的大小可分为两种方式:单机和集群 。一、单机
访问量小、日志少的网站可以采用单机的方式对数据进行分析,例如用node读取日志文件,然后通过日志文件中获取所需要的信息,最终将处理的信息存储到数据库中 。
二、集群
很多产品的访问量很大,日志很多,此时就需要利用Hadoop进行分布式处理,获取最终处理结果,其处理流程图如下所示:
文章插图
根据自己的日志量级决定自己的分析方式,合适的就是最好的,不用一味追求最优的、最先进的处理方式 。3.4报警
当异常类型超多一定阈值之后需要进行报警通知,让对应的工作人员去处理问题,及时止损 。根据报警的级别不同,可以选择不同的报警方式 。
- 邮件——普通报警
- 短信——严重报警,已影响部分业务
- 电话——特别严重,例如系统已宕机
参考http://www.alloyteam.com/2020/01/14184/#prettyPhoto
https://www.colabug.com/2019/1224/6767570/amp/
【2022年再不知道前端监控就out了】
推荐阅读
- 生肖|2022年,鸿运高照,职场机遇多,前景可观,前程似锦的三大生肖
- 工程建筑|基建狂魔再获“神装” 世界第一台!桩梁一体造桥机“共工号”投用
- 长城物业管理策略
- 红茶之回味,功夫红茶能泡多久
- 奥运会|谷爱凌不排除再战冬奥:依然热爱滑雪
- 职业教育|HR直言:不招“三无学生”,成绩再优秀也不要,击碎毕业生的心
- 翡翠|翡翠新手不知道怎么选翡翠?5大要素带你入门
- 王者s26赛季更新时间是何时?
- 2022年支付宝集五福什么时候开始?
- 翡翠|新手买到喜欢的翡翠,主要是对它不够了解,不知道怎么鉴定价格