前端相关数据监控

2019-10-28 22:54栏目:web网络
TAG:

前端相关数据监控

2015/08/16 · HTML5 · 数据监控

原文出处: AlloyTeam   

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

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

一、收集脚本执行错误

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); }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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收集。

JavaScript

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; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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加载之前打上时间戳,加载之后打上时间戳,并且将数据上报到后台。加载时间反映了页面白屏,可操作的等待时间。

XHTML

<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>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<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>

XHTML

<a href="" target="_blank"> </a>

1
<a href="https://github.com/perltzhu/js-data-report" target="_blank"> </a>

1.让文字不停地滚动

参考资料:

  • html5 performance en
  • html5 performance cn
  • javascript onerror api

    1 赞 1 收藏 评论

图片 1

  <MARQUEE>滚动文字</MARQUEE>

2.记录并显示网页的最后修改时间

  <script language=javascript>   document.write("最后更新时间: "

  • document.lastModified + "")   </script>

3.关闭当前窗口

  <a href="/"onClick="javascript:window.close();return false;">关闭窗口</a>

4.5秒后关闭当前页

  <script language="javascript">   <!--   setTimeout('window.close();',5000);   -->   </script>

5.2秒后载入指定网页

  <head>   <meta http-equiv="refresh" content="2;URL=   </head>

6.添加到收藏夹

  <Script Language="javascript">   function bookmarkit()   {   window.external.addFavorite('')   }   if (document.all)document.write('<a href="#" onClick="bookmarkit()">加入收藏夹</a>')   </Script>

7.让超链接不显示下划线

  <style type="text/css">   <!-   a:link{text-decoration:none}   a:hover{text-decoration:none}   a:visited{text-decoration:none}   ->   </style>

