2019-11-01_Mkdocsのビルドに時間がかかる

このページで分かること

  • Mkdocsのビルドが遅いときの対処法の参考情報

個人的に日記を書いており、このサイトと同じでMkdocsで整形しています。先日まであまり気にしていなかったのですがこのビルドに1分以上かかっており、このサイトと比べるとビルドに時間がかかっていることがわかりました。

簡単に原因を調べてみましたのでメモしておきます。

環境

  • OS: fedora30
  • ミドル:
    • mkdocs 1.0.4
    • Python 3.6.0
    • pip 9.0.1

結論として

結論としては、 ビルド対象のファイル数 に依存することが分かりました。

一番影響があるのがmkdocs serverコマンドでリアルタイムに編集しながら確認する際に、いちいちビルドが入るのでそのたびにページの描画に時間がかかります。

なお実際にビルドを実施した仮想環境のCPU使用率が100%に張り付いており、割当コア数を増やしたりしてもみましたが、mkdocsはシングルコアでビルドするっぽいので改善には至りませんでした。ファイル数を減らすのが妥当のようです。

調査結果の詳細

ビルド対象のファイルは日別作成されたmdファイルとなります。320ファイル程たまっており、1ファイルの文量は大したことありません。多くても7KBちょっとです。

測定はtimeコマンドで実施しています。

1
#r time mkdocs build

パターンA: 320ファイルをビルド

通常時のビルド時間です。1分13秒かかっていることが分かります。

1
2
3
real    1m13.962s
user    0m59.847s
sys     0m2.493s

パターンB: ファイル数を増やしての測定

320ファイルをコピーして倍の640ファイルでビルド時間を測定。 ビルド時間は倍以上の3分47秒に増えてしまいました……

1
2
3
real    3m47.805s
user    3m14.666s
sys     0m8.430s

パターンB: ファイル数を減らしての測定

日次ファイルを結合して月次ファイルにしファイル数を12ファイルにしてビルド時間を測定。単純に結合しただけなので、ファイルの内容に差異はなく、1ファイルの容量は増えている。

1分13秒が17秒まで短縮された。

mkdocsがビルド時に複数ファイルを並列処理しているか分からないが、ビルド対象ファイル数でビルド時間は大幅に変わるようだ。

1
2
3
real    0m17.778s
user    0m12.883s
sys     0m0.884s