Skip to main content

SSG 效能實測

本文包含 Astro, 11ty, Hugo 三個速度極快的 SSG 的效能實測。

測試一:部落格

zachleat/bench-framework-markdown 測試 2000 篇 Markdown 文件,分別使用 Astro/11ty/Hugo 最知名的三個主題 Astro Paper/eleventy-base-blog/hugo-PaperMod,測試於 M1 MBP 8G,結果分別如下1

❯ hyperfine -r 3 'hugo'
Benchmark 1: hugo
Time (mean ± σ): 5.145 s ± 0.174 s [User: 14.929 s, System: 0.899 s]
Range (min … max): 4.984 s … 5.330 s 3 runs

❯ hyperfine -r 3 'npm run astro build'
Benchmark 1: npm run astro build
Time (mean ± σ): 9.219 s ± 0.429 s [User: 10.211 s, System: 2.420 s]
Range (min … max): 8.868 s … 9.697 s 3 runs

❯ hyperfine -r 3 'npx @11ty/eleventy'
Benchmark 1: npx @11ty/eleventy
Time (mean ± σ): 5.759 s ± 0.294 s [User: 6.179 s, System: 0.550 s]
Range (min … max): 5.564 s … 6.097 s 3 runs

Hugo 快 80%,從 9 秒變成 5 秒。

測試二:文檔

測試最常見的三欄文檔佈局,也就是左側導航,中間主文,右邊 TOC。同樣使用 zachleat/bench-framework-markdown,改用 4000 份文件的數據集測試。

DefaultsidebarCachedRendervs Deca cached
Deca188s24.3s
Docusaurus 3.10.12209s8.6× slower
Hugo Docsy3Error
Hugo Hextra382s15.7× slower
Hugo Doks4122s5× slower
Astro Starlight144s1.3× faster
Astro Starlight + pageFind indexing280smeaningless

由於 Hugo 缺乏高度自定義能力,因此 Astro 快取左側複雜度 O(N^2) 的導航欄,不同頁面共用快取結果並且只修改 active 屬性,這種優化 Hugo 就做不到,可以看到 Hugo 的限制造成速度反而比靈活但緩慢的 JS SSG: Astro 更慢。

結語

我認為 Hugo 缺點的嚴重程度應該換到十倍的數量級效能領先,然而實際是兩千篇文章只快 80%,還不是 12 分鐘變成 20 分鐘只是 5 秒變成 9 秒,試問有多少網站超過兩千篇文章?開發時經歷了這麼多痛苦只快四秒完全不值得5,而且這還只是性能孱弱的 M1 8G,硬體的錢根本就換不來開發成本,因此 Hugo 的速度優勢現在看來蕩然無存6

我還是認為 Hugo 的各種限制應該要讓他比競爭對手快 10 倍,但是實際上只有 2~3 倍,這種幅度的效能領先不夠彌補他的缺點。

不過請不要把構建速度和規模化混為一談,這是兩個不同的問題,如果你需要建立五萬頁一百萬頁五百萬頁甚至上億頁面的網站時,Hugo 還是你的首選。

Footnotes

  1. 你可能說三個不同主題 build result 不一樣怎麼公平比較,你想的沒錯,但這就是客觀事實:我們最終面臨的終究是現實世界綜合起來的場景,如果我完全移除主題只構建 plain 頁面,那只是在比較多工併發效能,以及比較 Goldmark/Markdown-it 這兩個 markdown parser 之間的執行效能而已,根本就不是在比框架本身。現實世界會遇到的是框架之間的數據交互、驗證、轉換、各種 overhead。而且用主題的測試反而是給 JS 框架加重負擔,因為 Hugo 再怎麼複雜也只有模板沒什麼數據交互。

  2. 啟用 faster + #11199設定。

  3. 我照著文檔和設定做還是報錯,我沒有義務幫他除錯。

  4. Doks 的行動端導航欄沒有渲染 nav 因此異常快。

  5. 由於 JS-based SSG 基本上都要用 Node.js,背後要啟動 V8 引擎,這是一個很重的用於解析 JS 的程式,所以小站 Hugo 和其他人差距反而更大,因為 V8 本身就有啟動時間的 offset,然而 Hugo 再快也就快那幾秒,trade-off 划不來,只有在真的很大的網站 Hugo 才會又展示速度優勢。

  6. 速度領先不夠大缺點又很多因此才說蕩然無存,不過仍然是最快的 SSG 工具這點不容質疑