function(dir, htm, callback) {
    
    var recur = function(str) {
        return s = str.replace(/\{\{include[\s]{1,}[\'\"]([\w\.\/]{1,})[\'\"]\}\}/gi, function(p1,path) {
            if(fs.existsSync(dir + path)) {
                return recur(fs.readFileSync(dir + path, 'utf8'));
            }
            return "";
        })
    }
    
    
    callback(recur(htm))
}
function(dir, htm, callback) {
    
    var recur = function(str) {
        return s = str.replace(/\{\{include[\s]{1,}[\'\"]([\w\.\/]{1,})[\'\"]\}\}/gi, function(p1,path) {
            if(fs.existsSync(dir + path)) {
                return recur(fs.readFileSync(dir + path, 'utf8'));
            }
            return "";
        })
    }
    
    
    callback(recur(htm))
}
function ( dir , htm , callback ) { var recur = function ( str ) { return s = str . replace ( / \{\{include[\s]{1,}[\'\"]([\w\.\/]{1,})[\'\"]\}\} / gi , function ( p1 , path ) { if ( fs . existsSync ( dir + path ) ) { return recur ( fs . readFileSync ( dir + path , 'utf8' ) ) ; } return "" ; } ) } callback ( recur ( htm ) ) }
Вывод данных в шаблон
шаблон собирается из инклудов один раз
собранные шаблоны остаются в памяти

(синхронные файловые функции тут не влияют на общую производительность)
Вывод данных в шаблон шаблон собирается из инклудов один раз собранные шаблоны остаются в памяти