使用Benchmark.js和jsPerf分析代码性能
来源:互联网 发布:重庆市网络作家协会 编辑:程序博客网 时间:2024/04/27 17:44
前言
前端开发中,掌握好浏览器的特性进行有针对性的性能调优是一项基本工作,同时,比较不同代码的执行速度也是一项关键的工作。
比如,当我们想比较RegExp的test方法和String对象的indexOf方法查找字符串谁的速度更快的话,js代码在不同的浏览器,不同的操作系统环境运行的效率可能是不一样的,这就是为什么我们需要对其进行基准测试,在做基准测试方面,我们可以使用Benchmark.js和使用jsPerf(一个基于JSLitmus的基准测试库)。我们可以使用jsPerf来分享你的基准测试。
Benchmark.js 的使用
github 地址:https://github.com/bestiejs/b…
我们在很多github 开源项目中,往往都能看到benchmark文件夹,比如下面这个:
于是Google之,发现这是用来做基准测试的。于是乎:
首先我们在系统根目录下,通过npm intsall benchmark 来安装benchmark。该模块会被写入node_modules文件夹中,我们在test.js文件中通过require方法引入该模块。
将如下代码写入test.js文件,该文件置于系统根目录下:
var Benchmark = require('benchmark');var suite = new Benchmark.Suite;// 添加测试suite.add('RegExp#test', function() { /o/.test('Hello World!');}) .add('String#indexOf', function() { 'Hello World!'.indexOf('o') > -1; })// add listeners .on('cycle', function(event) { console.log(String(event.target)); }) .on('complete', function() { console.log('Fastest is ' + this.filter('fastest').pluck('name')); })// run async .run({ 'async': true });
然后在终端执行node test.js 可见输出结果如下:
➜ ~ git:(master) ✗ node test.jsRegExp#test x 9,847,928 ops/sec ±1.47% (83 runs sampled)String#indexOf x 23,366,017 ops/sec ±0.91% (96 runs sampled)Fastest is String#indexOf
结果最快的就是String对象的indexOf方法,其中,Ops/sec 测试结果以每秒钟执行测试代码的次数(Ops/sec)显示,这个数值越大越好。除了这个结果外,同时会显示测试过程中的统计误差,以及相对最好的慢了多少(%)
call和apply的比较var Benchmark = require('benchmark');var suite = new Benchmark.Suite;var arr1 = function (str) { return [].slice.apply(str);};var str2 = function (str) { return [].slice.call(str);};// 添加测试suite.add('arr1', function() { arr1('test');}) .add('str2', function() { str2('test'); })// add listeners .on('cycle', function(event) { console.log(String(event.target)); }) .on('complete', function() { console.log('Fastest is ' + this.filter('fastest').pluck('name')); })// run async .run({ 'async': true });
输出如下内容:
arr1 x 596,505 ops/sec ±1.14% (95 runs sampled)str2 x 627,822 ops/sec ±1.27% (92 runs sampled)Fastest is str2
本地的使用
本地使用Benchmark需要引入如下三个文件:
<script src="lodash.js"></script><script src="platform.js"></script><script src="benchmark.js"></script>
jsPerf 的使用
jsPerf 提供了一个简便的方式来创建和共享测试用例,并可以比较不同JavaScript代码段的性能。jsPerf也是基于Benchmark来运行的。
打开jsPerf站点:http://jsperf.com/,先将必填的项目填了。其中,slug是短名称,会生成一个网址,因此不可与别人的重复。然后在Code snippets to compare 区域填入title和用于测试的code。最后点击save test case 完成验证即可。浏览器会自动跳转到测试页面
Async选项框是用来测试一些异步调用的性能的,我们的代码没有使用异步方法,所以不必勾选。
运行测试
点击“Run tests”按钮开始测试两种算法的性能。建议在运行性能测试之前,关闭无关的浏览器页面,关闭其他程序,退出不必要的后台进程,以保证结果不受其他环境的影响。你也可以通过点击个别测试用例的名字单独运行这个例子
点击该链接查看性能比较:http://jsperf.com/huang
jsPerf还会统计所有运行过这个测试用例的浏览器的比较结果,显示在下方的Browserscope区域,可以通过它直观地看出各个版本浏览器的性能横向和纵向比较情况。
可以看到Firefox下的执行速度明显高于Chrome
查看别人的测试用例
我们可以通过 http://jsperf.com/browse 浏览最新提交的250项最新测试用例。我们也可以使用底部的Revisions来查看不同的版本,也就是不同浏览器的测试用例情况。
总结
John Resig 在其博文 JavaScript 基准测试的质量 中提到,应该尽量考虑到每个测试结果的误差并去减小它。扩大测试的样本值,健全的测试执行,都能够起到减少误差的作用。
转自:https://segmentfault.com/a/1190000003486676
- 使用Benchmark.js和jsPerf分析代码性能
- JSPerf-javascript代码性能测试利器
- 使用benchmark.js进行前端代码基准测试
- STREAM Benchmark及其操作性能分析
- STREAM Benchmark及其操作性能分析
- codeigniter源代码分析 - 性能分析类 Benchmark.php
- Redis源码分析(十三)--- redis-benchmark性能测试
- .NET : 使用代码性能分析工具
- Redis性能测试——redis-benchmark使用教程
- disk benchmark和bonnie++,noatime对性能的影响
- Redis Benchmark 性能测试
- benchmark测试IO性能
- Benchmark 性能测试简介
- 如何使用VSTS工具来分析软件的代码和性能?
- 利用firebug的console.profile分析js代码性能
- Apache Benchmark安装、参数含义&使用总结、结果分析
- Apache Benchmark安装、参数含义&使用总结、结果分析
- EventBus使用和代码分析
- 解除2003中IIS对上传文件大小的限制
- ROS总结——ROS消息和ROS服务
- lnmp的php编译参数
- Android permission,uses-permission,permission-group,permission-tree,uses-permission-sdk-23的区别
- Java学习提要——浅述'Thread类'和'Runnable接口'的区别
- 使用Benchmark.js和jsPerf分析代码性能
- subplot 真正含义
- java 动态绑定 以及 内部实现机制
- 可变参数的使用(法二)
- 效率篇-“私人订制”Openstack管理后台
- 计算机程序设计艺术一线性表“逻辑结构”2
- [XOR最小生成树 期望 DP] BZOJ 4770 图样
- 老大哥Logger
- 虚拟机中CentOS6.8通过NAT模式链接外网