使用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 相关文章推荐
判断目标是否是window,document,和拥有tagName的Element的代码
May 31 Javascript
js实现addClass,removeClass,hasClass的函数代码
Jul 13 Javascript
JS常用函数使用指南
Nov 23 Javascript
JQuery中属性过滤选择器用法实例分析
May 18 Javascript
JavaScript中for循环的使用详解
Jun 03 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
Jun 08 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
Jul 18 jQuery
代码分析vue中如何配置less
Sep 28 Javascript
Vue实现类似Spring官网图片滑动效果方法
Mar 01 Javascript
vue elementui el-form rules动态验证的实例代码详解
May 23 Javascript
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
Nov 13 Javascript
详解Vue3 Teleport 的实践及原理
Dec 02 Vue.js
浅谈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的一些小问题
2010/07/03 PHP
PHP的autoload机制的实现解析
2012/09/15 PHP
9个实用的PHP代码片段分享
2015/01/22 PHP
PHP上传图片类显示缩略图功能
2016/06/30 PHP
测试你的JS的掌握程度的代码
2009/12/09 Javascript
jquery实现焦点图片随机切换效果的方法
2015/03/12 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
javascript对浅拷贝和深拷贝的详解
2016/10/14 Javascript
微信小程序 石头剪刀布实例代码
2017/01/04 Javascript
vue的mixins属性详解
2018/03/14 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
2019/03/07 Javascript
微信小程序3D轮播实现代码
2019/09/19 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
JavaScript this关键字指向常用情况解析
2020/09/02 Javascript
antd table按表格里的日期去排序操作
2020/11/17 Javascript
[02:27]刀塔重生降临
2015/10/14 DOTA
Python 获取新浪微博的最新公共微博实例分享
2014/07/03 Python
Python调用SQLPlus来操作和解析Oracle数据库的方法
2016/04/09 Python
对Python的Django框架中的项目进行单元测试的方法
2016/04/11 Python
PyQt5每天必学之弹出消息框
2018/04/19 Python
Python3.4 tkinter,PIL图片转换
2018/06/21 Python
对python多线程中Lock()与RLock()锁详解
2019/01/11 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
python 装饰器功能与用法案例详解
2020/03/06 Python
Python内置方法和属性应用:反射和单例(推荐)
2020/06/19 Python
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
捷科时代的软件测试笔试题
2015/11/09 面试题
动物学专业毕业生求职信
2013/10/11 职场文书
求职面试个人自我评价
2014/02/28 职场文书
村抢险救灾方案
2014/05/09 职场文书
汽车运用工程专业求职信
2014/06/18 职场文书
美容院员工规章制度
2015/08/05 职场文书
导游词之泉州崇武古城
2019/12/20 职场文书