Фон
Я создаю приложение типа «адресная книга». Есть много записей для загрузки. Одна идея состояла в том, чтобы сначала загрузить небольшое подмножество записей, чтобы пользователь начал, а затем поставить в очередь оставшиеся записи, отдавая приоритет тем записям, по которым пользователь щелкает. (например, если они нажимают на имена, начинающиеся с X, сначала загрузите их перед обработкой остальной части очереди). Идея состоит в том, чтобы загрузить начальный набор данных при инициализации (через AJAX), а затем загрузить остальные в фоновом режиме (делая много вызовов AJAX).
Мои многие вопросы
Концептуально, я знаю, как это сделать, но мне не ясны ограничения движка Javascript:
Зависит ли порядок исполнения браузера? Одна из вещей, которые я пытался сделать, это поставить в очередь набор записей (A, B, C и т. Д.), А затем сделать целую кучу запросов одновременно. Это было не очень успешно. Я получил большинство звонков назад, но не в каком-то определенном порядке. Мне нужны все мои звонки обратно. :)
Как мне отладить это / отследить это? Я не уверен, как Javascript обрабатывает ответ; это было достаточно просто для одного ответа, но я не уверен, как обрабатывать несколько относительно больших ответов от сервера.
Есть ли один поток выполнения для данной страницы? То есть, если Javascript получает ответ от сервера, но все еще выполняет код, блокирует ли транзакция, пока не завершится текущий исполняемый код?
Будет ли рекомендована задержка между запросами? Это также может вызвать проблемы, поскольку загрузка и отправка запроса (на данный момент) находится на этапе инициализации; если мне придется спать () между запросами, я мог бы просто заставить пользователя ждать загрузки всех данных, не пытаясь выполнить эту постепенную загрузку.
Я посмотрел на SO, но не нашел ничего полезного. Мне интересно, как JS обрабатывает эти асинхронные запросы / ответы.
Что я сделал до сих пор
Просто чтобы дать людям лучшее представление о том, что происходит, вот что я делаю в порядке исполнения. Существует 5 жестко запрограммированных категорий поиска: имена, фамилии, классы, регионы, штаты. У каждой из этих категорий есть диапазоны. Например, категория имен может иметь 26 диапазонов, по одному для каждой буквы алфавита: «Aardvark - Azariah» будет примером диапазона. Каждый диапазон содержит информацию о пользователях для каждого пользователя в этом диапазоне. У меня есть две таблицы: таблица диапазонов и таблица пользователей.
- Инициализация таблицы диапазона и объектов источника данных диапазона. Сопоставить объект таблицы диапазона с конкретными событиями.
- AJAX вызов, чтобы получить все диапазоны для каждой категории. Мы ждем этого, прежде чем продолжить.
- Инициализировать таблицу пользователей аналогично таблице диапазонов.
- Создайте очередь загрузки, чтобы получить всех пользователей для каждого диапазона. Очередь загрузки выглядит следующим образом: [lastNames ['S'], регионы ['CA'], регионы ['northwest'], lastNames ['A'] и т. Д.]
- Предварительно выберите категорию имен, диапазон имен «А» и нулевого пользователя в этом диапазоне. (Это просто произвольный выбор, который я сделал, чтобы дать пользователю отправную точку)
- AJAX-вызов для получения всех пользователей для firstName ['A']. Удалите диапазон firstNames ['A'] из очереди загрузки.
- Заполните соответствующие элементы интерфейса
- Цикл нашей очереди загрузки, освобождение от диапазонов и построение AJAX-запросов на данные.
Есть также много других деталей ... но это основная суть.
Что происходит, так это то, что моя таблица диапазонов заполняется нормально ... но затем браузер просто блокируется (spod), а затем моя таблица пользователей получает всевозможные сумасшедшие данные, заполняемые в ней. Ясно, что последний является ошибкой пользовательского интерфейса с моей стороны, поэтому я должен исследовать это, но мне не ясно, что это лучший способ сделать это.
На шаге 7 я не уверен, должна ли быть задержка между запросами. В идеале, если пользователь выберет определенный диапазон, скажем, состояния ['AK'], мы сначала обработаем этот запрос, используя этот диапазон из нашей очереди загрузки. Но если я отправлю все запросы на внешний интерфейс, то у нас никогда не будет возможности дать выбранному диапазону соответствующий приоритет.