Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 13.09.2011, 11:53
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от NoResponse
если цель сократить код, то я бы "избавился" от всех... или почти всех var
Интересно вы код сократили, на 1 байт больше стало. Если одновременно с объявлением переменной идёт её инициализация, то с var короче будет.
Ответить с цитированием
  #12 (permalink)  
Старый 14.09.2011, 20:46
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

Исправления предлагаю. Замените строку
Код:
for (var e in ts) {
на
Код:
for(var e = 0; e < ts.length; e++) {
Ответить с цитированием
  #13 (permalink)  
Старый 15.09.2011, 05:59
Аспирант
Отправить личное сообщение для stopkran Посмотреть профиль Найти все сообщения от stopkran
 
Регистрация: 12.12.2009
Сообщений: 54

Сообщение от with-love-from-siberia
Исправления предлагаю
А что мне за это будет? Вы предлагаете удлинить код - ради чего? в чём выгода? :-) Вот если бы вы предложили в строке 07 заменить фрагмент "ts = (t && t.className) ? [t] ..." на более простой "ts = (t) ? [t] ...", я бы ещё подумал.
Ответить с цитированием
  #14 (permalink)  
Старый 15.09.2011, 08:33
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Для Array часто добавляют реализацию стандартных методов в прототип для старых браузеров, поэтому el может оказаться, например, "forEach" или "indexOf"… можно конечно добавить проверку hasOwnProperty, но лучше перебирать по индексам элементов.
Ответить с цитированием
  #15 (permalink)  
Старый 15.09.2011, 08:45
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

Сообщение от Octane
Для Array часто добавляют реализацию стандартных методов
На самом деле getElementsByTagName возвращает не массив а коллекцию. for in в данном случае занимается перебором всех свойств коллекции - 0, ..., length, item, namedItem.

Сообщение от stopkran
А что мне за это будет?
Ничего плохого. Лишние проходы цикла - сомнительная экономия в ущерб производительности. Хотя их всего три, но ведь их может быть и больше. Вдруг Вы еще где-то съэкономили на производительности?
Ответить с цитированием
  #16 (permalink)  
Старый 15.09.2011, 10:22
Аспирант
Отправить личное сообщение для stopkran Посмотреть профиль Найти все сообщения от stopkran
 
Регистрация: 12.12.2009
Сообщений: 54

Согласен, for in выглядит несколько некошерным, таким "неформалом". Но, к сожалению, я это знал и раньше, и прошёл много всяких граблей на эту тему, использовать теперь не боюсь. Оставлю пока как "каприз художника".

О, я много где сэкономил на производительности! :-) Но вы всё равно не найдёте. Да я и сам сейчас не вспомню всего. Но можно ведь производительность просто измерить. В первой версии я сэкономил на коде (измерителя нет). Но вот в следующей (Simple Table Sorter v0.03) можно посмотреть скорость:

http://ir2.ru/sort0.03/table1000.htm

Можно даже сравнить по скорости с некоторыми другими сортировщиками (желательно в IE):

http://ir2.ru/sorters/fd/
http://ir2.ru/sorters/la/
http://ir2.ru/sorters/standardista/

Это, конечно, очень приблизительно (измеритель прикручивал к чужому коду, мог не всё учесть и неправильно назвать какие-то моменты). Ну, плюс я добрый - добавил в standardista небольшой хак, без которого в IE сортировка работала бы десятки секунд.
Ответить с цитированием
  #17 (permalink)  
Старый 15.09.2011, 11:33
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Кстати заметил, что последнее время, с появлением Object.keys, у меня в коде вообще исчезли for-in, теперь пишу:
var keys = Object.keys(obj), i = keys.length;
while (i--) {
    obj[keys[i]]…
}

в браузерах поддерживающих Object.keys разница в скорости с вариантом:
for (key in obj) {
    if (obj.hasOwnProperty(key)) {
        obj[key]…
    }
}

несущественна.

Последний раз редактировалось Octane, 15.09.2011 в 12:37.
Ответить с цитированием
  #18 (permalink)  
Старый 15.09.2011, 12:27
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Octane
с, появлением Object.keys, у меня в коде вообще исчезли for-in
А почему while не исчезли?
Object.keys(obj).forEach(function(key) {
   // ...
});
Ответить с цитированием
  #19 (permalink)  
Старый 15.09.2011, 12:36
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Как-то расточительно на каждую итерацию выполнять функцию, когда можно этого не делать
Ответить с цитированием
  #20 (permalink)  
Старый 15.09.2011, 12:40
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Да перестань, на фоне любой операции внутри функции вызов самой функции будет незначительным. Выигрыш у тебя будет только если ты проверяешь на скорость различные виды ничего не делающих циклов.
А вот создающийся скоп внутри функции реально полезен.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание HTML страниц Sportlife89 (X)HTML/CSS 7 03.06.2011 15:04
Передача кода HTML Владимир Седов Общие вопросы Javascript 2 12.04.2011 16:48
кеширование HTML переданого через ajax BorisBritva jQuery 6 02.04.2011 01:23
Как с помощью PHP сохранить какие-либо изменения в HTML документе? FirstFrost Работа 6 06.09.2010 16:16
Динамические html элементы sky Элементы интерфейса 2 07.03.2010 11:58