typescriptをdenoとnode(tsx)で動かす時の起動速度比較
比較方法
denoの場合は以下の方法、
import { format } from "jsr:@std/datetime@0.224.0/format"
console.log(format(new Date(), "yyyy-MM-dd HH:mm:ss.SSS"));
node.jsの場合は以下の方法
import dateformat from "dateformat";
console.log(dateformat(new Date(), "yyyy-mm-dd HH:MM:ss.l"));
外部モジュールを読みつつ軽い処理を行う。
batで同じコマンドをループで繰り返して1回あたりの時間を計測。
windowsにはtimeコマンドなんてものは無い。
実行速度ではなく起動速度なので本番で使う時は気にする必要がないけど、何度も起動する開発中は効いてくる。
ランタイムのバージョン
denoとnodeのバージョンは以下の通り。
$ deno --version
deno 2.0.4 (stable, release, x86_64-pc-windows-msvc)
v8 12.9.202.13-rusty
typescript 5.6.2
$ node --version
v20.17.0
nodeのライブラリバージョン
- tsx: 4.19.2
実行方法
deno
直接typescriptを実行する
ランタイム:deno
cliコマンド:deno run index.ts
npm run
tsxをnpm script経由で実行。tsxを使う時の最も一般的な方法
ランタイム:node
cliコマンド:npm run xxx
package.jsonのscript:tsx ./src/index.ts
node mjs
tsxコマンドが読み込んでいるcli.mjs
ファイルを直接指定する。
実行されるレイヤーが1つ減ると思って確認
ランタイム:node
cliコマンド:npm run xxx
package.jsonのscript:node ./node_modules/tsx/dist/cli.mjs ./src/index.ts
vite
ボトルネックがどこにあるのかを調べる。viteでtsファイルをjsにコンパイルしてから実行。
ランタイム:node
cliコマンド:node dist/index.js
以下のviteの設定ファイルを設置した状態でvite build
を実行してjsファイルを作成。
import { defineConfig } from 'vite'
export default defineConfig({
build: {
lib: {
entry: ["./src/index.ts"],
fileName: "index",
name:"viteJs"
},
},
})
実行速度
name | 起動時間 |
---|---|
vite | 97 ms |
deno | 120 ms |
node mjs | 980 ms |
npm run | 1030 ms |
まとめ
typescriptを直接実行するのであればdenoがnodeの10倍近く起動が早い。
viteで事前にjsにビルドした場合はnodeの方が早いので、tsxが遅いとも言えるが。
速度だけを考えるならdeno一択だしだが、nodeでしか動かないフレームワークは山のようにある
Discussion