Писать будем на примере стандартной функции trim или strip, как она называется в prototype.
Эта функция удаляет начальные и конечные пробельные символы.
Cмотрим реализации "лидеров"
prototype:
strip: function () {
return this.replace(/^\s+/, '').replace(/\s+$/, '');
} jQuery:
trim: function (t){
return (t||"").replace(/^\s+|\s+$/g, "");
} Пишем быстрый вариант
Кому-то покажется, что тут нечего оптимизировать, но мы все-таки сделаем два предположения:
- Один replace быстрее, чем два.
- Создание объекта Regexp - это долго.
Напишем свою функцию QuickTrim:
function QuickTrim (str) {
return str.replace(QuickTrim.exp, '');
}
QuickTrim.exp = /^\s+|\s+$/g;
Тестируем
Метод замера времени
Bызовем эту функцию 50000 раз, на вход подадим такую строчку: " ssssss ".
Результаты:
Время приведено в миллисекундах.
Firefox 2.0.0.9: Prototype 578 jQuery 391 QuickTrim 390
IExplorer 6.0: Prototype 1140 jQuery 672 QuickTrim 391
Opera 9.24: Prototype 1266 jQuery 1109 QuickTrim 1079 Делаем выводы
Справедливость первого предположения очевидна. Второе же справедливо только для IExplorer.
Рекомендации:
Объединяйте регулярный выражения, если это возможно. Кешируйте создаваемые инстанции регулярных выражений, так вы выиграете в IExplorer, не проиграв в других браузерах.
Update: Один replace быстрее, чем два -
спорно.