В JavaScript, вы можете определить обработчик обратного вызова в регулярное выражение строку замены операции:JavaScript заменить обратный вызов - вопрос производительности
str.replace(/str[123]|etc/, replaceCallback);
Представьте, что вы есть подстановок объект строк и замены.
var lookup = {"str1": "repl1", "str2": "repl2", "str3": "repl3", "etc": "etc" };
и эта функция обратного вызова:
var replaceCallback = function(match) {
if (lookup[match])
return lookup[match];
else
return match;
}
Как бы вы оценили производительность выше обратного вызова? Есть ли способ улучшить его? Будет
if (match in lookup) //....
или даже
return lookup[match] || match;
приводят к возможности для компилятора JS для оптимизации, или это все то же самое?
+1 По мере того, как поиск элементов объекта идет, компилятор может очень хорошо оптимизировать это в одном вызове даже в варианте 'if ... '(?). Это именно то, что я хочу знать. P.S .: Я прекрасно понимаю, что это довольно микро-менеджмент.Это - * академический вопрос. – Tomalak
@Tomalek: Я бы не стал рассчитывать на это, некоторые реализации потрясающе не оптимизированы. В тех, которые есть (например, Chrome, очень быстро), вы можете уйти почти с чем угодно. :-) Итак, вы беспокоитесь о медленных, если и когда увидите их. –
Если вы вставьте версию if/else этой функции в компилятор Closure, она выплеснет версию T.J., поэтому я бы предположил, что JS-анализаторы могут сделать такую же оптимизацию. Не уверен. Ссылка на компилятор, чтобы вы могли попробовать сами: http://closure-compiler.appspot.com – Annie