使用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的树控件实现代码(asp.net+json)
Jul 11 Javascript
修改jQuery Validation里默认的验证方法
Feb 14 Javascript
JS延迟加载加快页面打开速度示例代码
Dec 30 Javascript
jQuery插件MixItUp实现动画过滤和排序
Apr 12 Javascript
JS获取下拉框显示值和判断单选按钮的方法
Jul 09 Javascript
jQuery中页面返回顶部的方法总结
Dec 30 Javascript
在页面中引入js的两种方法(推荐)
Aug 29 Javascript
详解封装基础的angular4的request请求方法
Jun 05 Javascript
JavaScript控制浏览器全屏显示简单示例
Jul 05 Javascript
React实现全局组件的Toast轻提示效果
Sep 21 Javascript
Vue脚手架编写试卷页面功能
Mar 17 Javascript
vue中利用three.js实现全景图的完整示例
Dec 07 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
php5 图片验证码实现代码
2009/12/11 PHP
CI框架中数据库操作函数$this-&gt;db-&gt;where()相关用法总结
2016/05/17 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
javascript实现颜色渐变的方法
2013/10/30 Javascript
jQuery自定义事件的简单实现代码
2014/01/27 Javascript
JavaScript入门教程之引用类型
2016/05/04 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
javaScript产生随机数的用法小结
2018/04/21 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
2019/10/23 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
2020/04/26 Javascript
理解Python中的绝对路径和相对路径
2017/08/30 Python
python write无法写入文件的解决方法
2019/01/23 Python
Kears+Opencv实现简单人脸识别
2019/08/28 Python
Python爬虫使用代理IP的实现
2019/10/27 Python
python实现一个猜拳游戏
2020/04/05 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
Python中的面向接口编程示例详解
2021/01/17 Python
python 可视化库PyG2Plot的使用
2021/01/21 Python
CSS3 实现的火焰动画
2020/12/07 HTML / CSS
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
英国最大的海报商店:GB Posters
2018/03/20 全球购物
英国浴室洗脸盆购物网站:Click Basin
2018/06/08 全球购物
宏碁西班牙官网:Acer西班牙
2021/01/08 全球购物
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
node中使用shell脚本的方法步骤
2021/03/23 Javascript
中专生职业生涯规划书范文
2014/01/10 职场文书
市场总经理岗位职责
2014/04/11 职场文书
俄语专业毕业生求职信
2014/07/12 职场文书
县长“四风”对照检查材料思想汇报
2014/10/05 职场文书
毕业典礼致辞
2015/07/29 职场文书
公司借款担保书
2015/09/22 职场文书
成本低的5个创业项目:投资小、赚钱快
2019/08/20 职场文书
导游词之开封禹王台风景区
2019/12/02 职场文书
python 逐步回归算法
2021/04/06 Python
星际争霸:毕姥爷vs解冻01
2022/04/01 星际争霸
SQL中的连接查询详解
2022/06/21 SQL Server