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


Posted in Javascript onDecember 29, 2014

编写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的控制台中可以看到:

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

从结果中可以看到:此次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。该按钮位置为:

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

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

Javascript 相关文章推荐
做网页的一些技巧(续)
Feb 01 Javascript
JS写的数字拼图小游戏代码[学习参考]
Oct 29 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
Feb 12 Javascript
jquery实现submit提交表单
Feb 03 Javascript
jquery easyUI中ajax异步校验用户名
Aug 19 Javascript
JS/jQuery判断DOM节点是否存在的简单方法
Nov 24 Javascript
js实现悬浮窗效果(支持拖动)
Mar 09 Javascript
Node 升级到最新稳定版的方法分享
May 17 Javascript
JavaScript设计模式之构造函数模式实例教程
Jul 02 Javascript
小程序实现展开/收起的效果示例
Sep 22 Javascript
Node.js事件的正确使用方法
Apr 05 Javascript
js实现GIF图片的分解和合成
Oct 24 Javascript
jQuery中element选择器用法实例
Dec 29 #Javascript
JavaScript中的console.time()函数详细介绍
Dec 29 #Javascript
JavaScript前端图片加载管理器imagepool使用详解
Dec 29 #Javascript
JavaScript版的TwoQueues缓存模型
Dec 29 #Javascript
浅谈重写window对象的方法
Dec 29 #Javascript
JavaScript中的console.log()函数详细介绍
Dec 29 #Javascript
深入分析原生JavaScript事件
Dec 29 #Javascript
You might like
PHP IF ELSE简化/三元一次式的使用
2011/08/22 PHP
PHP容易忘记的知识点分享
2013/04/30 PHP
解析如何屏蔽php中的phpinfo()函数
2013/06/06 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
PHP如何获取Cookie并实现模拟登录
2020/07/16 PHP
JavaScript 动态改变图片大小
2009/06/11 Javascript
JavaScript中“基本类型”之争小结
2013/01/03 Javascript
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
js 获取元素在页面上的偏移量的方法汇总
2015/04/13 Javascript
JavaScript中使用Math.floor()方法对数字取整
2015/06/15 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
JavaScript修改作用域外变量的方法
2016/03/25 Javascript
javascript如何创建对象
2016/08/29 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
python学习手册中的python多态示例代码
2014/01/21 Python
Python中文字符串截取问题
2015/06/15 Python
十个Python程序员易犯的错误
2015/12/15 Python
Python实现的插入排序算法原理与用法实例分析
2017/11/22 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
redis数据库及与python交互用法简单示例
2019/11/01 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
Python3 把一个列表按指定数目分成多个列表的方式
2019/12/25 Python
Python qrcode 生成一个二维码的实例详解
2020/02/12 Python
在Python中字典按值排序的实现方法
2020/11/12 Python
matplotlib之属性组合包(cycler)的使用
2021/02/24 Python
个人贷款承诺书
2014/03/28 职场文书
初三学生评语大全
2014/04/24 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书
2014幼儿园保育员工作总结
2014/11/10 职场文书
升学宴学生答谢词
2015/01/05 职场文书
2015年教学工作总结
2015/04/02 职场文书
2015年司法所工作总结
2015/04/27 职场文书
2015年扶贫帮困工作总结
2015/05/20 职场文书
六一亲子活动感想
2015/08/07 职场文书