У меня есть страница с цепочечным, выпадает. Выбор 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
является довольно большим. Это непосредственно связано с размером, поскольку я могу видеть умеренное замедление для результатов среднего размера и только основное замедление, когда это - несколько сотен записей + быть возвращенным.
Use
$("#result-div").html(data);
html()
использует empty
метод jQuery, который очень старается предотвратить утечки памяти.
пробовали ли вы:
delete data;
Я думаю, что в вашем коде есть другие проблемы с производительностью, вызывающие медлительность. Используются ли ваши возвращаемые данные в формате png с альфа-прозрачностью? Я видел, как это убивает IE6 (когда применяется альфа-фильтр) и значительно замедляет IE7.
Вы можете принудительно выполнить сборку мусора в IE с помощью функции CollectGarbage , например
if (typeof(CollectGarbage) == "function")
CollectGarbage();
Сборщик мусора JScript подробно описан в этой записи блога: http://blogs.msdn.com/ericlippert/archive/2003/09/17/53038.aspx
Как говорится в блоге, сборщик мусора непредсказуем, поэтому delete data или data = null не освободит память немедленно, но в конечном итоге восстановит ее.
Но я сомневаюсь, что снижение производительности действительно вызвано использованием памяти; Я думаю, что это проблема с рендерингом DOM.