Techioz Blog

Nanoc のコンパイル時間が長い

概要

nanoc を使用してプロジェクトのドキュメントを生成しています。すでに複数のファイル (約 50) とレイアウトが作成されていますが、現在作業しているのは 1 つのファイルです。奇妙なことに、この 1 つのファイルは 20 秒以上かかる作業に比べて 1 秒もかからずにコンパイルされるのです。

Loading site data…
Compiling site…
      update  [0.71s]  output/docs/js/getData/index.html

Site compiled in 22.96s.

次の後にプロセスを中止すると、

      update  [0.71s]  output/docs/js/getData/index.html

CTRL+C で行を表示し、nanoc ビューを開くと、ファイルは正常にコンパイルされています。プロセスをスピードアップする方法はありますか? nanoc は 20 秒間何をしているのでしょうか?

解決策

デフォルトでは、nanoc は作成、更新、または削除されたファイルのみを表示します。再コンパイルされても同一であることが判明したファイルは表示されません。 –verbose を nanoc コンパイルに渡すと、コンパイルされているが同一であるファイルが表示されます。

したがって、nanoc が何もしていないように見える 20 秒は、nanoc が再コンパイルに忙しい 20 秒である可能性がありますが、コンパイルされたファイルが同じであることが判明したため、表示されません。

nanoc が項目が同一であることを確認できない限り、項目は再コンパイルされます。場合によっては、nanoc は再コンパイル時にファイルが同一であるかどうかを確実に判断できないことがあります。そのため、この場合、項目はとにかく再コンパイルされます。

ただし、50 ページのサイトをコンパイルするのに 23 秒というのは遅いように思えます。高速なフィルターを選択するのに役立ちます (例: Markdown の RDiscount、構文の色付けの pygments.rb)。可能であれば、Ruby プロファイラー (perftools.rb など) で nanoc を実行して、速度の低下の原因を特定します。