Есть ли событие IE Render Complete?

Пытаясь определить, почему загрузка страницы занимает 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 ?

8
задан CaffGeek 4 August 2011 в 16:05
поделиться