使用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.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
Jun 28 Javascript
JS获取整个页面文档的实现代码
Dec 15 Javascript
详谈jQuery中的this和$(this)
Nov 13 Javascript
JavaScript中this详解
Sep 01 Javascript
详解Matlab中 sort 函数用法
Mar 20 Javascript
jQuery实现基本动画效果的方法详解
Sep 06 jQuery
在Web关闭页面时发送Ajax请求的实现方法
Mar 07 Javascript
常见的浏览器存储方式(cookie、localStorage、sessionStorage)
May 07 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
Aug 23 Javascript
vue+axios 拦截器实现统一token的案例
Sep 11 Javascript
vue使用echarts图表自适应的几种解决方案
Dec 04 Vue.js
JavaScript实现下拉列表
Jan 20 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读取xml实例代码
2010/01/28 PHP
php使用function_exists判断函数可用的方法
2014/11/19 PHP
PHP实现创建微信自定义菜单的方法示例
2017/07/14 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
php实现JWT验证的实例教程
2020/11/26 PHP
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
JavaScript中的console.group()函数详细介绍
2014/12/29 Javascript
jQuery简单实现隐藏以及显示特效
2015/02/26 Javascript
jQuery实现预加载图片的方法
2015/03/17 Javascript
JavaScript+html5 canvas制作色彩斑斓的正方形效果
2016/01/27 Javascript
第一次接触JS require.js模块化工具
2016/04/17 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
2016/10/26 Javascript
Vuex简单入门
2017/04/19 Javascript
浅谈Vue下使用百度地图的简易方法
2018/03/23 Javascript
js简单遍历获取对象中的属性值的方法示例
2019/06/19 Javascript
vue中datepicker的使用教程实例代码详解
2019/07/08 Javascript
JS页面获取 session 值,作用域和闭包学习笔记
2019/10/16 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
python字符串替换的2种方法
2014/11/30 Python
Python实现的数据结构与算法之双端队列详解
2015/04/22 Python
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
Python 的内置字符串方法小结
2016/03/15 Python
python脚本实现xls(xlsx)转成csv
2016/04/10 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
python实现Flappy Bird源码
2018/12/24 Python
python实现桌面壁纸切换功能
2019/01/21 Python
python禁用键鼠与提权代码实例
2019/08/16 Python
使用Keras加载含有自定义层或函数的模型操作
2020/06/10 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
CSS3 渐变(Gradients)之CSS3 径向渐变
2016/07/08 HTML / CSS
简述数组与指针的区别
2014/01/02 面试题
中专生职业生涯规划书范文
2013/12/29 职场文书
机关工会开展学习雷锋活动总结
2014/03/01 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书