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脚本实现Web页面信息交互
Dec 21 Javascript
JavaScript使用prototype定义对象类型(转)[
Dec 22 Javascript
jQuery validate 中文API 附validate.js中文api手册
Jul 31 Javascript
Jquery $.getJSON 在IE下的缓存问题解决方法
Oct 10 Javascript
JavaScript中的数组特性介绍
Dec 30 Javascript
JS实现判断碰撞的方法
Feb 11 Javascript
JQuery中DOM实现事件移除的方法
Jun 13 Javascript
使用微信小程序开发前端【快速入门】
Dec 05 Javascript
Js利用prototype自定义数组方法示例
Oct 20 Javascript
基于vue+echarts 数据可视化大屏展示的方法示例
Mar 09 Javascript
微信小程序实现左滑删除效果
Nov 18 Javascript
vue 实现弹窗关闭后刷新效果
Apr 08 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服务器实现多session并发运行
2006/10/09 PHP
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
分享一段php获取linux服务器状态的代码
2014/05/27 PHP
php传值方式和ajax的验证功能
2017/03/27 PHP
javascript 单例/单体模式(Singleton)
2011/04/07 Javascript
javascript表单验证 - Parsley.js使用和配置
2013/01/25 Javascript
javascript 函数声明与函数表达式的区别介绍
2013/10/05 Javascript
Google 地图叠加层实例讲解
2016/08/06 Javascript
angular中的cookie读写方法
2017/08/02 Javascript
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
微信小程序template模板与component组件的区别和使用详解
2019/05/22 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
2019/07/25 Javascript
js实现一个简易计算器
2020/03/30 Javascript
js计时事件实现圆形时钟
2020/03/25 Javascript
Python多线程和队列操作实例
2015/06/21 Python
python 删除大文件中的某一行(最有效率的方法)
2017/08/19 Python
Python基于time模块求程序运行时间的方法
2017/09/18 Python
python利用插值法对折线进行平滑曲线处理
2018/12/25 Python
python实现连连看辅助之图像识别延伸
2019/07/17 Python
Python中利用LSTM模型进行时间序列预测分析的实现
2019/07/26 Python
python实现邮件发送功能
2019/08/10 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
2020/02/17 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
Django实现前台上传并显示图片功能
2020/05/29 Python
MAC彩妆澳洲官网:M·A·C AU
2021/01/17 全球购物
UNIX文件类型
2013/08/29 面试题
运动会入场式解说词
2014/02/18 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
党的群众路线教育实践活动心得体会(乡镇)
2014/11/03 职场文书
学校隐患排查制度
2015/08/05 职场文书
2016年十一促销广告语
2016/01/28 职场文书
《社戏》教学反思
2016/02/22 职场文书
2019年个人工作总结范文(3篇)
2019/08/27 职场文书
CSS基础详解
2021/10/16 HTML / CSS