JavaScript中的console.profile()函数详细介绍

 更新时间:2014年12月29日 10:27:13   投稿:junjie  
这篇文章主要介绍了JavaScript中的console.profile()函数详细介绍,本文讲解了console.profile()函数的浏览器支持情况、console.profile()的使用、Firebug中Profile按钮的使用等内容,需要的朋友可以参考下

编写JavaScript程序时,如果需要知道某段代码的执行时间,可以使用console.time()。不过,在分析逻辑较为复杂的JavaScript程序,试图从中找出性能瓶颈的时候,console.time()就不适用了 — 深入分析逻辑较为复杂的JavaScript程序的运行就意味着插入大量的console.time()语句,而这无疑是不可接受的。对于复杂逻辑的JavaScript程序调优,正确的方法是使用console.profile()。

浏览器支持

安装了Firebug插件的Firefox、Google Chrome以及Safari都支持console.profile()语句,最新版的IE和Opera也提供了Profile功能。在几大浏览器上console.profile()的使用大同小异,本文仅介绍Firebug中console.profile()的使用情况。值得注意的一点是:如果使用Firebug控制台来直接编写JavaScript实验代码,那么console.profile()是无效的。

console.profile()的使用

console.profile()的使用非常简单:在需要开始profile的地方插入console.profile(),在结束profile的地方插入console.profileEnd()即可。以下面的代码为例:

复制代码 代码如下:

function doTask(){
    doSubTaskA(1000);
    doSubTaskA(100000);
    doSubTaskB(10000);
    doSubTaskC(1000,10000);
}
function doSubTaskA(count){
    for(var i=0;i<count;i++){}
}
 
function doSubTaskB(count){
    for(var i=0;i<count;i++){}
}
 
function doSubTaskC(countX,countY){
    for(var i=0;i<countX;i++){
        for(var j=0;j<countY;j++){}
    }
}

console.profile();
doTask();
console.profileEnd();

在运行doTask()函数前执行console.profile(),doTask()函数运行完成后执行console.profileEnd(),这样即可收集到doTask()函数运行过程中的细节信息。在Firebug的控制台中可以看到:

从结果中可以看到:此次profile时间共计101.901ms,涉及5次函数调用。结果的默认标题是”Profile”,可以通过向console.profile()函数传入参数来进行自定义。比如,使用console.profile(“Test Profile”)即可在结果中将此次profile的标题改为”Test Profile”,这对于同时执行多个profile过程的情况下尤为有用。具体profile结果中各列的含义为:

1.Function。函数名。
2.Calls。调用次数。比如,在上面的例子中,doSubTaskA()函数被执行了2次。
3.Percent。该函数调用所消耗的时间在总体时间中所占的百分比。
4.Own Time。除去调用其它函数所消耗的时间,该函数本身的耗时数量。比如,在上面的例子中,doTask()无疑执行了很长时间,但是因为其耗时全部花在了对其它函数的调用上,因此其本身所耗时间并不多,仅为0.097ms。
5.Time。与Own Time相反,不考虑对其它函数的调用因素,计算函数的总耗时。在上面的例子中,doTask()函数执行了101.901ms。对于Time和Own Time,也可以得到一个结论:如果Time比Own Time数值要大,那么该函数内部就涉及了对其它函数的调用。
6.Avg。计算函数的平均总耗时,其计算公式为:Avg=Time/Calls。在上面的例子中,doSubTaskA()函数被执行了2次,其总耗时为1.054ms,因此其平均总耗时为0.527ms。
7.Min。对该函数调用的最小耗时。比如,在上面的例子中,doSubTaskA()函数被执行了2次,其最小耗时,也就是耗时较少的那次调用花掉了0.016ms。
8.Max。对该函数调用的最大耗时。比如,在上面的例子中,doSubTaskA()函数被执行了2次,其最大耗时,也就是耗时较多的那次调用花掉了1.038ms。
9.File。函数所在的JS文件。

Firebug中Profile按钮的使用

除了在JavaScript代码中插入console.profile()语句,Firebug还提供了Profile按钮以便动态实时地对页面中的JavaScript代码进行profile。该按钮位置为:

当需要进行profile时,可以按下该按钮,如果接下来的页面操作触发了任何JavaScript代码,Firebug将会对此进行记录。profile过程结束时只要再一次按下该按钮即可。其最终结果与插入console.profile()语句所得到的结果时一致的。

相关文章

  • 如何基于layui的laytpl实现数据绑定的示例代码

    如何基于layui的laytpl实现数据绑定的示例代码

    这篇文章主要介绍了如何基于layui的laytpl实现数据绑定的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 基于JavaScript如何制作遮罩层对话框

    基于JavaScript如何制作遮罩层对话框

    遮罩层听起来貌似很复杂,其实说白了就是一个全界面的半透明的div,用户不可以点击下边的元素,或者说是点击没有反应,接下来通过本文给大家介绍JavaScript如何制作遮罩层对话框,对js遮罩层相关知识感兴趣的朋友一起学习吧
    2016-01-01
  • 慕课网题目之js实现抽奖系统功能

    慕课网题目之js实现抽奖系统功能

    这篇文章主要为大家详细介绍了慕课网题目之js抽奖系统功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • 斜45度寻路实现函数

    斜45度寻路实现函数

    没事写个寻路的,很简单,有需要的朋友可以参考下。
    2009-08-08
  • JavaScript错误处理

    JavaScript错误处理

    这篇文章主要介绍了JavaScript错误处理的相关资料,需要的朋友可以参考下
    2015-02-02
  • D3.js实现直方图的方法详解

    D3.js实现直方图的方法详解

    直方图在我们平常的时候经常见到,那么这篇文章给大家介绍了下如何使用D3.js实现直方图,文中通过实例介绍的很详细,有需要的朋友们可以参考借鉴。
    2016-09-09
  • javascript实现json页面分页实例代码

    javascript实现json页面分页实例代码

    这篇文章主要介绍了javascript实现json页面分页实例代码,需要的朋友可以参考下
    2014-02-02
  • 基于Arcgis for javascript实现百度地图ABCD marker的效果

    基于Arcgis for javascript实现百度地图ABCD marker的效果

    本篇文章由脚本之家小编给大家分享的基于Arcgis for javascript实现百度地图ABCD marker的效果,需要的朋友一起学习吧
    2015-09-09
  • 用js模拟JQuery的show与hide动画函数代码

    用js模拟JQuery的show与hide动画函数代码

    用javascript实现的模拟jquery下的显示与隐藏的动画效果,学习的朋友可以参考下。
    2010-09-09
  • 详解JavaScript中数组的一些特殊用法

    详解JavaScript中数组的一些特殊用法

    数组是几乎所有编程语言的基础语法,本文将不会介绍数组的基础语法和用法,而是从JavaScript中数组的一些特殊之处入手,通过这些少有特性的详细介绍,加深我们对数组的理解
    2023-02-02

最新评论