使用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 相关文章推荐
java和javascript获取word文档的书签位置对比
Jun 19 Javascript
详解JavaScript数组和字符串中去除重复值的方法
Mar 07 Javascript
node.js实现爬虫教程
Aug 25 Javascript
很酷的星级评分系统原生JS实现
Aug 25 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
Feb 13 Javascript
js实现抽奖效果
Mar 27 Javascript
详解vue-cli本地环境API代理设置和解决跨域
Sep 05 Javascript
react+redux的升级版todoList的实现
Dec 18 Javascript
JavaScript实现学生在线做题计时器功能
Dec 05 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
Jun 04 Javascript
一篇文章带你浅入webpack的DLL优化打包
Feb 20 Javascript
Vue页面跳转传递参数及接收方式
Sep 09 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实现的遍历文件夹下所有文件,编辑删除
2010/01/05 PHP
PHP 图像尺寸调整代码
2010/05/26 PHP
php printf输出格式使用说明
2010/12/05 PHP
php命令行用法入门实例教程
2014/10/27 PHP
PHP时间类完整实例(非常实用)
2015/12/25 PHP
php基于jquery的ajax技术传递json数据简单实例
2016/04/15 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
2017/11/06 PHP
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
封装的jquery翻页滚动(示例代码)
2013/11/18 Javascript
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
2014/09/26 NodeJs
JavaScript中exec函数用法实例分析
2015/06/08 Javascript
快速掌握WordPress中加载JavaScript脚本的方法
2015/12/17 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
2016/11/04 Javascript
将input框中输入内容显示在相应的div中【三种方法可选】
2017/05/08 Javascript
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
各种选择框jQuery的选中方法(实例讲解)
2017/06/27 jQuery
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
python zip文件 压缩
2008/12/24 Python
Django中的cookie和session
2019/08/27 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
网易微博Web App用HTML5开发的过程介绍
2012/06/13 HTML / CSS
Volcom英国官方商店:美国殿堂级滑板、冲浪、滑雪服装品牌
2019/03/13 全球购物
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
医院护士求职自荐信格式
2013/09/21 职场文书
会计找工作求职信范文
2013/12/09 职场文书
书法培训心得体会
2014/01/05 职场文书
回门宴父母答谢词
2014/01/26 职场文书
校园学雷锋活动月总结
2014/03/09 职场文书
2014年体检中心工作总结
2014/12/23 职场文书
长城导游词
2015/01/30 职场文书
Python借助with语句实现代码段只执行有限次
2022/03/23 Python
Redis实战之Lettuce的使用技巧详解
2022/12/24 Redis