firebug指南(四)---javascript性能评测和对象跟踪(转)

引言:

 

本篇将涵盖以下几个主题:

 

     ·javascript性能评测器

     ·错误跟踪

     ·xmlhttprequest对象跟踪

 

#1.javascript性能评测器

 

javascript性能评测器是firebug中非常有用的一个功能,它可以计算出javascript代码的执行的一些时间数据(如方法调用次数,执行的时间,平均执行时间等等)。这对提高javascript代码的性能有非常大的帮助。

 

我们有三种方式可以使用javascript性能评测器,分别是点击控制台标签上的“概况”按钮或者在javascript代码中写入 “console.profile()”或者在命令行中中输入“profile()”。在本篇中我将讲解前两种方式,如果你对第三种方式有兴趣,请点击这里(第四篇)

 

console.profile()

 

     ·新建一个html文件,然后将下列代码粘贴到建好的html中。

 

Html代码
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-  
  2.   
  3. transitional.dtd">     
  4. <html xmlns="http://www.w3.org/1999/xhtml" >     
  5. <head>     
  6. <title>Firebug</title>     
  7. <script language="javascript" type="text/javascript">     
  8.     
  9. function startDoSomething(){     
  10. console.profile('Measuring time');     
  11. doSomething();     
  12. console.profileEnd();     
  13. }     
  14. function doSomething(){     
  15. doThis(1000);     
  16. doThis(100000);     
  17. doThat(10000);     
  18. doThisAndThat(1000,10000);     
  19.     
  20. }     
  21. function doThis(count){     
  22. for(var i=0;i<count;i++){}     
  23. }     
  24.     
  25. function doThat(count){     
  26. for(var i=0;i<count;i++){}     
  27. }     
  28.     
  29. function doThisAndThat(countThis,countThat){     
  30. for(var i=0;i<countThis;i++){ for(var j=0;j<countThat;j++){} }     
  31. }     
  32. </script>     
  33. </head>     
  34. <body>     
  35. Open the console tab. Click the button below and wait a lit.. <br />     
  36. <input type="button" value="Start" onclick="startDoSomething();"/>     
  37. </body>     
  38. </html>    
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-

transitional.dtd">   
<html xmlns="http://www.w3.org/1999/xhtml" >   
<head>   
<title>Firebug</title>   
<script language="javascript" type="text/javascript">   
  
function startDoSomething(){   
console.profile('Measuring time');   
doSomething();   
console.profileEnd();   
}   
function doSomething(){   
doThis(1000);   
doThis(100000);   
doThat(10000);   
doThisAndThat(1000,10000);   
  
}   
function doThis(count){   
for(var i=0;i<count;i++){}   
}   
  
function doThat(count){   
for(var i=0;i<count;i++){}   
}   
  
function doThisAndThat(countThis,countThat){   
for(var i=0;i<countThis;i++){ for(var j=0;j<countThat;j++){} }   
}   
</script>   
</head>   
<body>   
Open the console tab. Click the button below and wait a lit.. <br />   
<input type="button" value="Start" οnclick="startDoSomething();"/>   
</body>   
</html>  

 

 

     ·用firefox浏览器将该html文件打开

     ·打开firebug的控制台标签

     ·点击“start”按钮,然后稍等片刻..(结果如下图)


 

       ·“函数”列: 本列显示了每个方法的方法名

       ·“调用”列: 本列显示了方法被调用的次数。(在本例中doThis()方法总共被调用了2此)

       ·“百分比”列: 本列显示了每个方法执行时间在整个例子执行时间所占的百分比

       ·“占用时间”列:  本列显示了方法的占用时间,打个比方:doSomething() 方法没有自己的逻辑代码,他仅仅调用了其他的方法,因此如上图所示,他的执行时间几乎为0.(不妨试一下在doSomething() 方法内加入一个10000次的循环,看看效果如何)。
       ·“时间”列: 本列显示了方法的执行时间间隔(从开始执行一直到执行结束返回)。

       ·“平均时间”列: 时间/调用次数。

       ·“最小时间”列: 该方法所有被调用中执行时间最短的时间(本例中doThis()方法被调用两次,而doThis(1000)执行时间最短为0.053ms )。

       ·“最大时间”列: 该方法所有被调用中执行时间最长的时间。

       ·“文件”列: 该方法在程序中定义的位置。

 

通过点击控制台标签上工具栏中的“概况”按钮

 

如果不想通过代码的方式启动javascript性能评测器,不妨使用这个方式(如下图)。


