Native JS - Templater

Еще раз всем привет!

Есть три templater’a:

function templater1(string, data) {
    var subStringToReplace;
    var dataToReplace;
    for (var key in data) {
        subStringToReplace = '${' + key + '}';
        dataToReplace = data[key];
        while (string.indexOf(subStringToReplace) !== -1) {
            string = string.replace(subStringToReplace, dataToReplace);
        }
    }
    return string;
}


function templater2(string, data) {
    string = string.replace(/\$\{{1}([a-z ]+)\}/gmi, function (matched, matchedParrent) {
        if (data[matchedParrent]) {
            return data[matchedParrent];
        } else {
            return matched;
        }
    });
    return string;
}

function templater3(string, data) {
    for (var i in data) {
        var tempData = '${' + i + '}';
        if (string.indexOf(tempData) !== -1) {
            while (string.indexOf(tempData) !== -1) {
                string = string.replace(tempData, data[i]);
            }
        }
    }
    return string;
}

Все они делают одно и тоже.
Тест тут http://jsfiddle.net/aH6y/jgay23j5/

2 вариант самый быстрый, практически мгновенно делает свое дело(около 100-150 мс).
1 и 3 у меня отрабатывали за ~33 с

Возможно есть более быстрый вариант? Или templater2 наше все?
Спасибо ;)

Большинство template-engin-ов работают на регулярках. По соотношению скорость/простота второй вполне достойный вариант. Что-то можно ускорить, при этом код станет более запутанным.

Можно при помощи templater2 строить какое-то более-менее серьезное приложение?

Можно. Только с большой вероятностью это приложение будет

  1. Тормозить.
  2. Накладывать определенные ограничения на построение компонент, из которых состоит приложение. (например если подразумевается использовать templater не только для создания разметки компонента, но и для его обновления, придется решать проблему перезатертых обработчиков и работы с формами, потому что значения и фокус элементов будет пропадать).

Если ты знаешь что приложение будет развиваться, лучше бери готовую библиотеку для шаблонов.

Большое спасибо за помощь)

Я делаю ТЗ, хочу сделать без Backbone на jQuery + Bootstrap.

На связке Backbone + Node все можно сделать намного проще, но их нужно подучить