使用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实现自定义对话框的代码
Jun 15 Javascript
关于使用 jBox 对话框的提交不能弹出问题解决方法
Nov 07 Javascript
javascript时间函数基础介绍
Mar 28 Javascript
js/jquery判断浏览器的方法小结
Sep 02 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
Mar 10 Javascript
js窗口关闭提示信息(兼容IE和firefox)
Oct 23 Javascript
第四章之BootStrap表单与图片
Apr 25 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
Sep 06 jQuery
详解基于Koa2开发微信二维码扫码支付相关流程
May 16 Javascript
vue加载完成后的回调函数方法
Sep 07 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
May 16 Javascript
js prototype深入理解及应用实例分析
Nov 25 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操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
19个Android常用工具类汇总
2014/12/30 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
不安全的常用的js写法
2009/09/15 Javascript
查询绑定数据岛的表格中的文本并修改显示方式的js代码
2009/12/15 Javascript
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
javascript中的继承实例代码
2011/04/27 Javascript
JavaScript 的继承
2011/10/01 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
深入理解JavaScript中的传值与传引用
2013/12/09 Javascript
javascript中不提供sleep功能如何实现这个功能
2014/05/27 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
JavaScript操作XML文件之XML读取方法
2015/06/09 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
利用JS判断鼠标移入元素的方向
2016/12/11 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
2020/07/18 Javascript
Javascript中Math.max和Math.max.apply的区别和用法详解
2020/08/24 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
python解析xml模块封装代码
2014/02/07 Python
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
使用grappelli为django admin后台添加模板
2014/11/18 Python
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
用Python实现web端用户登录和注册功能的教程
2015/04/30 Python
Python3.x对JSON的一些操作示例
2017/09/01 Python
浅谈Django REST Framework限速
2017/12/12 Python
Pandas 合并多个Dataframe(merge,concat)的方法
2018/06/08 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
2020/04/29 Python
利用CSS3实现自定义滚动条代码分享
2016/08/18 HTML / CSS
HTML5实现移动端复制功能
2018/04/19 HTML / CSS
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
2013年员工自我评价范文
2013/12/27 职场文书
房屋租赁协议书
2014/10/18 职场文书
opencv读取视频并保存图像的方法
2021/06/04 Python