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 miscellanea -display data real time, using window.status
Jan 09 Javascript
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
Feb 27 Javascript
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
Jan 04 Javascript
js如何获取object类型里的键值
Feb 18 Javascript
分享10个原生JavaScript技巧
Apr 20 Javascript
jQuery替换节点用法示例(使用replaceWith方法)
Sep 08 Javascript
JavaScript实现二分查找实例代码
Feb 22 Javascript
vue-dialog的弹出层组件
May 25 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
Jan 09 Javascript
使用use注册Vue全局组件和全局指令的方法
Mar 08 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
Oct 08 Javascript
Vue过滤器,生命周期函数和vue-resource简单介绍
Jan 12 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
php安全开发 添加随机字符串验证,防止伪造跨站请求
2013/02/14 PHP
php读取excel文件的简单实例
2013/08/26 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
Thinkphp自定义生成缩略图尺寸的方法
2019/08/05 PHP
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
轻松创建nodejs服务器(10):处理上传图片
2014/12/18 NodeJs
js简单工厂模式用法实例
2015/06/30 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
2015/11/25 Javascript
基于js中的原型、继承的一些想法
2016/08/10 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
2016/08/29 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
2016/11/24 Javascript
easy ui datagrid 从编辑框中获取值的方法
2017/02/22 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
js和jquery判断数据类型的4种方法总结
2020/08/28 jQuery
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
python继承和抽象类的实现方法
2015/01/14 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
Python实现按逗号分隔列表的方法
2018/10/23 Python
Python 面试中 8 个必考问题
2018/11/16 Python
django中forms组件的使用与注意
2019/07/08 Python
PyInstaller的安装和使用的详细步骤
2020/06/02 Python
Web时代变迁及html5与html4的区别
2016/01/06 HTML / CSS
写出程序把一个链表中的接点顺序倒排
2014/04/28 面试题
保送生自荐信范文
2013/10/06 职场文书
夜大毕业生自我鉴定
2013/10/31 职场文书
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
中学生期中自我鉴定
2014/04/20 职场文书
学校周年庆活动方案
2014/08/22 职场文书
2014年群众路线党员自我评议
2014/09/24 职场文书
工人先锋号申报材料
2014/12/29 职场文书
CSS3常见动画的实现方式
2021/04/14 HTML / CSS
不负正版帝国之名 《重返帝国》引领SLG手游制作新的标杆
2022/04/07 其他游戏