Запуск Jquery пустым в контейнере с множеством дочерних элементов, вызывающим всплывающее окно «Сценарий не отвечает» - PullRequest
0 голосов
/ 29 декабря 2011

У меня есть контейнер с 6000 детьми. Запуск Jquery.empty для этого займет около 2 секунд в одном из более быстрых браузеров, а в IE7 / 8 его очистка довольно часто уведомляет пользователя о том, что скрипт не отвечает, и дает возможность остановить его.

Читая здесь, я узнал, что мне нужно запустить Jquery.empty, поскольку у меня есть несколько объектов, связанных с jquery, и я хочу избежать утечек памяти.

Помещение пустого значения в setTimeout для облегчения "потока пользовательского интерфейса", по-видимому, не препятствует появлению всплывающего окна.

Мне нужны советы о том, как можно ускорить это или хотя бы подавить всплывающее окно. Нужно ли пытаться удалить некоторые элементы или что влияет на функцию jquery.empty? Могу ли я разбить его на две части?

Код:

Структура DOM следующая:

<div class="table">
    <a id="header1">header1</a>
    <div id="content1">
         <a class="contenttext1">contenttext1</a>
    </div>
    <div id="content2">
         <a class="contenttext2">contenttext2</a>
    </div>
    ....content3
    ....content4
    ....
</div>

Я очищаю div.table с помощью:

$(".table").empty();

Запуск $ (". Table"). Find ("*"). Length дает 6000.

Код .empty выполняется около 2 секунд.

1 Ответ

0 голосов
/ 29 декабря 2011

Не видя код, я не могу дать конкретный совет, но сначала я бы сделал две вещи:

1.) Оптимизируйте ваши селекторы так, чтобы повторяющийся код, очищающий HTML от DOM, был максимально эффективным. IE8 и IE7 печально известны своей медлительностью по сравнению с другими браузерами, но, оптимизируя скрипт, вы можете отрицать это.

2.) Запустите профилировщик в инструментах разработчика IE8 (для IE8 и IE8 Compat / IE7) и проанализируйте узкое место в результатах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...