Skip to content

Performance Test Results ​

Project Information ​

  • plain-nuxt: ./test/fixtures/plain-nuxt
  • i18n-micro: ./test/fixtures/i18n-micro
  • i18n: ./test/fixtures/i18n
  • CLI: pnpm test:performance

Description ​

Compares plain Nuxt, i18n-micro, and @nuxtjs/i18n under one shared dictionary profile via untestutils/perf.

Focus: build time, peak RSS, deployable code vs translations (asset) vs total, and load (Artillery).

Methodology notes ​

  • Metrics are means of 3 consecutive runs per fixture (not interleaved).
  • Artifact: Nitro node-server .output/server/index.mjs after forced nuxi build; nuxt-i18n-micro is the built module dist (not dev:prepare jiti stub). See performance-methodology.md.
  • Translations = bundle.asset (locale JSON, chunks/raw/, matching locale chunks via isTranslationFile).
  • plain-nuxt serves the same leaf volume as static JSON — I/O-heavy under load, not “i18n overhead”.
  • Load profile --load full: warm 6s@6 + main 60s@60 uncapped (historical).
  • Cool-downs --cool fast (see methodology doc).
  • Artillery Error rate in tables is HTTP-status errors from the load metrics. Charts also plot vusers.failed (client timeouts under saturation); those can be high while HTTP error rate stays 0%.
  • Each of the runs builds is forced (no warm-cache zeroing of build time).

Runs ​

All metrics below are means across 3 runs.


Fixture profile ​

KnobValue
Locales4 (en, de, ru, fr)
Pages2 (index, page)
Index treedepth 5, branch 7 → 16,807 leaf keys / locale
Secondary pagesdepth 5, branch 6 → 7,776 leaf keys / page / locale
GoalDefault CLI profile (--locales 4 --keys 10000); raise knobs for regression-radar loads

Dictionaries come from test/fixtures/perf-shared/runtime.json (written by the CLI) so all three fixtures stay aligned.

Dependency Versions ​

DependencyVersion
nodev22.23.2
nuxt4.5.2
nuxt-i18n-micro3.29.8
@nuxtjs/i18n10.6.0

Source dictionaries (pre-build) ​

FixtureOn-disk locale data
plain-nuxt114.88 MB
i18n-v106.8 MB
i18n-micro6.8 MB

From runtime.json (4 locales, 16,807 index leaf keys).

Build Performance for test/fixtures/plain-nuxt ​

  • Build Time: 4.59 seconds
  • Bundle Size: 8.07 MB (code: 1.26 MB, translations: 6.8 MB)
  • Output dirs: public: 7 MB, server: 1.06 MB
  • Max / Avg CPU: 226.73% / 155.16%
  • Max / Avg Memory: 890.16 MB / 473.88 MB

Build Performance for test/fixtures/i18n ​

  • Build Time: 5.48 seconds
  • Bundle Size: 9.15 MB (code: 1.95 MB, translations: 7.21 MB)
  • Output dirs: public: 323.47 KB, server: 8.84 MB
  • Max / Avg CPU: 239.30% / 167.34%
  • Max / Avg Memory: 1325.84 MB / 670.48 MB

Build Performance for test/fixtures/i18n-micro ​

  • Build Time: 4.99 seconds
  • Bundle Size: 8.28 MB (code: 1.48 MB, translations: 6.8 MB)
  • Output dirs: public: 7.08 MB, server: 1.21 MB
  • Max / Avg CPU: 232.93% / 161.92%
  • Max / Avg Memory: 995.58 MB / 559.91 MB

Build Performance Summary (mean of 3 runs) ​

ProjectBuild TimeCode BundleTranslationsTotal
plain-nuxt (baseline)4.59s1.26 MB6.8 MB8.07 MB
i18n-v105.48s1.95 MB7.21 MB9.15 MB
i18n-micro4.99s1.48 MB6.8 MB8.28 MB

“Total” = code + translations (bundle.asset). Translations include locales/, _locales/, chunks/raw/, and matching locale chunks.

Loading chart...
Loading chart...
Loading chart...
Loading chart...

Load Results for plain-nuxt ​

Resource Usage ​

  • Max / Avg CPU: 142.87% / 119.18%
  • Max / Avg Memory: 559.38 MB / 472.97 MB

