У меня есть страница, где я перечисляю устройства, которые мы отслеживаем для клиентов. Каждая отображаемая строка также показывает состояние устройства, то есть оно работает, приостановлено, запускается и т. Д.
Чтобы улучшить время загрузки страницы, я перечисляю устройства, но не запрашиваю их состояние, пока страница не будет отображена. Это связано с тем, что на некоторые запросы, такие как через SNMP или другие API, может потребоваться до 5-10 секунд. Таким образом, для списка, скажем, десяти устройств, может потребоваться более минуты, чтобы пользователь посмотрел на пустую страницу. Поэтому вместо этого я делаю следующее:
На странице списка устройств у меня есть следующий скрипт:
$(document).ready(function () {
var devices = $('div[name="runStatus"]');
devices.each(function () {
// Get device ID (I embed this using the HTML5 data-* attributes/annotations)
var deviceId = $(this).attr("data-deviceid");
var url = "/devmanager/status/" + deviceId;
$.getJSON(url, function (response) {
// Not actually important to the question...set text status, colours etc
$('div[data-deviceid="' + deviceId + '"]').text(response);
//...
});
});
});
Я обнаружил, что если я разрешу запускать этот скрипт, все ссылки на странице перестанут отвечать на запросы.
Я предполагаю, что это потому, что у меня довольно много почти параллельных асинхронных запросов, блокирующих, пока они не получат ответ от сервера, и каким-то образом "поток пользовательского интерфейса" блокируется этим?
Однако я думал, что этого не должно было случиться с AJAX.
Я считаю, что такое «блокирование» происходит в IE8, Chrome 8.0 и Firefox 3.6. На самом деле Chrome показывает курсор в виде стрелки + вращающийся унитаз (я использую Windows 7), как будто страница отображается не полностью.
Как я могу это исправить?