Performance Benchmarks

Measured build times for Bengal vs Hugo, Jekyll, and Eleventy

4 min read 853 words

Real build times comparing Bengal to other static site generators.


Test Methodology

Parameter Value
Machine Apple M2 MacBook Pro, 16GB RAM
OS macOS Sonoma 14.x
Python 3.14.0 (free-threaded build)
Measurement hyperfine --warmup 3 --runs 10
Date November 2024

Test Content

  • Standard Markdown pages with YAML front matter
  • Mix of short (300 words) and long (2000 words) articles
  • 10 images per 100 pages (not optimized during build)
  • Tags and categories taxonomy
  • Basic theme with navigation and footer

Full Build Performance

Time to build the entire site from scratch (cold cache).

SSG 100 pages 500 pages 1,000 pages 5,000 pages
Hugo 0.08s 0.25s 0.45s 2.1s
Bengal (GIL=0) 0.5s 1.4s 2.5s 14s
Bengal 0.8s 2.8s 4.8s 28s
Eleventy 1.2s 4.5s 9.2s 52s
Jekyll 3.5s 18s 38s ~4 min

Key Takeaways

  • Hugo is fastest — Compiled Go, purpose-built for speed
  • Bengal with free-threading — 1.8-2x faster than standard Python
  • Bengal beats Node/Ruby — 2-4x faster than Eleventy, 8-15x faster than Jekyll
  • Free-threading mattersPYTHON_GIL=0on Python 3.14+ is worth enabling

Incremental Build Performance

Time to rebuild when one file changes. This is what you experience during development.

SSG Incremental Rebuild
Bengal 35-50ms
Hugo 40-60ms
Eleventy 150-300ms
Jekyll 3-8s

Why This Matters More

For a 1,000-page site:

  • Full build: You wait once when deploying
  • Incremental build: You wait on every save during development

Bengal's 40ms incremental rebuilds mean instant feedback while writing, even on large sites.


Memory Usage

Peak RAM during a 1,000-page build.

SSG Peak Memory
Hugo 95 MB
Bengal 180 MB
Eleventy 320 MB
Jekyll 450 MB

Bengal uses more memory than Hugo but significantly less than Node or Ruby alternatives.


Scaling Characteristics

How build time grows with site size.

Build Time
    │
    │                                    ╱ Jekyll (exponential)
    │                                ╱
    │                            ╱
    │                        ╱          ╱ Eleventy (linear)
    │                    ╱          ╱
    │                ╱          ╱       ╱ Bengal (linear)
    │            ╱          ╱       ╱
    │        ╱          ╱       ╱       ╱ Hugo (sub-linear)
    │    ╱          ╱       ╱       ╱
    └──────────────────────────────────── Pages
         100    500   1000  2000  5000
  • Hugo: Near-constant time per page, highly optimized
  • Bengal: Linear scaling, efficient parallel processing
  • Eleventy: Linear scaling, single-threaded by default
  • Jekyll: Super-linear scaling, becomes painful at scale

Parallel Processing

Bengal's parallel build performance with different worker counts.

Workers 1,000 pages Speedup
1 (serial) 9.2s 1.0x
2 5.1s 1.8x
4 2.9s 3.2x
8 2.5s 3.7x
16 2.4s 3.8x

Diminishing returns above 8 workers for most sites due to I/O bottlenecks.


Free-Threaded Python Impact

Comparing Python 3.14 with and without the GIL.

Configuration 1,000 pages Relative
Python 3.14 (GIL enabled) 4.8s 1.0x
Python 3.14 (PYTHON_GIL=0) 2.5s 1.9x

Recommendation: Always usePYTHON_GIL=0with Python 3.14+ for best performance.

1
2
# Enable free-threading
PYTHON_GIL=0 bengal build --fast

What Slows Builds Down

Factors that increase build time:

Factor Impact Mitigation
Syntax highlighting +20-40% Usepygments_cache = true
Table of contents +10-15% Disable if not needed
Large images in content +5-10% per 100 images Optimize images beforehand
Complex templates +5-20% Simplify Jinja2 logic
Many taxonomies +5-10% Limit to essential taxonomies

Recommendations by Site Size

Site Size Recommended SSG
< 100 pages Any (all are fast enough)
100-1,000 pages Bengal, Hugo, or Eleventy
1,000-5,000 pages Bengal or Hugo
5,000-10,000 pages Hugo preferred, Bengal viable
> 10,000 pages Hugo strongly recommended

Reproduce These Benchmarks

Run the benchmarks yourself:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Clone benchmark suite
git clone https://github.com/bengal-ssg/benchmarks
cd benchmarks

# Generate test content
./generate-content.sh 1000

# Run benchmarks
./run-benchmarks.sh

# Results saved to results/

The benchmark suite generates identical content for each SSG to ensure fair comparison.


Methodology Notes

What We Measure

  • Cold build: Fresh build with no cache
  • Incremental build: Single file change with warm cache
  • Wall clock time: Real elapsed time, not CPU time

What We Don't Measure

  • Template compilation (amortized over builds)
  • Asset pipeline (varies by configuration)
  • Image optimization (not built into Bengal)
  • Deployment time (hosting-dependent)

Reproducibility

Results may vary based on:

  • Hardware (CPU, SSD speed, RAM)
  • Content characteristics (Markdown complexity)
  • Theme complexity (template logic)
  • Plugin usage