beta

HUGOで数万ページをビルドするならwhereを使わない方がいい

HUGOで数万ページのサイトをビルドしようとしたら、1時間以上かかったので原因を調べて、比較検証をしてみました。

公開日:2020年3月14日

テスト環境

HUGOバージョン

Hugo Static Site Generator v0.64.1/extended darwin/amd64 BuildDate: unknown

HUGOはbrewでインストールしています。

検証マシン

マシンスペックは下記の通りです。

項目 詳細
OS macOS Mojave
CPU 2.81 GHz Intel Core i5(第8世代)
メモリ 16GB
ストレージ NVMe 128GB

そこそこのスペックなので、マシンスペックが足を引っ張っていることはないと思います。

テスト

では実際にテストしてみます。

where有無の比較

contentの中身はそのままで、whereメソッドで関連記事を出すところを削除した場合と比較しました。

件数が数万件だと時間の無駄なので、2000記事まで減らしてテストしてみました。

ビルド時間
whereあり 66,486 ms
whereなし 1,898 ms

概ね1/30まで削減されました。

paginateなど他の一覧生成部分は何も変更させていないので、いかにwhereを使ったデータ取得が重いのかというのがわかります。

2万ページの出力もしてみた

ちなみに、この状態で記事数を2万まで増やすと、「huog sever」でのビルド時間は「140,057 ms」でした。単純に10倍とはいきませんでしたね。

ちなみに、このファイル数になると、hugo serverをすると、

Error: listen tcp 127.0.0.1:1313: socket: too many open files

となって、簡易サーバーが落ちます。


通常のブログでも長期間運営されている方は、数万ページという場合もあると思うので、whereメソッドで関連ページなどを出している場合は注意が必要ですね。

この規模のサイトになると、Netlifyなどのサーバーレスサービスでビルドをしていると、おそらく月のクオータをすぐに使い果たしてしまうので、ローカルかスペック高めのサーバーを借りて別にビルドした方が良さそうです。

Author

Koji Kadoma
Member of codit.work

新着ノート

新着コード