сценарий замедляет работу IE
есть скрипт, в FF и Opera работает, а в IE вылетает
A script on this page is causing Internet Explorer to run slowly и.т.д. понимаю, телепаты в отпуске, но не кажется, есть целый "класс" таких скриптов, которые нормально работают в FF, но глючат в IE, определенно, что-то одно их должно объединять. возможно, кто-то встречался с такой проблемой? скорее всего в таких скриптах дело в циклах? |
скорее всего дело в руках...
да, и телепаты действительно в отпуске :) |
Да, в принципе, ничего необычного. jQuery замедляет работу IE, а IE заменяет работу jQuery.
|
subzey, то же самое можно сказать и о Javascript в целом, относительно ИЕ.
Вообще неожиданные циклы могут появлятся из-за "лавинообразного" наступления событий: в частности, с чем-то подобным я сталкивался при использовании jQuery.resize биндов в ИЕ. |
да там у меня просто много много option в select, каждый обрабатывается с jquery, если их мало, то тормозов нет, похоже дело в этом
|
Shaci, приведите рабочий фрагмент кода, который работает медленно.
|
Есть у нас один скриптик (запускается только в Firefox), который пробегается по DOM-дереву всяких разных страничек и сохраняет всякие параметры каждого узла. Так вот, попалась страничка, на которой было порядка 3000 option'ов. На такой страничке скрипт выполнялся около 2-х минут (тут нет опечатки). К слову 3000 любых других элементов обрабатываются доли секунды.
Мораль ищите сами. Я в скрипте тупо исключил обработку options, они мне не важны. Пользователю, кстати, много option'ов тоже не нужны. |
e1f,
Reflow — вообще, штука опасная в плане производительности. Kolyaj, спасибо, пока с подобным не сталкивался, но при случае буду готов. |
Если вкратце, есть плагин, он небольшой:
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. |
Возможно, стоит переписать не скучей аппендов, а с использованием DocumentFragment
|
Часовой пояс GMT +3, время: 04:47. |