8.禁止鼠标右键的动作

  <Script Language = "javascript">   function click() { if (event.button==2||event.button==3)   {   alert('禁止鼠标右键');   }   document.onmousedown=click // -->   </Script>

9.设置该页为首页

  <body bgcolor="#FFFFFF" text="#000000">   <!-- 网址:   <a class="chlnk" style="cursor:hand" HREF   onClick="this.style.behavior='url(#default#homepage)';   this.setHomePage('你的网站名称);"><font color="000000" size="2" face="宋体">设为首页</font></a>   </body>

10.节日倒计时

  <Script Language="javascript">   var timedate= new Date("December 25,2003");   var times="圣诞节";   var now = new Date();   var date = timedate.getTime() - now.getTime();   var time = Math.floor(date / (1000 * 60 * 60 * 24));   if (time >= 0)   document.write("现在离"+times+"还有: "+time +"天")</Script>

11.单击按钮打印出当前页

  <Script Language="javascript">   <!-- Begin   if (window.print) {   document.write('<form>'   + '<input type=button name=print value="打印本页" '   + 'onClick="javascript:window.print()"></form>');   }   // End -->   </Script>

12.单击按钮‘另存为’当前页

  <input type="button" name="Button" value="保存本页"   onClick="document.all.button.ExecWB(4,1)">   <object id="button"   width=0   height=0   classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2">   <embed width="0" height="0"></embed>   </object>

13.显示系统当前日期

  <script language=javascript>   today=new Date();   function date(){   this.length=date.arguments.length   for(var i=0;i<this.length;i++)   this[i+1]=date.arguments }   var d=new date("星期日","星期一","星期二","星期三","星期四","星期五","星期六");   document.write(   "<font color=##000000 style='font-size:9pt;font-family: 宋体'> ",   today.getYear(),"年",today.getMonth()+1,"月",today.getDate(),"日",   d[today.getDay()+1],"</font>" );   </script>

14.不同时间段显示不同问候语

  <Script Language="javascript">   <!--   var text=""; day = new Date( ); time = day.getHours( );   if (( time>=0) && (time < 7 ))     text="夜猫子,要注意身体哦! "   if (( time >= 7 ) && (time < 12))     text="今天天气……哈哈哈,不去玩吗?"   if (( time >= 12) && (time < 14))     text="午休时间哦,朋友一定是不习惯午睡的吧?!"   if (( time >=14) && (time < 18))     text="下午茶的时间到了,休息一下吧! "   if ((time >= 18) && (time <= 22))     text="您又来了,可别和MM聊太久哦!"   if ((time >= 22) && (time < 24))     text="很晚了哦,注意休息呀!"   document.write(text)   //--->   </Script>

15.水中倒影效果

  <img id="reflect" src="你自己的图片文件名" width="175" height="59">   <script language="javascript">   function f1()   {     setInterval("mdiv.filters.wave.phase+=10",100);   }   if (document.all)   {     document.write('<img id=mdiv src="'+document.all.reflect.src+'"     style="filter:wave(strength=3,freq=3,phase=0,lightstrength=30) blur() flipv()">')     window.onload=f1   }   </script>

16.慢慢变大的窗口

  <Script Language="javascript">   <!--   var Windowsheight=100   var Windowswidth=100   var numx=5   function openwindow(thelocation){   temploc=thelocation   if   (!(window.resizeTo&&document.all)&&!(window.resizeTo&&document.getElementById))   {     window.open(thelocation)     return   }   windowsize=window.open("","","scrollbars")   windowsize.moveTo(0,0)   windowsize.resizeTo(100,100)   tenumxt()   }   function tenumxt(){   if (Windowsheight>=screen.availHeight-3)     numx=0   windowsize.resizeBy(5,numx)   Windowsheight+=5   Windowswidth+=5   if (Windowswidth>=screen.width-5)   {     windowsize.location=temploc     Windowsheight=100     Windowswidth=100     numx=5     return   }   setTimeout("tenumxt()",50)   }   //-->   </script>   <p><a href="javascript:openwindow()">进入</a>

17.改变IE地址栏的IE图标

  我们要先做一个16*16的icon(图标文件),保存为index.ico。把这个图标文件上传到根目录下并在首页<head></head>之间加上如下代码:           <link REL = "Shortcut Icon" href="index.ico">

18.取消选取、防止复制
        <body onselectstart="return false"> 

19.不准粘贴

         onpaste="return false"

20.防止复制

         oncopy="return false;" oncut="return false;" 

21. 关闭输入法

         <input style="ime-mode:disabled"> 

22. 网页将不能被另存为

         <noscript><iframe src=*.html></iframe></noscript> 

23. 最小化、最大化、关闭窗口

<object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"> 
<param name="Command" value="Minimize"></object>
<object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"> 
<param name="Command" value="Maximize"></object>
<OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<PARAM NAME="Command" VALUE="Close"></OBJECT>
<input type=button value=最小化 onclick=hh1.Click()>
<input type=button value=最大化 onclick=hh2.Click()>
<input type=button value=关闭 onclick=hh3.Click()>

24. 让表单没有凹凸感

<input type=text style="border:1 solid #000000"> 

<input type=text style="border-left:none; border-right:none; border-top:none; border-bottom: 

1 solid #000000"></textarea>

25.不要滚动条

让竖条没有: 
<body style="overflow:scroll;overflow-y:hidden"> 
</body> 
让横条没有: 
<body style="overflow:scroll;overflow-x:hidden"> 
</body> 
两个都去掉?更简单了 
<body scroll="no"> 
</body> 
26.脚本永不出错

<SCRIPT LANGUAGE="JavaScript"> 
<!-- Hide 
function killErrors() { 
return true; 

window.onerror = killErrors; 
// --> 
</SCRIPT>
27.ENTER键可以让光标移到下一个输入框
<input onkeydown="if(event.keyCode==13)event.keyCode=9">
28.检测某个网站的链接速度

把如下代码加入<body>区域中:
<script language=Javascript>
tim=1
setInterval("tim++",100)
b=1
var autourl=new Array()
autourl[1]="www.njcatv.net"
autourl[2]="javacool.3322.net"
autourl[3]="www.sina.com.cn"
autourl[4]="www.nuaa.edu.cn"
autourl[5]="www.cctv.com"
function butt(){
document.write("<form name=autof>")
for(var i=1;i<autourl.length;i++)
document.write("<input type=text name=txt"+i+" size=10 value=测试中……> =》<input type=text 
name=url"+i+" size=40> =》<input type=button value=GO 

onclick=window.open(this.form.url"+i+".value)><br>")
document.write("<input type=submit value=刷新></form>")
}
butt()
function auto(url){
document.forms[0]["url"+b].value=url
if(tim>200)
{document.forms[0]["txt"+b].value="链接超时"}
else
{document.forms[0]["txt"+b].value="时间"+tim/10+"秒"}
b++
}
function run(){for(var i=1;i<autourl.length;i++)document.write("<img src=" 

width=1 height=1 

onerror=auto("
run()</script>
29.文件上传过程中判断文件类型

<input type=file onchange="alert(this.value.match(/^(.*)(/.)(.{1,8})$/)[3])">

版权声明:本文由澳门新葡亰平台游戏发布于web网络,转载请注明出处:前端相关数据监控