使用console进行性能测试


Posted in Javascript onApril 27, 2015

对于前端开发人员,在开发过程中经常需要监控某些表达式或变量的值,如果使用用 debugger 会显得过于笨重,最常用的方法是会将值输出到控制台上方便调试。

最常用的语句就是console.log(expression)了。

从早前一道阿里实习生招聘笔试题目入手:

function f1() {
  console.time('time span');
}
function f2() {
  console.timeEnd('time span');
}
setTimeout(f1, 100);
setTimeout(f2, 200);

function waitForMs(n) {
  var now = Date.now();
    while (Date.now() - now < n) {
  }
}
waitForMs(500);//time span: 0ms

我们先说说关于console的高级操作,最后在一起分析这道题目。

trace

console.trace()用来追踪函数的调用过程。

在大型项目尤其是框架开发中,函数的调用轨迹可以十分复杂,console.trace()方法可以将函数的被调用过程清楚地输出到控制台上。

function tracer(a) {
   console.trace();
   return a;
}

function foo(a) {
   return bar(a);
}

function bar(a) {
   return tracer(a);
}

var a = foo('tracer');

使用console进行性能测试

table

使用console将对象以表格呈现

可将传入的对象,或数组以表格形式输出,相比传统树形输出,这种输出方案更适合内部元素排列整齐的对象或数组,不然可能会出现很多的 undefined。

var people = {
    flora: {
      name: 'floraLam',
      age: '12'
    },
    john: {
      name: 'johnMa',
      age: '45'
    },
    ray:{
      name:'rayGuo',
      age:'22'
    }
  };

  console.table(people);

火狐的控制台:

使用console进行性能测试

time timeEnd

计算程序的执行时间

可以将成对的console.time()和console.timeEnd()之间代码的运行时间输出到控制台上

console.time('计时器');
for (var i = 0; i < 1000; i++) {
   for (var j = 0; j < 1000; j++) {}
}
console.timeEnd('计时器');

以上代码计算console.time('计时器');和console.timeEnd('计时器');之间的代码块所需要的事件。

使用console进行性能测试

profile

使用console测试程序性能

开发中,我们常常要评估段代码或是某个函数的性能。在函数中手动打印时间固然可以,但显得不够灵活而且有误差。借助控制台以及console.profile()方法我们可以很方便地监控运行性能。

function parent() {
   for (var i = 0; i < 10000; i++) {
      childA()
   }
}
function childA(j) {
   for (var i = 0; i < j; i++) {}
}
console.profile('性能分析');
parent();
console.profileEnd();

上述代码计算console.profile('性能分析');和console.profileEnd();之间,代码块中涉及的函数的运行效率。

使用console进行性能测试

现在说回笔试题目

题目考察应聘者对console.time的了解和js单线程的理解。

使用console进行性能测试

console.time()语句和console.timeEnd()语句是用来对程序的执行进行计时的。

setTimeout()接受两个参数,第一个是回调函数,第二个是推迟执行的毫秒数。setTimeout()只是将事件插入了"任务队列",必须等到当前代码(执行栈)执行完,主线程才会去执行它指定的回调函数。

因为f1和f2被都setTimeout事先设置的定时器装到一个事件队列里面。本来 f1应该在100ms后就要执行了,但是因为waitForMs占用了线程,而执行JavaScript是单线程的,所以就没办法在100ms后执行那个 f1,所以需要等500ms等waitForMs执行完,然后在执行f1和f2,这时候f1和f2就几乎同时执行了。

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
Oct 29 Javascript
使用IE6看老赵的博客 jQuery初探
Jan 17 Javascript
javascript对象之内置对象Math使用方法
Apr 16 Javascript
javascript制作2048游戏
Mar 30 Javascript
jQuery实现不断闪烁文字的方法
May 15 Javascript
javascript自定义in_array()函数实现方法
Aug 03 Javascript
Jquery效果大全之制作电脑健康体检得分特效附源码下载
Nov 02 Javascript
Vue.js仿Metronic高级表格(一)静态设计
Apr 17 Javascript
JS实现简单拖拽效果
Jun 21 Javascript
layer.js open 隐藏滚动条的例子
Sep 05 Javascript
javascript用defineProperty实现简单的双向绑定方法
Apr 03 Javascript
vue全局使用axios的操作
Sep 08 Javascript
浅谈javascript实现八大排序
Apr 27 #Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
Apr 27 #Javascript
jQuery插件Tmpl的简单使用方法
Apr 27 #Javascript
javascript关于运动的各种问题经典总结
Apr 27 #Javascript
分享9点个人认为比较重要的javascript 编程技巧
Apr 27 #Javascript
javascript+html5实现仿flash滚动播放图片的方法
Apr 27 #Javascript
原生js和jQuery写的网页选项卡特效对比
Apr 27 #Javascript
You might like
配置PHP使之能同时支持GIF和JPEG
2006/10/09 PHP
一个PHP数组应该有多大的分析
2009/07/30 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
2014/11/18 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
文本框中,回车键触发事件的js代码[多浏览器兼容]
2010/06/07 Javascript
js 得到文件后缀(通过正则实现)
2013/07/08 Javascript
通过正则表达式实现表单验证是否为中文
2014/02/18 Javascript
jQuery实现首页顶部可伸缩广告特效代码
2015/04/15 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
深入理解setTimeout函数和setInterval函数
2016/05/20 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
2016/07/14 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
Vue基本使用之对象提供的属性功能
2019/04/30 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
python中去空格函数的用法
2014/08/21 Python
Python中用Descriptor实现类级属性(Property)详解
2014/09/18 Python
python使用xlrd实现检索excel中某列含有指定字符串记录的方法
2015/05/09 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
Python实现直方图均衡基本原理解析
2019/08/08 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
python实现超市商品销售管理系统
2019/10/25 Python
PyCharm中关于安装第三方包的三个建议
2020/09/17 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
python+selenium爬取微博热搜存入Mysql的实现方法
2021/01/27 Python
HTMl5的存储方式sessionStorage和localStorage详解
2014/03/18 HTML / CSS
意大利宠物用品购物网站:Bauzaar
2018/09/15 全球购物
实习指导老师评语
2014/04/26 职场文书
机械制造专业大学生自我鉴定
2014/09/19 职场文书
被告答辩状范文
2015/05/22 职场文书
教师反邪教心得体会
2016/01/15 职场文书
Java死锁的排查
2022/05/11 Java/Android