Я думаю, что это может работать так:
сь определить, почему страница загружалась 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
вызов?