`
xangqun
  • 浏览: 82612 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类
最新评论

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" onclick="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" onclick="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" onblur="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。

 

结果~

 

分享到:
评论

相关推荐

    firebug1.12-firebug1.11-firebug1.10-firebug1.9-firebug1.8-firebug1.7

    - 提供了对ES6模块的初步支持,便于跟踪和调试模块化JavaScript代码。 这些版本的迭代展示了Firebug作为Web开发工具的不断发展和进化,它始终紧跟Web技术的最新趋势,为开发者提供了强大的调试和分析工具。然而,...

    firebug-2.0.16-fx

    Firebug是Web开发领域的一款经典工具,特别是在JavaScript和CSS调试方面有着广泛的影响力。"firebug-2.0.16-fx"显然指的是Firebug的一个特定版本,2.0.16,专为Firefox浏览器(fx)设计。在这个版本中,Firebug提供...

    firebug-2.0.16-是firefox下的一个扩展,能够调试所有网站语言

    Firebug是firefox下的一个扩展,能够调试所有网站语言,如Html,Css等,但FireBug最吸引人的就是javascript调试功能,使用起来非常方便,而且在各种浏览器下都能使用(IE,Firefox,Opera, Safari)。除此之外,其他功能...

    firebug-1.12.7-fx_82618

    - JavaScript调试:其内置的JavaScript控制台让开发者能跟踪代码执行,设置断点,查看变量值,对于查找和修复JavaScript错误至关重要。 - 网络监控:Firebug能够详细记录页面加载过程中的网络请求,包括HTTP头信息...

    firebug-1.5.2-fx

    除了这些核心功能,1.5.2-fx版本还包含了一些其他实用工具,如网络面板用于分析页面加载性能,脚本调试器帮助开发者追踪JavaScript错误和执行流程,以及存储面板查看Cookie和其他本地存储数据。这些功能使得Firebug...

    firebug-1.11.2-fx.xpi

    firebug-1.11.2-fx.xpi一个不错的资源

    firebug-2.0.19-fx

    firebug-2.0.19-fx

    firebug-2.0.16-fx.rar

    火狐浏览器的Firebug是一款强大的Web开发和调试工具,它为开发者提供了查看、编辑和测试HTML、CSS、JavaScript以及DOM的能力。Firebug-2.0.16-fx.rar是这个插件的一个特定版本,适用于Firefox 48.0。在这款版本中,...

    firebug-1.9.0-fx

    Firebug是Web开发领域的一款经典工具,特别是在JavaScript调试、网页元素检查、网络性能分析等方面具有重要作用。"firebug-1.9.0-fx"显然指的是Firebug的1.9.0版本,专用于Firefox浏览器(fx是Firefox的缩写)。这个...

    firebug-1.10.6-fx.xpi

    firebug-1.10.6-fx.xpi

    火狐hackbar插件firebug-2.0.19-fx和hackbar-1.6.3-fx

    老版本的firebug-2.0.19-fx和hackbar-1.6.3-fx支持老版的火狐浏览器

    firebug-1.4.4-fx

    firebug-1.4.4-fx,jQuery的调试工具,firebug-1.4.4-fx,firebug-1.4.4-fx,firebug-1.4.4-fx,firebug-1.4.4-fx,firebug-1.4.4-fx

    火狐插件firebug-2.0.16-fx

    3. JavaScript调试:JavaScript控制台是Firebug的亮点之一,它支持断点设置、步进执行、查看变量值、性能分析等功能,帮助开发者调试和优化JavaScript代码。 4. 网络面板:Firebug的网络面板记录了页面加载过程中...

    firebug-2.0.16-fx.zip

    这个特定的版本号2.0.16意味着这是一个更新过的版本,可能包含了错误修复和性能改进。 描述中的内容是相同的,只给出了文件名,没有提供额外的信息,因此我们主要关注标题提供的信息。 标签"spring"可能有两层含义...

    初识Firebug全文--Firebug的使用.mht

    初识Firebug全文--Firebug的使用.mht初识Firebug全文--Firebug的使用.mht初识Firebug全文--Firebug的使用.mht初识Firebug全文--Firebug的使用.mht初识Firebug全文--Firebug的使用.mht初识Firebug全文--Firebug的使用...

    firebug-2.0.19-fx.zip

    1. JavaScript调试:Firebug提供了详细的JavaScript调试功能,包括断点设置、单步执行、查看变量值、调用堆栈跟踪、性能分析等。这使得开发者能够精确地定位和修复JavaScript代码中的错误,优化脚本性能。 2. HTML...

    fire bug firebug-1.5.0-fx

    尤其是在Firebug 1.5.0-fx这个版本中,它进一步提升了性能和功能,使得Web开发过程更为高效和精确。本文将深入探讨Firebug 1.5.0-fx的主要特点、功能及其在实际开发中的应用。 首先,Firebug的核心功能在于其强大的...

    firebug-1.9.2-fx.xpi

    Firebug 为你的 Firefox 集成了浏览网页的同时随手可得的...你可以对任何网页的 CSS、HTML 和 JavaScript 进行实时编辑、调试和监控。\n\n访问 Firebug 网站来查看文档、截屏以及讨论组(英语):http://getfirebug.com

    Firebug-yslow-培训讲稿

    Firebug-yslow-培训讲稿 Firebug-yslow-培训讲稿

    firebug-1.3.3-fx最新版

    firebug-1.3.3-fx.rar FireFox 调试工具,需要的下

Global site tag (gtag.js) - Google Analytics