使用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 相关文章推荐
js获取网页高度(详细整理)
Dec 28 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
Jan 23 Javascript
YUI模块开发原理详解
Nov 18 Javascript
原生JavaScript实现合并多个数组示例
Sep 21 Javascript
JavaScript中的call方法和apply方法使用对比
Aug 12 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
Mar 13 Javascript
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
Jan 09 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
Feb 26 Javascript
微信小程序实现页面下拉刷新和上拉加载功能详解
Dec 03 Javascript
JS实现简单打字测试
Jun 24 Javascript
vue实现数字滚动效果
Jun 29 Javascript
vue element-ul实现展开和收起功能的实例代码
Nov 25 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
用Socket发送电子邮件
2006/10/09 PHP
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
php中的MVC模式运用技巧
2007/05/03 PHP
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
关于PHP中Session文件过多的问题及session文件保存位置
2016/03/17 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
2016/09/11 PHP
使用PHPMailer发送邮件实例
2017/02/15 PHP
总结一些PHP中好用但又容易忽略的小知识
2017/06/02 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
PHP7修改的函数
2021/03/09 PHP
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
JS字符串截取函数实例
2013/12/27 Javascript
Jquery跳到页面指定位置的方法
2014/05/12 Javascript
new Date()问题在ie8下面的处理方法
2014/07/31 Javascript
Bootstrap笔记之缩略图、警告框实例详解
2017/03/09 Javascript
详解vue mixins和extends的巧妙用法
2017/12/20 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
[01:21:07]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
python实现从网络下载文件并获得文件大小及类型的方法
2015/04/28 Python
Python 基础教程之包和类的用法
2017/02/23 Python
Python解析命令行读取参数--argparse模块使用方法
2018/01/23 Python
Python编写一个优美的下载器
2018/04/15 Python
Python 调用 zabbix api的方法示例
2019/01/06 Python
实时获取Python的print输出流方法
2019/01/07 Python
Keras在训练期间可视化训练误差和测试误差实例
2020/06/16 Python
CSS的pointer-events属性详细介绍(作用和注意事项)
2014/04/23 HTML / CSS
网上常见的一份Linux面试题(多项选择部分)
2014/09/09 面试题
学生会主席事迹材料
2014/01/28 职场文书
班干部演讲稿
2014/04/24 职场文书
爱心捐款倡议书范文
2014/05/12 职场文书
店铺转让协议书
2014/12/02 职场文书
聘任通知书
2015/09/21 职场文书
解决pytorch-gpu 安装失败的记录
2021/05/24 Python
python函数的两种嵌套方法使用
2022/04/02 Python
SQL Server2019安装的详细步骤实战记录(亲测可用)
2022/06/10 SQL Server