Мне нужно динамически построить таблицу с +450 строками/+90 столбцами и показать ее в Internet Explorer. Последние два дня я сильно оптимизировал и в итоге создал набор строк таблицы в виде очень длинной строки и присвоил ее innerHTML tBody таблицы.
он отлично работает в Chrome/Mozilla, перекомпоновка занимает около 0,2 секунды, но очень медленно в Internet Explorer. рендеринг занимает около 4 секунд (я говорю «примерно», потому что, если консоль открыта (для измерения времени), рендеринг занимает 19 секунд). Другая проблема заключается в том, что innerHTML даже не поддерживается в IE9 и ниже. Итак, возникает вопрос: какой самый быстрый способ отрисовать весь HTML-код как можно быстрее в IE9?
Пример HTML:
<tr class="data-row" ><td class="hidden" style="width: -21px; padding:
10px;">"1"</td><tdclass="structureCatagory" style="width: 119px; padding:
10px;">"0381"</td><td class="structureCatagory" style="width: 139px;
padding: 10px;">"Some text"</td><td class="structureCatagory"
style="width: 139px; padding: 0px;"><img src="/Content/Images/info.png"
onclick="Interface.OnImageClicked($(this))" ></td>...
И так далее до 4178521 символа.
Javascript:
function Update() {
var displayData = Model.GetData();
if (displayData == undefined || displayData.length == 0)
return false;
var rows = "", len = displayData.length;
for (var i = 0; i < len; i++) rows += GetRow(displayData[i]);
//until here it's very fast
GlobalQueries.dataTableBody[0].innerHTML = rows;
//^ this line takes alot of time
return true;
}
Заранее спасибо!
Редактировать: Сама таблица:
<div class="grid">
<table class="fixed">
<tbody></tbody>
</table>
</div>
<style>
.grid { margin-top: 240px; margin-left: 10px; }
.grid td, .header-row td { border: 1px solid black; }
table.fixed { table-layout: fixed; }
</style>
<td>
? - person Chris G   schedule 31.05.2017GlobalQueries.dataTableBody[0].innerHTML = rows
- person H. Saleh   schedule 31.05.2017it takes about 4 seconds to render ... for a total of 4178521 characters
позвольте мне повторить это:IE needs almost 4 seconds to parse and render a 4MB html-file
. И вторая небольшая подсказка: то, что вы не видите элемент, не означает, что браузер не должен отображать его при каждой прокрутке; 450000+ узлов DOM отображаются при каждом прокрутке. Может быть, это за кадром, может быть, это перекрывается чем-то. в противном случае, возможно, изменено положение ... браузер знает только то, что видно из узла и где на экране, после рендеринга узла. - person Thomas   schedule 31.05.2017GlobalQueries.dataTableBody[0].innerHTML = rows
. Теперь его нужно разобрать: это занимает 200 миллисекунд в chrome/mozilla и 4 секунды в Internet Explorer. Рендеринг, о котором вы говорите (при каждой прокрутке), происходит после этого и происходит очень плавно во всех трех браузерах. Проблемы-- - person H. Saleh   schedule 31.05.2017