Skip to content

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

7 Commits

Folders and files

Repository files navigation

Markdown documentation SSG benchmark

Nuxt Content、Nuxt + Comark、Astro、ox-content のドキュメントサイト生成速度を、同一の Markdown corpusで比較するベンチマークです。パーサー単体の速度は対象外です。

Versions

  • Astro 7.0.9
  • Nuxt 4.4.8 / Nuxt Content 3.15.0
  • Nuxt 4.4.8 / Comark 0.5.1 / @comark/nuxt 0.5.1
  • ox-content Vite plugin 2.76.0 / Vite 8.1.4

バージョンは初回構築時点の最新版に固定しています。更新するときは、全実装を同じ タイミングで更新し、結果にバージョンを記録してください。

@ox-content/vite-plugin@2.76.0 の公開manifestは vite peer dependencyに開発用の Vite Plus aliasを指定しているため、標準Vite 8.1.4を使うこの構成ではpnpmがpeer warningを 表示します。公開READMEの通常のVite plugin利用方法ではビルドできることを確認済みです。

Corpus

docs/ 以下に10ディレクトリ、各1,000ファイル、合計10,000個のMarkdownを生成します。 生成処理と依存関係のインストール時間はベンチマークに含みません。

pnpm install
pnpm docs:generate

Build and verify

pnpm build:astro
pnpm build:nuxt-comark
pnpm build:nuxt-content
pnpm build:ox-content
pnpm verify
pnpm verify nuxt-comark

Benchmark

既定では各実装をランダムな順序で5回ずつクリーンビルドし、中央値をJSONに保存します。 ビルド時間に加え、プロセスツリーを100ms間隔でサンプリングした最大RSSと、成果物の HTML件数・総ファイル数・総バイト数も記録します。

pnpm bench
BENCH_RUNS=10 pnpm bench
pnpm bench astro ox-content

# 直前のビルド出力と内部キャッシュを残したまま再ビルド
BENCH_MODE=warm BENCH_RUNS=1 pnpm bench

依存関係キャッシュとOSのファイルキャッシュは保持し、各フレームワークのビルド出力と 内部生成物は実行前に削除します。これは一般的なCIの「依存関係キャッシュあり、ビルド キャッシュなし」に近い条件です。

BENCH_MODE=warm はクリーンアップを行いません。2回目のビルドを測る場合は、先に同じ corpusと設定でcold buildを完了させ、ソースを変更せずに実行してください。

本番の静的成果物を比較するため、source mapは全実装で明示的に無効化しています。Astroと ox-contentはViteのbuild.sourcemap: false、Nuxt系はこれに相当するNuxtのserver/client source mapとNitroのsourceMapをすべてfalseにしています。

nuxt-comarkはNuxt Contentを使用せず、Nitro server routeでMarkdownを直接読み込み、 Comarkで解析したASTをComarkRendererでSSRします。Nuxt Contentと同じ静的HTML設定・ prerender route一覧を使用するため、Nuxt/Nitro共通部分とContent処理の差を比較できます。

Nuxt Contentを大量のMarkdownに使用するときのindex、静的HTML設定、prerender並列度、 Bunプロファイルに関する注意点はNUXT_CONTENT_NOTES.mdにまとめて います。

Current comparison results

2026-07-15から16に、全ビルド出力とフレームワーク内部キャッシュを削除したcold build、 その直後に何も削除・変更せず2回目のwarm buildを各1回測定した参考値です。Nuxt Contentは 現在のベンチマーク既定構成であるstatic HTMLとpath indexを使用しています。 正式な比較には、同じ時点で複数回測定した中央値を使用してください。

実行環境:

  • Apple M1 Pro(10 logical CPUs)
  • 32 GiB RAM
  • macOS Darwin 25.5.0
  • Node.js 22.22.2
Implementation Cold build 2nd build (warm) Change HTML files Total files Output size
Astro 7 13.58 s 9.05 s -33.3% 10,000 10,000 39.72 MB
ox-content 13.67 s 15.17 s +11.0% 10,000 10,000 39.58 MB
Nuxt + Comark 43.08 s 43.83 s +1.7% 10,002 10,006 51.44 MB
Nuxt Content 82.83 s 46.46 s -43.9% 10,002 10,012 64.54 MB

AstroはコンテンツおよびViteキャッシュにより約33%短縮しました。Nuxt ContentはMarkdown 取り込みとSQLite構築を再利用するため約44%短縮します。Comark版は内部コンテンツキャッシュを 持たず毎回Markdownを解析するため、この単発測定ではwarmでの短縮を確認できませんでした。ox-contentは全HTMLを 再生成し、この単発測定ではwarm buildの短縮は確認できませんでした。

Nuxt + Comarkは現在のNuxt Content構成よりcoldで約48.0%、warmで約5.7%短縮しました。 Nuxt Contentの出力にはクライアント用のSQLite/WASMが含まれるため、総ファイル数と出力サイズも 増えています。

Nuxt Content optimization history

現在は最後の行をNuxt Contentベンチマークの既定構成として扱います。各行は設定を一つずつ 加えた単発結果で、Step changeは一つ前の行、vs initialは初期構成との比較です。

Configuration Cold build Step change vs initial Warm build Step change vs initial Output size
Initial configuration 288.98 s — — 256.92 s — — 161.75 MB
+ static HTML 279.87 s -3.2% -3.2% 248.68 s -3.2% -3.2% 64.53 MB
+ path index 81.14 s -71.0% -71.9% 48.62 s -80.5% -81.1% 64.54 MB
+ source maps disabled (current default) 82.83 s +2.1% -71.3% 46.46 s -4.4% -81.9% 64.54 MB

最大の速度改善はpath indexです。static HTML化は速度よりも生成物に効き、出力サイズを 約60.1%削減しました。設定と原因の詳細は Nuxt Content notesを参照してください。

source map無効化前後の値はいずれも別タイミングの単発測定で、通常buildの明確な速度改善は 確認できませんでした。後述するBun CPU profileからsource map合成処理を除き、本番条件に 揃えることを目的に既定設定へ採用しています。

最大RSSは、測定を実行した管理環境でプロセス一覧の取得が制限されたため記録できて いません。

Scope

計測対象には、Markdown探索、frontmatter検証、Markdown変換、ルート生成、HTML出力を 含めます。シンタックスハイライトと目次解析は有効です。検索インデックス、OG画像、 APIドキュメント生成、外部リンク検査は初期ベンチでは対象外です。ox-contentはこれらの 一部が既定で有効なため、設定で明示的に無効化しています。

CPU profiling

Nuxt ContentのCPU profileは、Bunでnuxt generate全体を計測するのを基本とします。

pnpm profile:nuxt-content

結果はprofiles/nuxt-content-ssg.mdに出力されます。route生成だけを詳しく調べたい場合は、 補助的にpnpm profile:nuxt-prerenderを使用できます。

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages