SvelteKitのSSRを行うNodeサーバーをBunに変えてみた
Last Updated on 2023年10月21日 by lemonade
概要
最近1.0.0が公開されたNodeやDenoに次ぐJavaScriptランタイム、Bunが速いとよく聞きます。BunのトップページにはReactのSSRで4倍くらいのリクエストを捌けそうなグラフがありますね。
そこでSvelteKitのSSRを行うNodeサーバーをBunに置き換えてみたという話になります。
やり方
こちらのsvelte-adapter-bunを使って行います。
bun add -d svelte-adapter-bun
公式通りに、プロジェクトのpackageにsvelte-adapter-bunの依存を追加します。そして、svelte.config.jsのadapterのimportを
import adapter from "svelte-adapter-bun";
に変更します。Bunの方のSvelteKitのサイトのほうがわかりやすいかも知れません。
そしてビルドの方法を変更します。Nodeの際は以下のような手順でサーバーにデプロイしていました。
npm install
npm run build
# 本番用の一式のステージングディレクトリ
mkdir dist
cp -r build dist/
cp package.json dist/
cp package-lock.json dist/
# 本番用の依存パッケージをインストール
cd dist
npm ci --omit dev
# distを本番環境にコピーする
# 実行
node build
Bunの場合は以下のようになりました。
bun install
bun run build
# 本番用の一式のステージングディレクトリ
mkdir dist
cp -r build dist/
cp package.json dist/
# 本番用の依存パッケージをインストール
cd dist
bun install --omit dev
# distを本番環境にコピーする
# 実行
bun ./build/index.js
package-lock.jsonがなくなったり、npm ciがbun installになっているのが大きな違いでしょうか。
パフォーマンス
パフォーマンスは結局上がったのかというのが一番気になると思われますが、もともと3台のサーバーで12.5req/secほどであれば安定して捌けていたところ、14req/secまで安定して捌けるようになりました。
すごく微妙。4倍のリクエストを捌いてくれることを期待していただけにちょっとがっかりです。パフォーマンスが落ちたり変わらなかったりするよりは全然マシだとは思いますし、1.12倍ほどであっても上がってくれたのは嬉しいですがあえてBunに切り替えるほどの価値は感じられませんでした。よくよくBunのページを見てみるとReactでBunのサーバーでレンダリングを行った場合だったのでviteの場合はまた別かも知れません。
もしやり方がおかしいなどの点がありましたら教えていただけるとありがたいです。