deno_std/testing/benchをNode.jsから使用する
はじめに
この記事では、Node.jsからdeno_stdのtesting/benchモジュールを使用する方法について解説します。
確認環境
- Deno: v1.10.3
- Node.js: v16.3.0
解説
benchmark.ts
というファイルがあったとします。
import {
bench,
BenchmarkRunResult,
runBenchmarks,
} from "https://deno.land/std@0.97.0/testing/bench.ts";
function sum(...numbers: number[]): number {
return numbers.reduce((x, y) => x + y, 0);
}
export function run(): Promise<BenchmarkRunResult> {
bench({
name: `sum`,
runs: 10000,
func: (b) => {
b.start();
sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
b.stop();
},
});
return runBenchmarks();
}
run
関数では、deno_stdのtesting/bench
モジュールを使用してベンチマークを取っています。
このファイルはTypeScriptで記述されているため、このままではNode.jsから利用することはできません。
Denoにはdeno bundle
コマンドというバンドラを内蔵しているため、これを使用してJavaScript形式へ変換してみます。
$ deno bundle benchmark.ts > benchmark.mjs
次に、benchmark.mjs
をimportしてベンチマークを実行するためのJavaScriptファイル(node.mjs
)を用意してみます。
import { run } from "./benchmark.mjs";
global.Deno = {};
run();
testing/bench
モジュールはDeno
オブジェクトが存在しないとエラーが発生してしまうため、上記のコードではglobal.Deno
に空オブジェクトを設定しています。
それでは、実行してみます。
$ node node.mjs
running 1 benchmark ...
benchmark sum ...
10000 runs avg: 0.00033167510032653806ms
benchmark result: DONE. 1 measured; 0 filtered
うまくいきました!
おわりに
この記事では、Node.jsからtesting/benchモジュールを使用する方法について解説しました。
Denoに向けて書かれた他のモジュールについても、この記事で解説したものと同様の方法によってNode.jsからも使用できる可能性がありますので、参考になれば幸いです。