Совсем недавно столкнулся с проблемой, отправленные ajax запросы от клиента к серверу (сайт на asp.net) обрабатываются по очереди. Собственно статья о причинах и о том как это решить.
Во что это все выливалось:
После загрузки страницы, формируется 10 одновременных ajax запросов на сервер, каждый из которых обрабатывался до 30 секунд, но в среднем 2-5 секунд. Но вот проблема, пока эти запросы не выполнятся, то другую страницу с этого сайта открыть не возможно.
При детально рассмотрении на обработку ajax запросов оказалось, что они выполняются последовательно. Т.е. в определенный момент времени на сервере обрабатывается только 1 запрос, а замышлялось изначально, чтобы север обрабатывал одновременно 10 запросов.
Как оказалось во всем виноват asp.net и сессия.
Из MSDN:
Решением этой проблемы стало отключение сессии на странице которую запрашивает ajax, для этого в директиве @Page устанавливаем EnableSessionState в false
При рассмотрении последовательности обработки запросов ситуация у нас улучшилась. Теперь у нас параллельно обрабатывается до 6 запросов (браузер Chrome). FF дал такие же результаты, а IE 8 обрабатывал параллельно только 2 запроса.
После тестирования на IE стало понятно, что в этому уже виноват браузер.
Поиск решения этой проблемы привел меня сюда.
В этой статье хорошо описаны и причины таких ограничений, и методы обхода их.
Я же пошел по пути уменьшения количества запросов, и оптимизации серверной стороны. Не разбираясь в том как при помощи ajax можно запрашивать данные с других доменов.
Во что это все выливалось:
После загрузки страницы, формируется 10 одновременных ajax запросов на сервер, каждый из которых обрабатывался до 30 секунд, но в среднем 2-5 секунд. Но вот проблема, пока эти запросы не выполнятся, то другую страницу с этого сайта открыть не возможно.
При детально рассмотрении на обработку ajax запросов оказалось, что они выполняются последовательно. Т.е. в определенный момент времени на сервере обрабатывается только 1 запрос, а замышлялось изначально, чтобы север обрабатывал одновременно 10 запросов.
Как оказалось во всем виноват asp.net и сессия.
Из MSDN:
"Доступ к состоянию сеанса ASP.NET эксклюзивен для одного сеанса... Но если два параллельных запроса выполняются для одного сеанса (с использованием одного значения идентификатора SessionID), первый запрос получает эксклюзивный доступ к данным сеанса. Второй запрос выполняется только после выполнения первого запроса.
"http://msdn.microsoft.com/ru-ru/library/ms178581(v=vs.90).aspx
Решением этой проблемы стало отключение сессии на странице которую запрашивает ajax, для этого в директиве @Page устанавливаем EnableSessionState в false
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="DataManager.aspx.cs" Inherits="DataManager" EnableSessionState="False" %>
При рассмотрении последовательности обработки запросов ситуация у нас улучшилась. Теперь у нас параллельно обрабатывается до 6 запросов (браузер Chrome). FF дал такие же результаты, а IE 8 обрабатывал параллельно только 2 запроса.
После тестирования на IE стало понятно, что в этому уже виноват браузер.
Поиск решения этой проблемы привел меня сюда.
В этой статье хорошо описаны и причины таких ограничений, и методы обхода их.
Я же пошел по пути уменьшения количества запросов, и оптимизации серверной стороны. Не разбираясь в том как при помощи ajax можно запрашивать данные с других доменов.
Комментариев нет:
Отправить комментарий