1.操作 window 工具的 load 和 beforeunload 变乱实现了网页瓦解的监控。
不错的文章,保举阅读:Logging Information on Browser Crashes。
- window.addEventListener('load', function () {
- sessionStorage.setItem('good_exit', 'pending');
- setInterval(function () {
- sessionStorage.setItem('time_before_crash', new Date().toString());
- }, 1000);
- });
-
- window.addEventListener('beforeunload', function () {
- sessionStorage.setItem('good_exit', 'true');
- });
-
- if(sessionStorage.getItem('good_exit') &&
- sessionStorage.getItem('good_exit') !== 'true') {
- /*
- insert crash logging code here
- */
- alert('Hey, welcome back from your crash, looks like you crashed on: ' + sessionStorage.getItem('time_before_crash'));
- }
2.基于以下缘故起因,我们可以行使 Service Worker 来实现网页瓦解的监控:
Service Worker 有本身独立的事变线程,与网页区分隔,网页瓦解了,Service Worker 一样平常环境下不会瓦解;
Service Worker 生命周期一样平常要比网页还要长,可以用来监控网页的状态;
- 网页可以通过
navigator.serviceWorker.controller.postMessage API 向掌管本身的 SW 发送动静。
十二、错误上报
1.通过 Ajax 发送数据
由于 Ajax 哀求自己也有也许会产生非常,并且有也许会激发跨域题目,一样平常环境下更保举行使动态建设 img 标签的情势举办上报。
2.动态建设 img 标签的情势
- function report(error) {
- let reportUrl = 'http://jartto.wang/report';
- new Image().src = `${reportUrl}?logs=${error}`;
- }
网络非常信息量太多,怎么办?现实中,我们不得不思量这样一种环境:假如你的网站会见量很大,那么一个肯定的错误发送的信息就有许多条,这时辰,我们必要配置收罗率,从而减缓处事器的压力:
- Reporter.send = function(data) {
- // 只收罗 30%
- if(Math.random() < 0.3) {
- send(data) // 上报错误信息
- }
- }
收罗率应该通过现实环境来设定,随机数,可能某些用户特性都是不错的选择。
十三、总结
回到我们开头提出的谁人题目,怎样优雅的处理赏罚非常呢?
1.可疑地区增进 Try-Catch
2.全局监控 JS 非常 window.onerror
3.全局监控静态资源非常 window.addEventListener
4.捕捉没有 Catch 的 Promise 非常:unhandledrejection
5.VUE errorHandler 和 React componentDidCatch
6.监控网页瓦解:window 工具的 load 和 beforeunload
7.跨域 crossOrigin 办理
着实很简朴,正如上文所说:回收组合方案,分范例的去捕捉非常,这样根基 80%-90% 的题目都化于无形。 【编辑保举】 - 观测发明开拓者最厌恶 PHP,最爱 Python
- 谷歌和OpenAI开拓新器材,能更好地研究呆板视觉算法
- 苹果宣布iOS 12.2体系第五个开拓者测试版
- 保举这几款开拓流程加强器材让您事半功倍
- 开拓者创立了社区继承维护 Atom IDE
【责任编辑:张燕妮 TEL:(010)68476606】
点赞 0 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|