使用Javascript监控前端相关数据的代码


Posted in Javascript onOctober 27, 2016

本篇文章介绍了Javascript监控前端相关数据,项目开发完成外发后,没有一个监控系统,我们很难了解到发布出去的代码在用户机器上执行是否正确,所以需要建立前端代码性能相关的监控系统。

所以我们需要做以下的一些模块:

一、收集脚本执行错误

function error(msg,url,line){
  var REPORT_URL = "xxxx/cgi"; // 收集上报数据的信息
  var m =[msg, url, line, navigator.userAgent, +new Date];// 收集错误信息,发生错误的脚本文件网络地址,用户代理信息,时间
  var url = REPORT_URL + m.join('||');// 组装错误上报信息内容URL
  var img = new Image;
  img.onload = img.onerror = function(){
   img = null;
  };
  img.src = url;// 发送数据到后台cgi
}
// 监听错误上报
window.onerror = function(msg,url,line){
  error(msg,url,line);
}

通过管理后台系统,我们可以看到页面上每次错误的信息,通过这些信息我们可以很快定位并且解决问题。

 二、收集html5 performance信息

performance 包含页面加载到执行完成的整个生命周期中不同执行步骤的执行时间。performance相关文章点击如下:使用performance API 监测页面性能

计算不同步骤时间相对于navigationStart的时间差,可以通过相应后台CGI收集。

function _performance(){
  var REPORT_URL = "xxxx/cgi?perf=";
  var perf = (window.webkitPerformance ? window.webkitPerformance : window.msPerformance ),
   points = ['navigationStart','unloadEventStart','unloadEventEnd','redirectStart','redirectEnd','fetchStart','domainLookupStart','connectStart','requestStart','responseStart','responseEnd','domLoading','domInteractive','domContentLoadedEventEnd','domComplete','loadEventStart','loadEventEnd'];
  var timing = pref.timing;
  perf = perf ? perf : window.performance;
  if( perf && timing ) {
   var arr = [];
   var navigationStart = timing[points[0]];
   for(var i=0,l=points.length;i<l;i++){
     arr[i] = timing[points[i]] - navigationStart;
   }
  var url = REPORT_URL + arr.join("-");
  var img = new Image;
  img.onload = img.onerror = function(){
   img=null;
  }
  img.src = url;
}

通过后台接口收集和统计,我们可以对页面执行性能有很详细的了解。

三、统计每个页面的JS和CSS加载时间

在JS或者CSS加载之前打上时间戳,加载之后打上时间戳,并且将数据上报到后台。加载时间反映了页面白屏,可操作的等待时间。

<script>var cssLoadStart = +new Date</script>
<link rel="stylesheet" href="xxx.css" type="text/css" media="all">
<link rel="stylesheet" href="xxx1.css" type="text/css" media="all">
<link rel="stylesheet" href="xxx2.css" type="text/css" media="all">
<sript>
  var cssLoadTime = (+new Date) - cssLoadStart;
  var jsLoadStart = +new Date;
</script>
<script type="text/javascript" src="xx1.js"></script>
<script type="text/javascript" src="xx2.js"></script>
<script type="text/javascript" src="xx3.js"></script>
<script>
  var jsLoadTime = (+new Date) - jsLoadStart;
  var REPORT_URL = 'xxx/cgi?data='
  var img = new Image;
  img.onload = img.onerror = function(){
   img = null;
  };
  img.src = REPORT_URL + cssLoadTime + '-' + jsLoadTime;
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支

Javascript 相关文章推荐
js实现的四级左侧网站分类菜单实例
May 06 Javascript
JavaScript中length属性的使用方法
Jun 05 Javascript
JavaScript实现格式化字符串函数String.format
Dec 16 Javascript
JavaScript中Promise的使用详解
Feb 26 Javascript
Bootstrap DateTime Picker日历控件简单应用
Mar 25 Javascript
JS轮播图实现简单代码
Feb 19 Javascript
js实现1,2,3,5数字按照概率生成
Sep 12 Javascript
利用ECharts.js画K线图的方法示例
Jan 10 Javascript
Vue-cli项目部署到Nginx服务器的方法
Nov 01 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
Nov 14 Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
Jun 05 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
Nov 04 Javascript
js实现各种复制到剪贴板的方法(分享)
Oct 27 #Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
Oct 27 #Javascript
微信小程序 定义全局数据、函数复用、模版等详细介绍
Oct 27 #Javascript
vue插件tab选项卡使用小结
Oct 27 #Javascript
JS实现用户注册时获取短信验证码和倒计时功能
Oct 27 #Javascript
微信小程序 action-sheet底部菜单详解
Oct 27 #Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
Oct 27 #Javascript
You might like
ftp类(myftp.php)
2006/10/09 PHP
PHP生成自定义长度随机字符串的函数分享
2014/05/04 PHP
PHP模拟asp中response类实现方法
2015/08/08 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
2015/12/14 PHP
php 一维数组的循环遍历实现代码
2017/04/10 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
JavaScript的目的分析
2007/01/05 Javascript
js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
2009/04/10 Javascript
sliderToggle在写jquery的计时器setTimeouter中不生效
2014/05/26 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
谈一谈jQuery核心架构设计
2016/03/28 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
JS异步执行结果获取的3种解决方式
2019/02/19 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
python常规方法实现数组的全排列
2015/03/17 Python
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
2017/02/13 Python
Python实现的简单读写csv文件操作示例
2018/07/12 Python
Python解决两个整数相除只得到整数部分的实例
2018/11/10 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
2019/04/11 Python
简单了解Python读取大文件代码实例
2019/12/18 Python
Django 再谈一谈json序列化
2020/03/16 Python
全方位了解CSS3的Regions扩展
2015/08/07 HTML / CSS
详解rem 适配布局
2018/10/31 HTML / CSS
夜大毕业生自我评价分享
2013/11/10 职场文书
颁奖典礼主持词
2014/03/25 职场文书
妇女干部培训方案
2014/05/12 职场文书
好书伴我成长演讲稿
2014/05/14 职场文书
公司委托书怎么写
2014/08/02 职场文书
投标授权委托书范文
2014/08/02 职场文书
幼儿园教师自荐书
2015/03/06 职场文书
学雷锋主题班会教案
2015/08/13 职场文书
优秀新员工事迹材料
2019/05/13 职场文书
想创业成功,需要掌握这些要点
2019/12/06 职场文书
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android