Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   сценарий замедляет работу IE (https://javascript.ru/forum/jquery/8218-scenarijj-zamedlyaet-rabotu-ie.html)

Shaci 15.03.2010 14:09

сценарий замедляет работу IE
 
есть скрипт, в FF и Opera работает, а в IE вылетает
A script on this page is causing Internet Explorer to run slowly и.т.д.

понимаю, телепаты в отпуске, но не кажется, есть целый "класс" таких скриптов, которые нормально работают в FF, но глючат в IE,
определенно, что-то одно их должно объединять.

возможно, кто-то встречался с такой проблемой?
скорее всего в таких скриптах дело в циклах?

e1f 15.03.2010 15:13

скорее всего дело в руках...
да, и телепаты действительно в отпуске :)

subzey 15.03.2010 15:15

Да, в принципе, ничего необычного. jQuery замедляет работу IE, а IE заменяет работу jQuery.

e1f 15.03.2010 15:33

subzey, то же самое можно сказать и о Javascript в целом, относительно ИЕ.
Вообще неожиданные циклы могут появлятся из-за "лавинообразного" наступления событий: в частности, с чем-то подобным я сталкивался при использовании jQuery.resize биндов в ИЕ.

Shaci 15.03.2010 15:44

да там у меня просто много много option в select, каждый обрабатывается с jquery, если их мало, то тормозов нет, похоже дело в этом

e1f 15.03.2010 15:48

Shaci, приведите рабочий фрагмент кода, который работает медленно.

Kolyaj 15.03.2010 16:05

Есть у нас один скриптик (запускается только в Firefox), который пробегается по DOM-дереву всяких разных страничек и сохраняет всякие параметры каждого узла. Так вот, попалась страничка, на которой было порядка 3000 option'ов. На такой страничке скрипт выполнялся около 2-х минут (тут нет опечатки). К слову 3000 любых других элементов обрабатываются доли секунды.

Мораль ищите сами. Я в скрипте тупо исключил обработку options, они мне не важны.

Пользователю, кстати, много option'ов тоже не нужны.

subzey 15.03.2010 16:32

e1f,
Reflow — вообще, штука опасная в плане производительности.

Kolyaj,
спасибо, пока с подобным не сталкивался, но при случае буду готов.

Shaci 15.03.2010 16:38

Если вкратце, есть плагин, он небольшой:
http://plugins.jquery.com/project/De...SelectbySilVeR
зависимых селектов, в котором зависимость одного селекта от другого указывается на основе tilte родителя, и class зависимого селекта.
В зависимости от того, что кидается ему внутрь, может работать в двух режимах.Когда несколько селектов зависят от одного, и когда зависимость по цепочке.

Я переделал его так, чтобы зависимость была не на основе title и class, а на основе value "опшионов", но это не важно.
Так вот. там есть ф-ция (практически не менял ее):
function _createHolder($holder, $holder_cls, $child, $child_id, $child_cls){		
		var $is_created = $($holder_cls+' '+$child_id).size();                
		if( $is_created == 0 ){
			$('body').append('\n\n<select class="'+$holder+' '+$child_id+'" style="display:none">\n</select>\n');
		}        
		$($child).find('option:not(:first)').each(function(){         
			$value = $(this).attr('value');
			$class = $(this).attr('class');
			$title = $(this).attr('title');
			$text  = $(this).text();
			$($holder_cls+$child_cls).append('<option    value="'+$value+'" class="'+$class+'" title="'+$title+'">'+$text+'</option>\n');
		});
            //$child - зависимый селект
            // $($holder_cls+$child_cls) - его скрытый

которая создает для каждого зависимого селекта скрытый селект (селект-хранилище),
в который складываются все option зависимого селекта, потом, по выбору определенных option из родительского селекта к зависимому из его скрытого добавляются соответствующие option.
Так вот: эта строчка
$($holder_cls+$child_cls).append('<option value="'+$value+'" class="'+$class+'"title="'+$title+'">'+$text+'</option>\n');

приводит к тому, что IE виснет, если в зависимом select много много option будет, видимо потому, что создается целая куча элементов option.

e1f 15.03.2010 16:48

Возможно, стоит переписать не скучей аппендов, а с использованием DocumentFragment


Часовой пояс GMT +3, время: 04:47.