Как я могу вызвать сборку "мусора" JavaScript в IE? IE действует очень медленный после вызовов Ajax и управления DOM

У меня есть страница с цепочечным, выпадает. Выбор option сначала select заполняет второе, и выбор option от второго select возвращает таблицу соответствия результатам с помощью innerHtml функция на пустом div на странице.

Проблема, после того как я сделал свои выборы, и значительный объем данных принесен на страницу, весь последующий JavaScript на странице работает исключительно медленно. Кажется, как будто все данные я отступил через Ajax для заполнения div все еще hogging большая память. Я пытался установить эхо-сигнал, который содержит результаты Ajax к null после вызова innerHtml но без удачи.

Firefox, Safari, Chrome и Opera все шоу никакое снижение производительности, когда я использую JavaScript для вставки большого количества данных в DOM, но в IE, это очень очевидно. Для тестирования этого, это - проблема Javascript/DOM, а не простая проблема IE, я создал версию страницы, которая возвращает все результаты на начальной загрузке, а не через AJAX/Javascript, и нашла, что IE не имел никаких проблем производительности.

К вашему сведению я использую jQuery.get метод jQuery для выполнения вызова Ajax.

ОТРЕДАКТИРУЙТЕ Это - то, что я делаю:

<script type="text/javascript">
function onFinalSelection() {
  var searchParameter = jQuery("#second-select").val();
  jQuery.get("pageReturningAjax.php",
  {SEARCH_PARAMETER: searchParameter},
  function(data) {
    jQuery("#result-div").get(0).innerHtml = data;
   //jQuery("#result-div").html(data); //Tried this, same problem
    data = null;
  },
  "html");
}
</script>

Я хочу отметить, что это только становится проблемой когда возврат data является довольно большим. Это непосредственно связано с размером, поскольку я могу видеть умеренное замедление для результатов среднего размера и только основное замедление, когда это - несколько сотен записей + быть возвращенным.

9
задан aw crud 3 May 2010 в 19:01
поделиться

2 ответа

Use

$("#result-div").html(data);

html() использует empty метод jQuery, который очень старается предотвратить утечки памяти.

пробовали ли вы:

delete data;

Я думаю, что в вашем коде есть другие проблемы с производительностью, вызывающие медлительность. Используются ли ваши возвращаемые данные в формате png с альфа-прозрачностью? Я видел, как это убивает IE6 (когда применяется альфа-фильтр) и значительно замедляет IE7.

7
ответ дан 4 December 2019 в 08:15
поделиться

Вы можете принудительно выполнить сборку мусора в IE с помощью функции CollectGarbage , например

if (typeof(CollectGarbage) == "function")
    CollectGarbage();

Сборщик мусора JScript подробно описан в этой записи блога: http://blogs.msdn.com/ericlippert/archive/2003/09/17/53038.aspx

Как говорится в блоге, сборщик мусора непредсказуем, поэтому delete data или data = null не освободит память немедленно, но в конечном итоге восстановит ее.


Но я сомневаюсь, что снижение производительности действительно вызвано использованием памяти; Я думаю, что это проблема с рендерингом DOM.

16
ответ дан 4 December 2019 в 08:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: