Hexo 3.2 リリース

Hexo が大規模 Web サイト処理に長らく不十分なのは変わらない (#710, #1124, #283, #1187, #550, #1769 など)。この問題は解決すべく尽力し、Hexo 3.2 でいくつかの改善が行われました。

速度追及

レンダリングされたコンテンツのキャッシュ

レンダリングされたコンテンツはウェアハウスにキャッシュされます。これにより大幅な時間を節約でき、ホット処理(2 回目の処理)を1.7 倍高速化します。

バージョン 3.1 3.2
コールド処理 6.094 秒 6.454 秒
ホット処理 5.154 秒 3.002 秒

highlight.js の言語ファイルの遅延読み込み

highlight.js は遅いです。とりわけ、言語を検出する際顕著です。言語ファイルを遅延読み込みすることで、処理が高速化し、未使用の言語ファイルが多く読み込まれるのを防ぎます。ただし、いくつかの制限があります。

  • 自動検出は無効にする必要があります。
  • コードブロックで言語を指定する必要があります。

自動検出は無効に、_config.yml で設定できます。

highlight:
auto_detect: false

テンプレートのプリコンパイル

テーマのテンプレートは可能であればプリコンパイルされます。これにより生成速度が2 倍高速化します。

バージョン 3.1 3.2
コールド生成 27.2 秒 13.6 秒
ホット生成 24.4 秒 12.6 秒

この機能は、以下のレンダラーでサポートされています。

さらに、プリコンパイルはレンダラーで簡単に実装できます。EJS レンダラーを例に取ります。EJS レンダラーに compile 関数を追加します。

var ejs = require('ejs');
var assign = require('object-assign');

function ejsRenderer(data, locals) {
return ejs.render(data.text, assign({filename: data.path}, locals));
}

ejsRenderer.compile = function(data) {
return ejs.compile(data.text, {
filename: data.path
});
};

module.exports = ejsRenderer;

ソースファイルのインクルード/除外

_config.yml で、指定されたソースファイルをインクルード/除外できます。

include:
- .htaccess

exclude:
- tmp/**/*

詳細: 変更履歴ベンチマーク結果