1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

BunとNodeを同じjsコードで自前ベンチしたらBunの圧勝だった

Last updated at Posted at 2023-11-28

この記事は、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 で回しながら行数カウントするだけのスクリプトです。

read-zip-from-csv.js
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で実行する
$ node read-zip-from-csv.js
124332
csv read: 333.014ms
bunで実行する
$ 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';に書き換えると更に速くなることが判りました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?