在 前文 中,我尝试了 docpad 做为新的建站工具。docpad
有很多优点,但最大的缺点是效率。在我看来,一个好的静态网站生成工具最好能在秒级处理成千上万文档,这样才能真正满足个人博客外的中等规模网站的需求。要做到这一点,工具必须将full build和incremental build区别开来。这样,即使一个full build要花几十秒甚至几分钟,incremental build还能控制在秒级。当用户修改某个文件时,incremental build能够保证用户有良好的体验 —— 无需等待,改动立即可见。而这一点,则恰恰是 docpad
所欠缺的。本文讲述的 hatch
项目将尝试在保留 docpad
的诸多优点外,通过更智能的build过程将编译速度尽最大可能提高。
继续 前文 。熬到了周末,正式开始了 hatch
项目的开发。首先是一个关键问题:如果每个文件的生成由一个单一的shell脚本完成,那么数据库打开/关闭的损耗会不会成为瓶颈?做了个简单的实验,发现每次打开都要花费0.2s,一个不小的数字。
➜ hatch git:(master) ✗ cat test.coffee
db = require('mongojs')('hatch')
col = db.collection('documents')
col.findOne {}, (err, doc) ->
db.close()
➜ hatch git:(master) ✗ time ./test.coffee
./test.coffee 0.20s user 0.03s system 99% cpu 0.226 total