测试步骤~

     ·在上个例子的代码上将doSomething() 方法内的console.profile(’Measuring time’); 和 console.profileEnd();这两个语句删除。

     ·在firebug打开修改后的文件。

     ·打开firebug的控制台标签。

     ·点击“概况”按钮。

     ·点击页面上的“start”按钮。

     ·大约等半分钟左右。

     ·再次点击“概况”按钮。

 

到这里,javascript性能评测器这块内容就讲完了,如果还有什么疑问,请在我博客上留言,以便共同讨论。

好,接下来我们讲下一个主题。

 

#2.控制台标签的选项菜单

在控制台标签的右边有一个“选项”按钮,如下图。


我这里将他们分为三个类别.

 

1.错误跟踪

     ·显示javascript错误

     ·显示javascript警告

     ·显示CSS错误

     ·显示XML错误

     ·显示Chrome错误

     ·显示Chrome信息

     ·显示外部错误

     ·显示错误的堆栈信息

     ·严格警告

2.XMLHttpRequest跟踪

     ·显示XMLHttpRequest

3.命令行

     ·更大的命令行

 

#2.1错误跟踪和过滤

 

可以跟踪脚本代码,或者CSS,XML等文件中的错误信息,也可以通过选定或者取消选定进行错误信息的过滤(如上图中打钩的即为选定)。

 

例子~

 

Html代码
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">     
  2. <html xmlns="http://www.w3.org/1999/xhtml" >     
  3. <head>     
  4. <title>Firebug</title>     
  5. <style type="text/css">     
  6. .normalText{     
  7. bcolor : red;  /* This is ERROR!! */    
  8. }     
  9. </style>     
  10. <script language="javascript" type="text/javascript">     
  11. function foo(){     
  12. var objTxt = doucmnet.getElementById('nameTextBox');  //This is ERROR!!     
  13. alert(objTxt.value);     
  14. }     
  15. </script>     
  16. </head>     
  17. <body>     
  18.     
  19. <input id="nameTextBox" class="normalText" type="text" />     
  20. <input type="button" value="Start" onclick="foo();"/>     
  21. </body>     
  22. </html>    
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
<html xmlns="http://www.w3.org/1999/xhtml" >   
<head>   
<title>Firebug</title>   
<style type="text/css">   
.normalText{   
bcolor : red;  /* This is ERROR!! */  
}   
</style>   
<script language="javascript" type="text/javascript">   
function foo(){   
var objTxt = doucmnet.getElementById('nameTextBox');  //This is ERROR!!   
alert(objTxt.value);   
}   
</script>   
</head>   
<body>   
  
<input id="nameTextBox" class="normalText" type="text" />   
<input type="button" value="Start" οnclick="foo();"/>   
</body>   
</html>  

 

 输入结果~

 


#2.2.XMLHttpRequest对象跟踪

 

这是firebug中非常有用的功能之一,尤其对Ajax开发员来说是相当有用的。以前我们在开发Ajax程序的时候都有一个普遍的问题就是一旦 xmlhttprequest对象出了什么错,就很难进行排错,而且也很难发现异步返回的响应结果是否正确。

 

但是使用firebug后,这一些将会变得非常简单,我们只要勾上“选项”菜单中的“xmlhttprequests”选项,firebug将会为我们做以下几件事:

     ·执行时间(从发出请求到收到响应)

     ·参数(QueryString)

     ·HTTP Header

     ·响应(response)

这里以一个使用ajax验证用户名是否存在的简单例子为例.

 

例子~

 

