|
|
|
April 15th, 2008
10:31 am KML - теперь стандарт.
|
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 ;)
|
November 12th, 2007
02:07 am - Re: Пишем быстрый JavaScript. Оптимизация функции обработки текста В предыдущем посте я написал: "Один replace быстрее, чем два".
В комментариях вот тут мне дали ссылку на замечательную статью "Faster JavaScript Trim", в которой автор провел исследование на скорость разных вариантов регулярных выражений реализующих trim.
Что же касается двух replace. На коротких строках два replace проигрывают за счет больших накладных расходов на их осуществление. Зато на длинных, когда начинает заметно сказываться время сканирования строки, сложное, получившееся из двух простых регулярное выражение, дает о себе знать в полный рост.
Резюме 1: выбираем решение под задачу. Оба варианта имею право на существование.
Резюме 2: пост написал не зря. Получил офигительную ссылку. Да и второе предложение пока никто не опроверг :)
|
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 быстрее, чем два - спорно.
|
November 6th, 2007
11:21 pm - Новости на карте Вот выпустили новости на карте Москвы. Получилось вполне достойно. Еще бы точки передизайнить.
|
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);
Теперь вот думаю, можно ли будет убрать эту зачинку после выхода новой версии.С одной стороны уже будет некоторое количество людей, которые не обновятся и будут видеть проблему, а с другой, количество этих людей будет исчезающе мало.
|
September 18th, 2007
11:54 am - jQuery UI Найдите десять отличий (пример взят со страницы ui.jquery.com)
В Firefox 2.0.0.3:

В IE 6.0:

В Opera 9.2: скрипт примера не заработал.
|
August 27th, 2007
05:34 pm - Велосипед и самолет
Велосипед - негабаритный багаж, идет по 50 рублей за килограмм. На весы поставили только заднее колесо, получилось 7 кг. - А вам квитанция нужна? - Да не очень. - (сквозь зубы) 400 р. в паспорт.
По всем приметам наступили на задний переключатель, понятное дело погнули, выправил за 250 р.
|
12:29 pm
На Максе было очень много людей. Они были везде, особенно в электричке. Обойдя почти все самолеты, Настя сдалась, решительно села в тень крыла Ту-144 и отправила меня в свободное плавание. Я угребся, но посмотрел все.
|
July 13th, 2007
11:50 am Я смотрю голливудское кино, мне оно нравиться. Потому что я знаю, чего от него хочу, и они это знают. Я не ищу там того, чего там быть не может. А вот чего я не понимаю: зачем люди, которым не нравиться Голливуд-стандарт, упорно идут в кинотеатры, каждый раз разочаровываются - поносят фильм, а потом идут на следующий. Это что культурный мазохизм?
|
|
|