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 相关文章推荐
Jquery实战_读书笔记1—选择jQuery
Jan 22 Javascript
javascript 定义新对象方法
Feb 20 Javascript
整理8个很棒的 jQuery 倒计时插件和教程
Dec 12 Javascript
js实现在文本框光标处添加字符的方法介绍
Nov 24 Javascript
多个jquery.datatable共存,checkbox全选异常的快速解决方法
Dec 10 Javascript
谈一谈javascript中继承的多种方式
Feb 19 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
Apr 29 Javascript
Javascript中apply、call、bind的巧妙使用
Aug 18 Javascript
Bootstrap源码解读下拉菜单(4)
Dec 23 Javascript
JS从非数组对象转数组的方法小结
Mar 26 Javascript
webpack打包react项目的实现方法
Jun 21 Javascript
js console.log打印对象时属性缺失的解决方法
May 23 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
基于文本的访客签到簿
2006/10/09 PHP
手把手教你使用DedeCms V3的在线采集图文教程
2007/04/03 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
PHP排序二叉树基本功能实现方法示例
2018/05/26 PHP
accesskey 提交
2006/06/26 Javascript
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
VBS通过WMI监视注册表变动的代码
2011/10/27 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
js限制文本框只能输入数字方法小结
2014/06/16 Javascript
JavaScript实现的伸展收缩型菜单代码
2015/10/14 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
VUE中v-model和v-for指令详解
2017/06/23 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
JS数组扁平化、去重、排序操作实例详解
2020/02/24 Javascript
Python中死锁的形成示例及死锁情况的防止
2016/06/14 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
2019/03/14 Python
为什么说Python可以实现所有的算法
2019/10/04 Python
将python安装信息加入注册表的示例
2019/11/20 Python
python 可视化库PyG2Plot的使用
2021/01/21 Python
Python 图片处理库exifread详解
2021/02/25 Python
CSS3实现多背景模拟动态边框的效果
2016/11/08 HTML / CSS
一波HTML5 Canvas基础绘图实例代码集合
2016/02/28 HTML / CSS
蒙蒂塞罗商店:Monticello Shop
2018/11/25 全球购物
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
大学生收银员求职信分享
2014/01/02 职场文书
联谊会主持词
2014/03/26 职场文书
社区清明节活动总结
2014/07/04 职场文书
2014年入党积极分子党校培训心得体会
2014/07/08 职场文书
公司收款委托书范本
2014/09/20 职场文书
六一文艺汇演开幕词
2015/01/29 职场文书
千手观音观后感
2015/06/03 职场文书
用PYTHON去计算88键钢琴的琴键频率和音高
2022/04/10 Python