BRAGA96
@BRAGA96

Как ускорить поиск по регулярке?

Здравствуйте. Сделал маленький простой шаблонизатор:
/**
 * Обработка тегов, шаблонизатор
 * @param {string} - входные данные
 * @param {string|object} - название искомого тега или объект {тег: значение}
 * @param {string} - значение, на которое должен заменится тег
 * @returns {string} - обработанная строка
**/
function tag(input, key, value) {
	var pattern = function(search, data) {
		return input.replace(new RegExp('{'+ search +'}', 'gi'), data);
	};
	if (typeof key === 'string' && value !== undefined) {
		return pattern(key, value);
	} else {
		for (var item in key) {
			input = pattern(item, key[item]);
		}
		return input;
	}
}

// Пример использования
tag('{base}/{path}/files/{language}/config.js', {
	base: 'https://example.com',
	path: 'js/modules',
	language: 'en'
});
//> https://example.com/js/modules/files/en/config.js


В нем есть большой недостаток, это скорость работы. Через него могут проходить большие css/js/html файлы и регулярка будет проходится столько раз сколько свойст в переданного объекта. Нужно сделать так, чтобы регулярка проходилась один раз, задать `||` в регулярке или что-то подобное. Есть идеи?
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
Просто убрать Reg Exp
function tag(input, key, value) {
    if (typeof key === 'string' && value !== undefined) {
        return input.replace('{' + key + '}', value);
    } else {
        for (let index in key) {
            input = input.replace('{' + index + '}', key[index]);
        }
    }

    return input;
}


Вот тесты:
Мой код 0.091064453125ms
Ваш 0.359130859375ms
Владлен Хеллсайт 0.243896484375ms
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы