Octopressのgenerateを劇的にスピードアップする でやった共通部分を先にレンダリングしておいて後で埋め込む、 という作業をプラグイン化しました。
octopress-common-part
Octopressのgenerateを劇的にスピードアップする
の所でヘッダーやサイドバーなど全てのページで共通な部分を
別途のページとして用意しておいて、
jekyll build
終了後、該当部分に埋め込む、みたいなことをしました。
これによって共通部分のレンダリングが今までページ分行われてたのが
1回で済むようになるので物凄くgenerate
が速くなりました。
(このブログで全ページ変換するのに5分位から1分位に短縮。)
ただ、Jekyllの外で後からページの中身を変更したりするために、 変換様に使うための変換変数が一切ブログの中で書けなくなる等の副作用がありました。
とうことでもっとスマートに行うために作ったのが上のプラグイン。
インストール
プラグインのインストールはplugins/common_parts.rbをplugins/に入れてください。
それからplugins/category_generator.rbの中の
render
、write
してる部分を削除します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
これらの部分は後で通常のpages
がレンダリングされる時にも
もう一度レンダリングされて書き出されるので
ここでやってることはただ無駄なだけです。
無駄なだけなら良いのですが、octopress-common-partで作るヘッダーや サイドバーをカテゴリーページのテンプレの中で使ってたりすると まだ作る前なので、そんなものはない、と怒られてしまいます。
Tagsを使うためにplugins/tag_generator.rbを使ってる場合も
同様にrender
、write
してる部分を削除します。
rcmdnk/monthly-archive 1 の中でも同じような事をしてましたが、 該当部分は直したので使っていたらアップデートしてください。
使い方
Octopressのgenerateを劇的にスピードアップする で作った様なcommon_header.htmlみたいな物を source/_common_parts/というディレクトリに入れます。
後は使いたい所で
{% common_part common_header.html %}
の様に、include
タグの様な感じで使います。
これで既にレンダリングされたcommon_header.htmlの レンダリングされた中身が埋め込まれます。
これでRakefileの中のcommon
タスクを消せます。
また、COMMON_HEADER
みたいなワードが使えなくなることもありません。
render
メソッドにパッチをあてる際の注意
Octopressのgenerateを劇的にスピードアップする
で追記しておきましたが、
Jekyll::Site::render
を上書きしてしまうと、
octopress-hooks.rb
の中でHookを埋め込んで居る部分を消してしまうので
それを取り入れられる様に処理しておかないと行けません。
実際にここで入れてるパッチは実行時間を表示してるだけなので 入らなければ消してしまえば良いだけですが。