Пытаясь определить, почему загрузка страницы занимает 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 s завершил рендеринг того, что было добавлено в DOM с помощью .html ()
, поэтому мне не нужно использовать произвольное значение в вызове setTimeout
?