使用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 相关文章推荐
jquery操作复选框(checkbox)的12个小技巧总结
Feb 04 Javascript
jquery实现图片预加载
Dec 25 Javascript
基于JavaScript实现弹出框效果
Feb 19 Javascript
Bootstrap的Refresh Icon也spin起来
Jul 13 Javascript
基于JavaScript实现的快速排序算法分析
Apr 14 Javascript
Angular2学习教程之TemplateRef和ViewContainerRef详解
May 25 Javascript
微信小程序实现文件、图片上传功能
Aug 18 Javascript
jQuery实现颜色打字机的完整代码
Mar 19 jQuery
js实现小时钟效果
Mar 25 Javascript
JS制作简易计算器的实例代码
Jul 04 Javascript
jQuery 实现扁平式小清新导航
Jul 07 jQuery
vue中echarts图表大小适应窗口大小且不需要刷新案例
Jul 19 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
discuz Passport 通行证 整合笔记
2008/06/30 PHP
解析php curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
php输入流php://input使用浅析
2014/09/02 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
PHP+mysql实现从数据库获取下拉树功能示例
2017/01/06 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
javascript下IE与FF兼容函数收集
2008/09/17 Javascript
[推荐]javascript 面向对象技术基础教程
2009/03/03 Javascript
jquery实现奇偶行赋值不同css值
2012/02/17 Javascript
DWZ table的原生分页浅谈
2013/03/01 Javascript
javascript 获取模态窗口的滚动位置代码
2013/08/06 Javascript
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
js检验密码强度(低中高)附图
2014/06/05 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
一个简易的js图片轮播效果
2017/07/22 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
web前端vue之vuex单独一文件使用方式实例详解
2018/01/11 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
2018/01/11 Javascript
详解Vue+axios+Node+express实现文件上传(用户头像上传)
2018/08/10 Javascript
Vue实现表格中对数据进行转换、处理的方法
2018/09/06 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
使用 Python 写一个简易的抽奖程序
2019/12/08 Python
Python使用Tkinter实现滚动抽奖器效果
2020/01/06 Python
python异常处理之try finally不报错的原因
2020/05/18 Python
利用Python pandas对Excel进行合并的方法示例
2020/11/04 Python
家得宝加拿大家装网上商店:The Home Depot加拿大
2016/08/27 全球购物
国外平面设计第一市场:99designs
2016/10/25 全球购物
哄娃神器4moms商店:美国婴童用品品牌
2019/03/07 全球购物
产品售后服务承诺书
2014/05/21 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
2016拓展训练心得体会范文
2016/01/12 职场文书
php 解析非标准json、非规范json
2021/04/01 PHP
python数字转对应中文的方法总结
2021/08/02 Python