使用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 相关文章推荐
最新28个很棒的jQuery 教程
May 28 Javascript
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
Jun 28 Javascript
javascript 常用功能总结
Mar 18 Javascript
javascript对talbe进行动态添加、删除、验证实现代码
Mar 29 Javascript
js图片预加载示例
Apr 30 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
Oct 16 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
Oct 17 Javascript
js 定义对象数组(结合)多维数组方法
Jul 27 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
Feb 17 Javascript
javascript兼容性(实例讲解)
Aug 15 Javascript
vue-cli构建项目下使用微信分享功能
May 28 Javascript
利用React高阶组件实现一个面包屑导航的示例
Aug 23 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
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
PHP实现文件上传和多文件上传
2015/12/24 PHP
mac下多个php版本快速切换的方法
2016/10/09 PHP
动态改变textbox的宽高的js
2006/10/26 Javascript
根据鼠标的位置动态的控制层的位置
2009/11/24 Javascript
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
JS模拟实现Select效果代码
2015/09/24 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
原生JS实现拖拽图片效果
2020/08/27 Javascript
Node.js配合node-http-proxy解决本地开发ajax跨域问题
2016/08/31 Javascript
文件上传插件SWFUpload的使用指南
2016/11/29 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
AngularJs返回前一页面时刷新一次前面页面的方法
2018/10/09 Javascript
详解关于webpack多入口热加载很慢的原因
2019/04/24 Javascript
JavaScript实现单图片上传并预览功能
2019/09/30 Javascript
node.js使用stream模块实现自定义流示例
2020/02/13 Javascript
[01:06:12]VP vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python实现读取txt文件并画三维图简单代码示例
2017/12/09 Python
和孩子一起学习python之变量命名规则
2018/05/27 Python
浅谈django三种缓存模式的使用及注意点
2018/09/30 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
2020/12/04 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
非洲NO.1网上商店:Jumia肯尼亚
2016/08/18 全球购物
HelloFresh澳大利亚:订购你的美味食品盒、健康餐食
2018/03/28 全球购物
服装电子商务创业计划书
2014/01/30 职场文书
安全生产责任书
2014/03/12 职场文书
婚礼答谢宴主持词
2014/03/14 职场文书
阳光体育活动总结
2014/04/30 职场文书
职员竞岗演讲稿
2014/05/14 职场文书
酒店管理失职检讨书
2014/09/16 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
宿舍管理制度范本
2015/08/07 职场文书
读《儒林外史》有感:少一些功利,多一些真诚
2020/01/19 职场文书
vue基于Teleport实现Modal组件
2021/05/31 Vue.js