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 相关文章推荐
JavaScript Archive Network 集合
May 12 Javascript
javascript 跳转代码集合
Dec 03 Javascript
javascript阻止scroll事件多次执行的思路及实现
Nov 08 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
May 28 Javascript
自己编写的支持Ajax验证的JS表单验证插件
May 15 Javascript
javascript 日期相减-在线教程(附代码)
Aug 17 Javascript
vue技术分享之你可能不知道的7个秘密
Apr 09 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
Mar 07 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
Apr 11 Javascript
图解javascript作用域链
May 27 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
Nov 17 Vue.js
json.stringify()与json.parse()的区别以及用处
Jan 25 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 setcookie() cannot modify header information 的解决方法
2009/01/09 PHP
ecshop 批量上传(加入自定义属性)
2012/03/20 PHP
php缓冲 output_buffering的使用详解
2013/06/13 PHP
Php连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
PHP反射学习入门示例
2019/06/14 PHP
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
js DataSet数据源处理代码
2010/03/29 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
Extjs4.0 ComboBox如何实现三级联动
2016/05/11 Javascript
一览画面点击复选框后获取多个id值的方法
2016/05/30 Javascript
JS打印组合功能
2016/08/04 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
2017/05/11 Javascript
shiro授权的实现原理
2017/09/21 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
通过cordova将vue项目打包为webapp的方法
2019/02/02 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
2019/09/26 Javascript
layui 数据表格 根据值(1=业务,2=机构)显示中文名称示例
2019/10/26 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
js实现3D粒子酷炫动态旋转特效
2020/09/13 Javascript
解决Antd 里面的select 选择框联动触发的问题
2020/10/24 Javascript
JavaScript 声明私有变量的两种方式
2021/02/05 Javascript
简单介绍Python的轻便web框架Bottle
2015/04/08 Python
Python批量按比例缩小图片脚本分享
2015/05/21 Python
python批量制作雷达图的实现方法
2016/07/26 Python
Python判断文件或文件夹是否存在的三种方法
2017/07/27 Python
Python 多进程和数据传递的理解
2017/10/09 Python
Python实现修改文件内容的方法分析
2018/03/25 Python
Python中pip更新和三方插件安装说明
2018/07/08 Python
详解python的sorted函数对字典按key排序和按value排序
2018/08/10 Python
Python测试模块doctest使用解析
2019/08/10 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
2019/10/25 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
财务会计应届生求职信
2013/11/24 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
浅谈如何提高PHP代码质量之单元测试
2021/05/28 PHP