使用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 走马灯简单实例
Nov 21 Javascript
JS扩展方法实例分析
Apr 15 Javascript
JavaScript调用浏览器打印功能实例分析
Jul 17 Javascript
javascript实现的淘宝旅行通用日历组件用法实例
Aug 03 Javascript
很棒的js Tab选项卡切换效果
Aug 30 Javascript
使用BootStrap进行轮播图的制作
Jan 06 Javascript
bootstrap-table组合表头的实现方法
Sep 07 Javascript
详解为Bootstrap Modal添加拖拽的方法
Jan 05 Javascript
JS 使用 window对象的print方法实现分页打印功能
May 16 Javascript
create-react-app修改为多页面支持的方法
May 17 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
Sep 03 jQuery
JavaScript事件对象深入详解
Dec 30 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学习笔记 用户注册模块用户类以及验证码类
2011/09/20 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
js cookies 常见网页木马挂马代码 24小时只加载一次
2009/04/13 Javascript
JavaScript 布尔操作符解析  &amp;&amp; || !
2012/08/10 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
jquery mobile changepage的三种传参方法介绍
2013/09/13 Javascript
浅谈JS闭包中的循环绑定处理程序
2014/11/09 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
JQuery控制图片由中心点逐渐放大效果
2016/06/26 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
Vue学习笔记进阶篇之多元素及多组件过渡
2017/07/19 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
vue添加锚点,实现滚动页面时锚点添加相应的class操作
2020/08/10 Javascript
React冒泡和阻止冒泡的应用详解
2020/08/18 Javascript
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
Python图像处理之简单画板实现方法示例
2018/08/30 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
2019/08/09 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
值得收藏的HTML5资源(学习html5的朋友可以收藏下)
2010/07/20 HTML / CSS
美的官方商城:Midea
2016/09/14 全球购物
Etam俄罗斯:法国女士内衣和家居服网上商店
2019/10/30 全球购物
Linux的文件类型
2016/07/05 面试题
外贸业务员求职信范文
2013/12/12 职场文书
教师个人查摆剖析材料
2014/10/14 职场文书
辞职信标准格式
2015/02/27 职场文书
销售合作意向书范本
2015/05/08 职场文书
2016年母亲节寄语
2015/12/04 职场文书
Java多条件判断场景中规则执行器的设计
2021/06/26 Java/Android
Docker官方工具docker-registry案例演示
2022/04/13 Servers