Цитата:
|
Цитата:
|
Цитата:
http://developer.yahoo.com/yui/compressor/ Про них можно не беспокоиться. Что касается глобальных, то вы, верно, сказали "есть границы". Можно не создавать объекты и все переменные держать в window с именами "a", "b", "c", "d" и т. д. Хорошая помойка получится. Пожалуй, я действительно поспешил так однозначно заявив: Цитата:
Все эти методы с правильными именами, красиво разложенные по полочкам (по объектам) будут постоянно применяться, и это применение должно быть удобным. Но должно ли быть удобно (читабельно) написано содержимое этих методов? То есть я сначала пишу функцию читабельно в ущерб производительности, для того что бы потом, когда этот внесенный мной ущерб проявится, я мог зайти, удобно ее прочитать и исправить сделав нечитабельной. Глупо на мой взгляд. Цитата:
|
Цитата:
|
Цитата:
|
Протестировал на "идеальном" случае, т. е. кол-во текстовых узлов в документе равно кол-ву подходящих для замены текстовых узлов. В таком случае разница в производительности особенно заметна.
Код срабатывает множество раз, и каждый раз в документе появляются теги "а", которые сразу нужно убирать: var text = 'ddffdfg [url]http://www.youtube.com/watch?v=iuOcLoqo5e0[/url] dsfsdfs'; var startTime = new Date(); for (var __i = 0; __i < 1001; __i++) { document.getElementById('div1').innerHTML = document.getElementById('div2').innerHTML = document.getElementById('div3').innerHTML = text; TextNode.each(callback); } alert((new Date()) - startTime); Результат: IE +8.59% FF +6.49% Opera +10.56% Chrome +13.04% В среднем +9,67% В реальном документе сотни, а часто и тысячи текстовых узлов (отступы/табы для форматирования html в большинстве браузеров тоже считаются текстовыми узлами), и максимум 5-10 подходящих, т. е. полученный результат можно смело делить минимум на сотню. Получаем +0,0967% |
Можно еще regexp вынести как свойство callback-а. Чтоб не создавался каждый раз.
|
Цитата:
У меня интерес всегда академический. Отрицать/не принимать очевидное - какой смысл? Есть разница - каждый раз создавать или один раз? function test(callback) { callback(); } var t1, t2; function _callback1() { var div = document.createElement('div'); var fragment = document.createDocumentFragment(); var _div = div; var _fragment = fragment; } t1 = new Date().getTime(); for (var k = 0; k < 100000; k++) { test(_callback1); } t2 = new Date().getTime(); alert(t2 - t1); function _callback2() { var _div = arguments.callee.div; var _fragment = arguments.callee.fragment; } _callback2.div = document.createElement('div'); _callback2.fragment = document.createDocumentFragment(); t1 = new Date().getTime(); for (var k = 0; k < 100000; k++) { test(_callback2); } t2 = new Date().getTime(); alert(t2 - t1); Минимум в два раза быстрее (а где-то (IE6 на моей машине) в 5-8 раз). Впрочем, повторю, Вы сами определяете приоритет. |
Вы сравниваете обращение к свойству и вызов метода. Конечно второе медленней даже если метод пустой.
Т. е. вы удалили весь лишний шум. Но при реальном применении, этот шум будет, и его нужно учитывать. Определитесь, что мы сравниваем два по разному написанных метода или "обращение к свойству" vs "вызов метода". |
Riim, стоп. У вас операция document.createElement('div'); сколько раз вызывается? Один?
Цитата:
Первый коллбэк (Ваш, где Вы создаёте каждый раз div и fragment): function _callback1() { var div = document.createElement('div'); var fragment = document.createDocumentFragment(); var _div = div; var _fragment = fragment; } Второй коллбэк (предложенный, где div и fragment создались единожды и записались свойствами в коллбэк): function _callback2() { var _div = arguments.callee.div; var _fragment = arguments.callee.fragment; } _callback2.div = document.createElement('div'); _callback2.fragment = document.createDocumentFragment(); Цитата:
Цитата:
P.S.: ещё раз - у Вас document.createElement('div'); и document.createDocumentFragment(); один раз вызываются? Нет? А почему? А! Вы говорите об оптимизации по объёму кода; что ж, Вам решать (я это третий раз говорю уже). |
Часовой пояс GMT +3, время: 22:55. |