Artillery ​

  • Duration: 86.55s · RPS: 108.00 · Error rate: 0.00%
  • Latency avg / p50 / p95 / p99: 1877.63 / 663.60 / 12547.07 / 12983.90 ms
Loading chart...
Loading chart...

Load Results for i18n-v10 ​

Resource Usage ​

  • Max / Avg CPU: 135.00% / 106.04%
  • Max / Avg Memory: 527.66 MB / 418.26 MB

Artillery ​

  • Duration: 78.75s · RPS: 161.33 · Error rate: 0.00%
  • Latency avg / p50 / p95 / p99: 857.43 / 106.00 / 6702.60 / 6977.03 ms
Loading chart...
Loading chart...

Load Results for i18n-micro ​

Resource Usage ​

  • Max / Avg CPU: 131.37% / 101.79%
  • Max / Avg Memory: 474.45 MB / 305.38 MB

Artillery ​

  • Duration: 73.18s · RPS: 251.33 · Error rate: 0.00%
  • Latency avg / p50 / p95 / p99: 486.20 / 86.20 / 3534.10 / 3830.03 ms
Loading chart...
Loading chart...

Load Summary (mean of 3 runs) ​

Artillery ​

ProjectAvg ResponseP50P95P99RPSError Rate
plain-nuxt1877.63 ms663.60 ms12547.07 ms12983.90 ms108.000.00%
i18n-v10857.43 ms106.00 ms6702.60 ms6977.03 ms161.330.00%
i18n-micro486.20 ms86.20 ms3534.10 ms3830.03 ms251.330.00%

Performance Comparison ​

Throughput (Requests per Second) ​

Winner: i18n-micro with 251 RPS

Loading chart...

Latency Distribution ​

Winner: i18n-micro with 486.20 ms avg latency

Loading chart...

Quick Comparison ​

Metricplain-nuxti18n-v10i18n-microBest
RPS (Artillery)108161251i18n-micro
Avg Latency1877.63 ms857.43 ms486.20 msi18n-micro
P99 Latency12983.90 ms6977.03 ms3830.03 msi18n-micro
Error rate0.00%0.00%0.00%-

Comparison: plain-nuxt (baseline) vs i18n v10 ​

Metricplain-nuxt (baseline)i18n v10Difference
Max Memory559.38 MB527.66 MB-31.72 MB
Avg Memory472.97 MB418.26 MB-54.71 MB
Response Avg1877.63 ms857.43 ms-1020.20 ms
Response P9512547.07 ms6702.60 ms-5844.47 ms
RPS (Artillery)108.00161.33+53.33
Error rate0.00%0.00%0.00 %

Comparison: plain-nuxt (baseline) vs i18n-micro ​

Metricplain-nuxt (baseline)i18n-microDifference
Max Memory559.38 MB474.45 MB-84.93 MB
Avg Memory472.97 MB305.38 MB-167.59 MB
Response Avg1877.63 ms486.20 ms-1391.43 ms
Response P9512547.07 ms3534.10 ms-9012.97 ms
RPS (Artillery)108.00251.33+143.33
Error rate0.00%0.00%0.00 %

Comparison: i18n v10 vs i18n-micro ​

Metrici18n v10i18n-microDifference
Max Memory527.66 MB474.45 MB-53.21 MB
Avg Memory418.26 MB305.38 MB-112.88 MB
Response Avg857.43 ms486.20 ms-371.23 ms
Response P956702.60 ms3534.10 ms-3168.50 ms
RPS (Artillery)161.33251.33+90.00
Error rate0.00%0.00%0.00 %

Notes ​

  • Shared profile: 4 locales × 2 pages × ~16.8k index leaves.
  • Load: programmatic Artillery only — warm 6s@6 + main 60s@60, uncapped VU (historical YAML methodology). Paths from runtime profile — see scripts/src/perf/load.ts.
  • Cool-downs (--cool fast): 0.2s post-build, 0.5s between runs, 0.5s between fixtures. Builds are forced each run so means are not diluted by cache hits.
  • Artillery tables use HTTP Error rate; traffic charts also show vusers.failed (ETIMEDOUT under uncapped VU saturation) — not the same metric.
  • Re-run day-to-day: pnpm test:performance (--load short --cool fast).
  • Regenerate this page: pnpm -C scripts cli performance --load full --only all --runs 3.
  • Flags: --locales N --keys K --only all|micro|i18n|plain --runs N --skip-load --cool fast|strict.

Released under the MIT License.