使用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 相关文章推荐
JavaScript 原型与继承说明
Jun 09 Javascript
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
Sep 14 Javascript
JS日期和时间选择控件升级版(自写)
Aug 02 Javascript
JS中的异常处理方法分享
Dec 22 Javascript
js使用正则实现ReplaceAll全部替换的方法
Aug 22 Javascript
js创建jsonArray传输至后台及后台全面解析
Apr 11 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
May 24 Javascript
浅谈JavaScript的闭包函数
Dec 08 Javascript
js 转义字符及URI编码详解
Feb 28 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
Dec 19 Javascript
vue 地区选择器v-distpicker的常用功能
Jul 23 Javascript
微信小程序里引入SVG矢量图标的方法
Sep 20 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
php的一些小问题
2010/07/03 PHP
PHP 设计模式之观察者模式介绍
2012/02/22 PHP
浅析is_writable的php实现
2013/06/18 PHP
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
php5.2以下版本无json_decode函数的解决方法
2014/05/25 PHP
PHP实现多图片上传类实例
2014/07/26 PHP
PHP convert_cyr_string()函数讲解
2019/02/13 PHP
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
javascript时间函数基础介绍
2013/03/28 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
jQuery多级联动下拉插件chained用法示例
2016/08/20 Javascript
使用JS实现图片轮播的实例(前后首尾相接)
2017/09/21 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
微信小程序实现列表下拉刷新上拉加载
2020/07/29 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
微信小程序基于picker实现级联菜单
2019/02/15 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
Vue 的 v-model用法实例
2020/11/23 Vue.js
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
python微信公众号开发简单流程
2018/03/23 Python
python3实现微型的web服务器
2019/09/03 Python
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
项目专员岗位职责
2013/12/04 职场文书
CAD制图人员的自荐信
2014/02/07 职场文书
就业协议书范本
2014/04/11 职场文书
企业党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
个人查摆问题自查报告
2014/10/16 职场文书
工作时间擅自离岗检讨书
2014/10/24 职场文书
教学工作总结范文5篇
2019/08/19 职场文书
图解上海144收音机
2021/04/22 无线电
Windows Server 修改远程桌面端口的实现
2022/06/25 Servers
Moment的feature导致线上bug解决分析
2022/09/23 Javascript