У меня есть страница, где мы используем шаблон пользовательского интерфейса Kendo для создания кучи HTML для вставки в DOM. Мы говорим 2+ миллионов байт. Все остальные браузеры покажут это примерно через 2 - 3 секунды или около того. Я уже избегаю jQuery и устанавливаю innerHTML через вызов document.getByElementId. Похоже, что самая медленная часть - это вызовы regexp.test, которые делает IE. Является ли IE доверенным, что все стартовые/конечные теги совпадают? Если да, есть ли способ сказать IE пропустить эту проверку, чтобы ускорить работу (т.е. "Доверять мне")? Я уже уменьшил HTML, который был как можно меньше, так что это уже не вариант. Кроме того, данные, которые я показываю, еще не являются крупнейшим набором данных, поэтому я знаю, что он будет намного больше. У кого-нибудь есть идеи?
Обновить:
Это текущий код, который я использую:
var resultHtml = kendo.template(templateHtml, { useWithBlock: false })(currentPage.ViewModel);
resultHtml = resultHtml.replace(new RegExp("\>[\n\t ]+\<", "g"), "><"); // Get rid of whitespace
document.getElementById("tblData").innerHTML = resultHtml;
В IE это заканчивается тем, что занимает около 10 секунд, чтобы показать, когда генерируется 2,5 миллиона символов. В Chrome/FireFox/Opera это занимает от 2 до 3 секунд.
Проблема в том, что HTML не добавляется в DOM. Он имеет отношение ко всем объектам, которые у меня есть, к двухстороннему связыванию с Kendo MVVM. Извини за это!
Реализуйте что-то вроде "двойной буферизации".
Создайте узел, который не является частью DOM.
var offlineNode = $('<div />');
Извлеките содержимое в автономный узел.
offline.html(kendoTemplate(billionData));
Закончив, переместите весь узел в DOM.
offlineNode.appendTo($('#a-place-in-dom'));
У IE есть проблемы с угадыванием, когда нужно повторно отобразить страницу, поэтому разумно манипулировать DOM. Каждый раз, когда вы делаете огромные изменения DOM, IE будет медленным.