Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.07.2009, 11:51
Интересующийся
Отправить личное сообщение для Tohin Посмотреть профиль Найти все сообщения от Tohin
 
Регистрация: 30.06.2009
Сообщений: 23

Оптимизация кода
Есть код который ищет все элементы по классу (в данном случае точно известно, что их три, поэтому цикл организовывать было лень) и почереди их анимирует:
$('div.class').eq(0).fadeIn(1500).fadeOut(1500,function() {
			$('div.class').eq(1).fadeIn(1500).fadeOut(1500,function() {
				$('div.class').eq(2).fadeIn(1500); 
			});
		});


Мне не нравится что трижды производится поиск объектов ради того чтобы выбрать один из результата.
в результате бреда воспаленного сознания родился код:
var anim= $('div.class');
		anim[0].fadeIn(1500).fadeOut(1500,function() {
			anim[1].fadeIn(1500).fadeOut(1500,function() {
				anim[2].fadeIn(1500); 
			});
		});


Который, естественно, не работает.
В связи чем 2 вопроса:
1. А оно вообще надо? То есть будет ли хоть какая-то экономия ресурсов?
2. Как это правильно написать?
Ответить с цитированием
  #2 (permalink)  
Старый 04.07.2009, 21:42
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от Tohin
Который, естественно, не работает
сравни $('div.class') и anim[0] в отладчике

Цитата:
2. Как это правильно написать?
правильным будет вариант с одним поиском элементов, если он даст заметный прирост в производительности
Ответить с цитированием
  #3 (permalink)  
Старый 08.07.2009, 21:19
Интересующийся
Отправить личное сообщение для Tohin Посмотреть профиль Найти все сообщения от Tohin
 
Регистрация: 30.06.2009
Сообщений: 23

Оптимизаия вроде дает результат....
Итак, внимание!
выполнение исходной версии кода (мерял файрбагом):
Profile (125.403ms, 2351 calls)

Слегка видоизмененный код:
var anim= $('div.class');
        anim.eq(0).fadeIn(1500).fadeOut(1500,function() {
            anim.eq(1).fadeIn(1500).fadeOut(1500,function() {
                anim.eq(2).fadeIn(1500); 
            });
        });


Profile (68.573ms, 1149 calls)

Результат на лицо..... Еще идеи по оптимизаии есть?

Последний раз редактировалось Tohin, 08.07.2009 в 21:20. Причина: Очепятки
Ответить с цитированием
  #4 (permalink)  
Старый 09.07.2009, 10:26
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Конечно, на лицо. Сравнил 3 кривых поиска, без указания контекста, с одним
Еще быстрее будет, если написать вместо $('div.class')
$('div.class', '#container')

где #container -- то, что содержит твои три дива. А то так они у тебя ищутся по всей странице.
Ответить с цитированием
  #5 (permalink)  
Старый 09.07.2009, 17:10
Интересующийся
Отправить личное сообщение для Tohin Посмотреть профиль Найти все сообщения от Tohin
 
Регистрация: 30.06.2009
Сообщений: 23

Сообщение от e1f Посмотреть сообщение
Конечно, на лицо. Сравнил 3 кривых поиска, без указания контекста, с одним
Еще быстрее будет, если написать вместо $('div.class')
$('div.class', '#container')

где #container -- то, что содержит твои три дива. А то так они у тебя ищутся по всей странице.
Еще более кривым было бы $('.class') А дивов на странице немного... Но попробую и со внешним #container'ом...
Правда не совсем понял что же возврашает $('div.class'), мне казалось что массис ссылок на дивы... Но почему тогда не работает
anim[0]?
Ответить с цитированием
  #6 (permalink)  
Старый 09.07.2009, 17:33
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Вы имеете в виду, почему не работает anim[0].fadeIn()?
Логично, ведь anim[0] -- ссылка на DOM-объект, а у него нет метода fadeIn. anim.eq(0) - элемент jQuery, и у него уже есть соответствующие методы
Ответить с цитированием
  #7 (permalink)  
Старый 10.07.2009, 21:36
Интересующийся
Отправить личное сообщение для Tohin Посмотреть профиль Найти все сообщения от Tohin
 
Регистрация: 30.06.2009
Сообщений: 23

Опять не понял....(Уж простите ламера)
Ведь если бы див был один то конструкция:
var anim= $('div.class');
        anim.fadeIn(1500).fadeOut(1500)

сработает..

Или конструкция $('div.class') возвращает разные объекты в зависимости от их кол-ва?
то есть кода див один то $('div.class') возвращает ссылку на элемент JQuery, а при наличии нескольких дивов ссылки на DOM-объкты?

Последний раз редактировалось Tohin, 10.07.2009 в 21:40.
Ответить с цитированием
  #8 (permalink)  
Старый 11.07.2009, 00:55
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Нет, все время возвращает ссылку на елемент JQuery. Не работает так, как Вам надо, видимо потому, что Вы хотите поочередности, а в случае $('div.class').fadeIn(1500).fadeOut(1500) вся анимация будет идти одновременно. Для поочередности и надо делать так, как у Вас в посет #3, через callback
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение кода на лету ViZ Общие вопросы Javascript 7 07.11.2009 15:16
Помогите пожалуйста. Оптимизация кода. touch_the_sky Элементы интерфейса 21 18.06.2009 19:53
Помогите пожалуйста. Оптимизация кода. touch_the_sky Events/DOM/Window 0 17.06.2009 14:52
Последовательное выполнение кода avtor01 AJAX и COMET 6 29.10.2008 19:06
Оптимизация скриптов object Ваши сайты и скрипты 9 21.07.2008 13:58