ПоискПочтаКалендарьДеньгиМой КругФоткиНародОткрытки
Войти
Чтобы комментировать записи и дружить с другими пользователями, нужна своя страница на Я.ру.
Если у вас уже есть страница на Я.ру, введите логин и пароль. Если страницы ещё нет — создайте!
Добавить в друзья

Пишем быстрый JavaScript. Оптимизация функции обработки текста

10 ноября 2007 года, 23:43оригинал

Писать будем на примере стандартной функции 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:
Prototype578
jQuery391
QuickTrim390

IExplorer 6.0:
Prototype1140
jQuery672
QuickTrim391

Opera 9.24:
Prototype1266
jQuery1109
QuickTrim1079

Делаем выводы

Справедливость первого предположения очевидна. Второе же справедливо только для IExplorer.

Рекомендации:

Объединяйте регулярный выражения, если это возможно. Кешируйте создаваемые инстанции регулярных выражений, так вы выиграете в IExplorer, не проиграв в других браузерах.

Update: Один replace быстрее, чем два - спорно.
 
 
 
10 ответов

Логин или имя пользователя

Найдены:

 

Что получается:    изменить 
Подписаться на комментарии к записи

Получать уведомления о всех ответах в этом обсуждении.

 
Отписаться от комментарев к записи

Получать уведомления только о тех ответах в этом обсуждении, которые адресованы лично вам.

 
Вы следите за этой записьюя в курсе
Вы прекратили следить за этой записьюя в курсе
К сожалению, комментарий не удалось отправить. Попробуйте ещё раз.я в курсе