この記事は、Bun Advent Calendar 2023 の12/5に参加しています。
ここのところ Bun の記事を毎日書いてるのだけど、そういえば、速い凄いといいながら、まだ自前でベンチも取っていなかったなと反省して、軽く試してみた。
結果は、まぁBunの圧勝でした。
環境
クラウド: Azure VM (これはオンプレでも何でも良い)
OS: Ubuntu 20.04.6 LTS (GNU/Linux 5.15.0-1050-azure x86_64)
Bun: v1.0.14 ( https://bun.sh/blog )
Node.js: v20.9.0
もちろん、これでなければいけないという事はありません。
コードはこれ。
郵便局の郵便番号データ 18M のcsv(124,332行) を for で回しながら行数カウントするだけのスクリプトです。
console.time('csv read'); // 計測開始
const fs = require('fs');
const path='./KEN_ALL-utf8.CSV';// 郵便番号データ
const csv = fs.readFileSync(path, 'utf8');
const oj=csv.split('\n')
let count=0;
for(let i=0; i<oj.length;i++){
let line=oj[i].split(',')
count++;
}
console.log(count);
console.timeEnd('csv read'); // 計測終了
このコードを Node.js と Bunでやってみた。
結果はこう
上記のコードを単に node と bun を入れ替えて実行してみました。
$ node read-zip-from-csv.js
124332
csv read: 333.014ms
$ bun read-zip-from-csv.js
124332
[119.25ms] csv read
- node.js が 333.014ms
- bun が 119.25ms
ということで、何度やっても Bunの圧勝でした。
うーむ。まぁ、ベンチというものは目安に過ぎないとはいっても 同じJavaScriptのコードを使い、単純に node と bun を変えただけで、これ程の差が出ると、既存の Node.js コードの実行を Bun へ置き換えたくなってきました。
p.s. console.timeEnd の出力結果書式が、Node.js と Bunで少し違うのだな。
- node.js が csv read: 333.014ms
- bun が [119.25ms] csv read
個人的には Bun の方が見やすいと思うけど、他にも微妙な違いはあるのかもしれない。
P.S. この続きの記事です。各行ごとに速度を調べてみたら、const fs = require('fs'); を import fs from 'fs';に書き換えると更に速くなることが判りました。