Пользовательские события YUI и одновременные действия - PullRequest
0 голосов
/ 09 марта 2009

Я работаю над приложением JavaScript, которое должно выполнить две отдельные проверки через AJAX. В зависимости от результата каждой проверки поведение различается. Здесь меня интересует случай, когда обе проверки успешны. Я определил несколько способов сделать это, и я хочу получить отзывы от SO о том, что, по их мнению, является лучшим подходом.

  1. Синхронные вызовы AJAX: это то, что я унаследовал, и он ушел. Это вызывает блокировки браузера и системы, хотя и позволяет вам хранить обработку ответов в одном потоке выполнения.
  2. Последовательное соединение: выполните AJAX-вызов для выполнения первой проверки, и, если оно прошло, выполните вторую проверку в обратном вызове первой проверки. Обработайте вторую проверку, и, если она пройдет, мы успешны. Это самое простое решение, но оно позволяет излишне соединить мои две проверки. Я также чувствую, что сериализация моих чеков не нужна и снижает производительность.
  3. Пользовательские события: при использовании модуля Event YUI и утилиты Custom Event запускаются оба вызова AJAX одновременно. Создайте пользовательское событие для каждого успешного случая, и у обратных вызовов, которые обрабатывают ответы AJAX, выбрасывается соответствующее событие для каждой проверки успеха. Затем обработчик для каждого события может подписаться на другое событие, и если оно выброшено, то мы успешно завершили.

Мой вопрос касается третьего подхода, который я предпочитаю. Мне нравится тот факт, что мои обработчики связаны только через генерируемые события, и что вызовы AJAX могут происходить одновременно. Что я хочу знать, так это кто-нибудь еще использовал этот модуль? Какие подводные камни можно ожидать? Я беспокоюсь о том, что мог подготовиться к гонке - как я могу это облегчить? И, наконец, для тех, кто читает это далеко, есть ли лучший способ? Мой список не является исчерпывающим, или дизайн в корне ошибочный? Конструктивная критика и комментарии приветствуются.

Редактировать: Хотя запросы к серверу действительно используют сеансы, они не связаны друг с другом и не записывают данные сеанса, поэтому нет никаких причин для того, чтобы они не происходили параллельно на сервере (если только сеансы PHP не имеют некоторых ограничений не знаю о). Мы также выполняем проверки на стороне сервера, но мы находим, что перед определенными важными событиями нам нужно предварительно проверить с сервером, чтобы мы могли информировать пользователя в редком случае, что что-то меняется.

1 Ответ

0 голосов
/ 09 марта 2009

Вы не утверждаете, что у вас на стороне сервера? Лично я предпочитаю вариант 2 по нескольким прагматическим причинам.

  1. Кросс-браузер означает поддержку IE, и IE разрешает только 2 невыполненных запроса к серверу. Я бы не стал использовать оба из них таким образом, чтобы это могло привести к явной блокировке браузера, не такой серьезной, как синхронные запросы, но все же довольно плохо.

  2. Зачастую такие запросы запускают серверный код, который использует какой-то сеанс, который, в свою очередь, в любом случае имеет тенденцию ограничивать обработку запросов последовательно, поэтому желаемый прирост производительности не реализуется.

Вам нужны оба результата, поэтому это требование создает связь между ними. Если вы кодируете один такой, который, возможно, соединяет цепью с другим, является частью его конструкции, и он точно знает, почему это должно быть достаточно разъединяющим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...