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的链式调用之each函数
Dec 03 Javascript
jQuery前台数据获取实现代码
Mar 16 Javascript
ECMAScript 创建自己的js类库
Nov 22 Javascript
js输入框邮箱自动提示功能代码实现
Dec 10 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
Aug 15 Javascript
javascript继承机制实例详解
Nov 20 Javascript
jquery实现的用户注册表单提示操作效果代码分享
Aug 28 Javascript
最细致的vue.js基础语法 值得收藏!
Nov 03 Javascript
jQuery中$.grep() 过滤函数 数组过滤
Nov 22 Javascript
JS温故而知新之变量提升和时间死区
Jan 27 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
May 06 Javascript
如何在VUE中使用vue-awesome-swiper
Jan 04 Vue.js
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
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
php通过递归方式复制目录和子目录的方法
2015/03/13 PHP
PHP实现会员账号单唯一登录的方法分析
2019/03/07 PHP
取得父标签
2006/11/14 Javascript
js编码之encodeURIComponent使用介绍(asp,php)
2012/03/01 Javascript
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
2013/09/22 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
用js一次改变多个input的readonly属性值的方法
2014/06/11 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
javascript中caller和callee详解
2015/08/10 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
2016/08/15 Javascript
jquery点赞功能实现代码 点个赞吧!
2020/05/29 jQuery
浅谈React和Redux的连接react-redux
2017/12/04 Javascript
详解JavaScript中的坐标和距离
2019/05/27 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
python编写简单爬虫资料汇总
2016/03/22 Python
Python实现字符串与数组相互转换功能示例
2017/09/22 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
在双python下设置python3为默认的方法
2018/10/31 Python
基于python实现高速视频传输程序
2019/05/05 Python
在Python中构建增广矩阵的实现方法
2019/07/01 Python
python调用webservice接口的实现
2019/07/12 Python
浅析PEP572: 海象运算符
2019/10/15 Python
python3中编码获取网页的实例方法
2020/11/16 Python
纯CSS3实现地球自转实现代码(图文教程附送源码)
2012/12/26 HTML / CSS
连卡佛中国官网:Lane Crawford中文站
2018/01/27 全球购物
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
博柏利美国官方网站:Burberry美国
2020/11/19 全球购物
计算机开发个人求职信范文
2013/09/26 职场文书
给校长的建议书200字
2014/05/16 职场文书
2015年大班保育员工作总结
2015/05/18 职场文书
硕士毕业答辩开场白
2015/05/27 职场文书