Kim Blog

Benchmark写性能测试

October 13, 2019

前言

随着互联网时代的飞速发展,用户对产品性能越来越关注,特别是服务端程序,一个功能跑几十秒实在是无法忍受,于是总是想尽各种办法去提高性能,也包括 API 层面的选择,当然性能测试是我们选择的重要依据。

Benchmark

Benchmark 是 Node.js 上比较流行的性能测试工具,其链式调用的 API 也让我们写的更加顺畅,下面来尝鲜一下 Benchmark 做性能测试的乐趣。

假如说我们要做一个字符串转数字使用哪种方式比较快的测试,有三种方式:

  • 使用+转换
  • 使用parseInt转换
  • 使用Number构造函数转换

我们来对上面三个方式写三个方法:

exports.useAdd = str => +str

exports.useParseInt = str => parseInt(str, 10)

exports.useNumber = str => Number(str)

安装 benchmark.js

npm install benchmark —save-dev or yarn add benchmark —dev

引入 benchmark 并实例化 Suite 类

const Benchmark = require('benchmark')
const suite = new Benckmark.Suite()

开始写测试用例

const { useAdd, useNumber, useParseInt } = require('./string2number.js')
const Benchmark = require('benchmark')
const suite = new Benckmark.Suite()
const number = '100'

//测试用例
suite
  .add('+', () => {
    useAdd(number)
  })
  .add('parseInt', () => {
    useParseInt(number)
  })
  .add('Number', () => {
    useNumber(number)
  })
  .on('cycle', event => {
    //测试跑完输出数据
    console.log(String(event.target))
  })
  .on('complete', function() {
    console.log(`Fastest is ${this.filter('fastest').map('name')}`)
  })
  .run({ async: true })

上面在 suite 实例了使用了三个方法,分别是:add、on、run。

  • add:add 方法用于将一个测试用例添加到测试数组里面,并且实例化一个 Event 事件。
  • on:顾名思义就是用于监听 add 方法实例化的 Event 事件,并且有多重类型,这里写了两个类型:cyclecomplete,cycle 用于监听每一个测试是否跑完,在这里输出单个用例的测试信息;complete 用于监听整体测试是否完成,在这里可以找出执行最快的那一个。
  • run:run 方法用于启动测试,之前的工作都是在准备,到这里才开始正式启动,传入async:true使用异步的方式启动测试。

执行测试

node benchmark.js

测试结果

1 输出了每个用例的信息,分别执行了 81、82、86 个样本,可以看出使用+是最快的。

end


Kim

嗨!我是Kim,是一位大前端爱好者。如果您感兴趣,可以访问我的 GitHub