Html代码
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  2. <html>  
  3. <head>  
  4. <meta http-equiv="Content-Type">  
  5. <title>Login</title>  
  6.   
  7. <script type="text/javascript">  
  8. function checkUserName() {  
  9.     document.getElementById("msg").innerHTML = "<font color='green'>checking...</font>" ;  
  10.     var url = "checklogin.jsp?username=" + document.forms[0].username.value ;  
  11.     if (window.XMLHttpRequest) {  
  12.         xhr = new XMLHttpRequest();  
  13.     } else {  
  14.         if(window.ActiveXObject){  
  15.             try {  
  16.                 xhr = new ActiveXObject("Microsoft.XMLHttpRequest") ;  
  17.             } catch(e) {}   
  18.         }  
  19.     }  
  20.     if (xhr) {  
  21.         xhr.onreadystatechange = showContents ;  
  22.         xhr.open("GET", url, true) ;  
  23.         xhr.send(null) ;  
  24.     } else {  
  25.         document.getElementById("msg").innerHTML = "sorry ! but your browser coundn't create a XmlHttpRequest object !" ;  
  26.     }  
  27. }  
  28.    
  29. function showContents() {  
  30.     if (xhr.readyState == 4) {  
  31.         if(xhr.status == 200){  
  32.             var outMsg = xhr.responseXML.getElementsByTagName("msg")[0].childNodes[0].nodeValue ;  
  33.             if (outMsg == "notexist") {  
  34.                 document.getElementById("msg").innerHTML = "<font color=green><strong>User not exists!!</strong></font>" ;  
  35.             } else {  
  36.                 document.getElementById("msg").innerHTML = "<font color=red><strong>User exists!!</strong></font>" ;  
  37.             }  
  38.         } else {  
  39.             var outMsg = "there was a problem on your server : status = " + status ;  
  40.         }  
  41.     }  
  42. }  
  43. </script>  
  44.   
  45. </head>  
  46. <body>  
  47. <center>  
  48.  <form action="checklogin.jsp">  
  49.   username : <input type="text" name="username" onblur="checkUserName();" /><span><div id="msg"></div></span><br><br>  
  50.   password : <input type="password" name="password" /><br><br>  
  51.   <input type="submit" value="submit" />  
  52.  </form>  
  53. </center>  
  54. </body>  
  55. </html>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type">
<title>Login</title>

<script type="text/javascript">
function checkUserName() {
	document.getElementById("msg").innerHTML = "<font color='green'>checking...</font>" ;
	var url = "checklogin.jsp?username=" + document.forms[0].username.value ;
	if (window.XMLHttpRequest) {
  		xhr = new XMLHttpRequest();
	} else {
	  	if(window.ActiveXObject){
		    try {
				xhr = new ActiveXObject("Microsoft.XMLHttpRequest") ;
		    } catch(e) {} 
	    }
	}
	if (xhr) {
		xhr.onreadystatechange = showContents ;
		xhr.open("GET", url, true) ;
		xhr.send(null) ;
	} else {
		document.getElementById("msg").innerHTML = "sorry ! but your browser coundn't create a XmlHttpRequest object !" ;
	}
}
 
function showContents() {
	if (xhr.readyState == 4) {
		if(xhr.status == 200){
			var outMsg = xhr.responseXML.getElementsByTagName("msg")[0].childNodes[0].nodeValue ;
			if (outMsg == "notexist") {
				document.getElementById("msg").innerHTML = "<font color=green><strong>User not exists!!</strong></font>" ;
			} else {
				document.getElementById("msg").innerHTML = "<font color=red><strong>User exists!!</strong></font>" ;
			}
		} else {
			var outMsg = "there was a problem on your server : status = " + status ;
		}
	}
}
</script>

</head>
<body>
<center>
 <form action="checklogin.jsp">
  username : <input type="text" name="username" οnblur="checkUserName();" /><span><div id="msg"></div></span><br><br>
  password : <input type="password" name="password" /><br><br>
  <input type="submit" value="submit" />
 </form>
</center>
</body>
</html>


 

 

     ·创建一个html文件,将上面的代码粘贴到文件中,取名为login.html

     ·创建一个jsp文件,将下列代码粘贴到文件中,取名为checklogin.jsp

Java代码
  1. <%@ page import="java.sql.*" %>  
  2.       
  3. <%  
  4.  response.setContentType("text/xml") ;  
  5.  response.setHeader("catch-control""no-store") ;  
  6.  response.setDateHeader("Expires"0) ;  
  7.    
  8.  String username = request.getParameter("username") ;  
  9.  String login = null;  
  10.  if ("firebug".equalsIgnoreCase(username))  
  11.     login = "exist" ;  
  12.  else  
  13.     login="notexist" ;  
  14.  response.getWriter().write("<msg>" + login + "</msg>") ;  
  15. %>  
<%@ page import="java.sql.*" %>
    
<%
 response.setContentType("text/xml") ;
 response.setHeader("catch-control", "no-store") ;
 response.setDateHeader("Expires", 0) ;
 
 String username = request.getParameter("username") ;
 String login = null;
 if ("firebug".equalsIgnoreCase(username))
 	login = "exist" ;
 else
 	login="notexist" ;
 response.getWriter().write("<msg>" + login + "</msg>") ;
%>

 

      ·部署到tomcat上

      ·打开login.html,在“username”右边文本框中输入“ffirebug”。

      ·点击password文本框,使焦点离开username。

 

结果~

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值