hexojs / hexo-renderer-jade

Jade renderer for Hexo. Replaced by https://github.com/hexojs/hexo-renderer-pug
MIT License
28 stars 10 forks source link

有关 hexo-renderer-jade 的性能问题 #1

Closed jysperm closed 9 years ago

jysperm commented 9 years ago

我的博客有大概 100 多篇文章,使用的是我自己用 Jade 编写的主题(在 这里),每次生成的时候都非常慢,个别文件需要将近一秒:

[create] Generated: page/57/index.html (462ms)
[create] Generated: 2011/index.html (261ms)
[create] Generated: 2011/page/2/index.html (437ms)
[create] Generated: 2011/page/3/index.html (576ms)
[create] Generated: 2011/page/4/index.html (1000ms)

总计 198 秒:

[info] 512 files generated in 198.155s

但如果使用默认的 landscape 主题的话,则生成仅花费 10 秒,我很疑惑为什么不同的模板引擎差距有这么大。

我尝试在 index.js 中缓存编译后的 Jade 模板:

var jade = require('jade');
var crypto = require('crypto');

templates_cache = {};

function hasher(source) {
  return crypto.createHash('sha256').update(source).digest('hex');
}

hexo.extend.renderer.register('jade', 'html', function(data, locals){
  hash = hasher(data.text);
  cached = templates_cache[hash];

  if (!cached) {
    templates_cache[hash] = cached = jade.compile(data.text, {filename: data.path});
  }

  return cached(locals);
}, true);

将耗时从 198 秒降到了 105 秒,但依然不是很理想;我又将基于 hash 换成了基于 data.path 来缓存,似乎也没有明显变化。

jysperm commented 9 years ago

更新到 Hexo3 之后只需 25 秒了。