При попытке определить, почему загрузка страницы занимает 20 секунд, я обнаружил странное поведение в IE8.
Сценарий такой.
Я выполняю вызов ajax, он возвращает иобратный вызов выглядел примерно так
$("#StoreDetailsContainer").html($(tableHtml));
var StoreDetailsTable = $("#StoreDetailsTable");
StoreDetailsTable.tablesorter({ sortList: [[0, 0]], cssChildRow: "SubTable" });
StoreDetailsTable.filtertable({ cssChildRow: "SubTable" });
Однако для завершения этого бита кода потребовалось 20 секунд.
Я возился, определял время и выдает предупреждения между методами, и внезапно,это заняло всего 6 секунд.Я немного поэкспериментировал и обнаружил, что если я введу задержку после вызова .html()
и до того, как я попытаюсь манипулировать DOM, страница отобразится НАМНОГО быстрее.Теперь это выглядит так:
$("#StoreDetailsContainer").html($(tableHtml));
window.setTimeout(function() {
var StoreDetailsTable = $("#StoreDetailsTable");
StoreDetailsTable.tablesorter({ sortList: [[0, 0]], cssChildRow: "SubTable" });
StoreDetailsTable.filtertable({ cssChildRow: "SubTable" });
}, 100);
Это также занимает всего 6 секунд, несмотря на добавление к процессу дополнительных 1/10-й секунды.
Моя теория такова, потому что DOM не былIE полностью выводится на экран с помощью вызова .html()
, прежде чем пытаться работать с ним, происходит какая-то блокировка.
Есть ли способ определить, когда IE завершил рендеринг того, что было добавлено вDOM .html()
, поэтому мне не нужно использовать произвольное значение при вызове setTimeout
?