?

Log in

No account? Create an account
gregof

> Recent Entries
> Archive
> Friends
> Profile
> previous 10 entries

April 15th, 2008


10:31 am
KML - теперь стандарт.

(1 comment | Leave a comment)

November 19th, 2007


06:22 pm - forEach vs. for

Необходимость пройтись по массиву возникает довольно часто. Как это сделать наиболее быстро?
// Нервным поборникам красивого кода дальше лучше не читать ;)

Код

Для forEach:

arr.forEach(function (item) {
  var res = " " + item + " ";
});

В случае, если браузер не поддерживает forEach, в игру вступает:
if (!Array.prototype.forEach) {
   Array.prototype.forEach = function (callback, thisObject) {
      thisObject = thisObject || window;
      for (var index = 0, length = this.length; index < length; index++) {
         callback.apply(thisObject, [this[index], index, this]);
      }
   }
}

Для for:

for (var j = 0, l = arr.length; j < l; j++) {
  var res = " " + arr[j] + " ";
}

Кроме того, проверим метод each, которым библиотека prototype расширяет Array:

arr.each(function (item) {
  var res = " " + item + " ";
});

Тестируем

Метод замера времени

Выполним приведенный выше код 5000 раз для массива из 40 элементов.

Результаты:

Время приведено в миллисекундах.

Firefox 2.0.0.9:
Array.prototype.forEach 906
Prototype::each 1422
for 609

IExplorer 6.0:
Array.prototype.forEach 1641
Prototype::each 1843
for 750

Opera 9.24:
Array.prototype.forEach 515
Prototype::each 453
for 188

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

Если у вас много проходов по массивам и очень жесткие рамки по скорости выполнения, вспомните про старый добрый for ;)


(8 comments | Leave a comment)

November 12th, 2007


02:07 am - Re: Пишем быстрый JavaScript. Оптимизация функции обработки текста
В предыдущем посте я написал: "Один replace быстрее, чем два".

В комментариях вот тут мне дали ссылку на замечательную статью "Faster JavaScript Trim", в которой автор провел исследование на скорость разных вариантов регулярных выражений реализующих trim.

Что же касается двух replace. На коротких строках два replace проигрывают за счет больших накладных расходов на их осуществление. Зато на длинных, когда начинает заметно сказываться время сканирования строки, сложное, получившееся из двух простых регулярное выражение, дает о себе знать в полный рост.

Резюме 1: выбираем решение под задачу. Оба варианта имею право на существование.

Резюме 2: пост написал не зря. Получил офигительную ссылку. Да и второе предложение пока никто не опроверг :)

(Leave a comment)

November 11th, 2007


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

Писать будем на примере стандартной функции 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 быстрее, чем два - спорно.

(9 comments | Leave a comment)

November 6th, 2007


11:21 pm - Новости на карте
Вот выпустили новости на карте Москвы. Получилось вполне достойно.  Еще бы точки передизайнить.

(7 comments | Leave a comment)

October 26th, 2007


12:58 pm - Firefox 2.0.0.8

Совсем недавно вышла новая версия Firefox 2.0.0.8.
Вышла так, что уже на следующей неделе они обещают выпустить 2.0.0.9.
Конкретно я пострадал из-за Bug 400421 – Removing AREA element makes the image disappear.

Текущее решение:

var map = document.getElementById("myMap"),
parent = map.parentNode;
// удаляем map из DOM
parent.removeChild(map);
... // здесь удаляем что нужно
// возвращаем map в DOM
parent.appendChild(map);

Теперь вот думаю, можно ли будет убрать эту зачинку после выхода новой версии.С одной стороны уже будет некоторое количество людей, которые не обновятся и будут видеть проблему, а с другой, количество этих людей будет исчезающе мало.


(2 comments | Leave a comment)

September 18th, 2007


11:54 am - jQuery UI
Найдите десять отличий (пример взят со страницы ui.jquery.com)

В Firefox 2.0.0.3:



В IE 6.0:



В Opera 9.2:
скрипт примера не заработал.

(3 comments | Leave a comment)

August 27th, 2007


05:34 pm - Велосипед и самолет

Велосипед - негабаритный багаж, идет по 50 рублей за килограмм. На весы поставили только заднее колесо, получилось 7 кг.

 - А вам квитанция нужна?

 - Да не очень.

 - (сквозь зубы) 400 р. в паспорт.

По всем приметам наступили на задний переключатель, понятное дело погнули, выправил за 250 р.

(Leave a comment)

12:29 pm

На Максе было очень много людей. Они были везде, особенно в электричке.

Обойдя почти все самолеты, Настя сдалась, решительно села в тень крыла Ту-144 и отправила меня в свободное плавание. Я угребся, но посмотрел все.


(2 comments | Leave a comment)

July 13th, 2007


11:50 am
Я смотрю голливудское кино, мне оно нравиться. Потому что я знаю, чего от него хочу, и они это знают. Я не ищу там того, чего там быть не может. А  вот чего я не понимаю: зачем люди, которым не нравиться Голливуд-стандарт, упорно идут в кинотеатры, каждый раз разочаровываются - поносят фильм, а потом идут на следующий. Это что культурный мазохизм?
Tags:

(1 comment | Leave a comment)

> previous 10 entries
> Go to Top
LiveJournal.com