2013-12-12 2 views
-1

Итак, у меня есть это действие в моем контроллере mpc asp.net, который получает параметр int и возвращает некоторые json, зависящие от него. это как это действие выглядитнесколько запросов ajax к одному и тому же действию ASP.NET одновременно

Public JsonResult GetSomeData(int intParam) 
{ 
    var someData = _someService.GetSomeDataByIntParam(intParam); 
    return Json(someData); 
} 

Так что нет ничего особенного здесь, вся работа, необходимая осуществляется экземпляром SomeService и тогда действие просто возвращает JSON. эта часть _someService.GetSomeDataByIntParam(intParam); занимает в среднем от 35 до 80 миллисекунд. В интерфейсе у меня есть код JQuery, который вызывает вызов Ajax для этого действия, и когда он получает ответ, он просто помещает данные из json в DOM. это код JQuery (включая некоторые razor)

@foreach (var intParam in Model.IntParams) 
{ 
    <script type="text/javascript"> 
     $.ajax({ 
      type: 'POST', 
      url: '/SomeController/GetSomeData', 
      data { intParam: @intParam }, 
      success : function (response) { 
       var responseParam = response.param; 
       if (response.anotherParam) 
        responseParam += '<span class="some-class">!</span>'; 

       var someForm1 = $('#[email protected]'); 
       someForm1.children('span.some-another-class').html(responseParam); 

       var someForm2 = $('#[email protected]'); 
       someForm2.children('span.some-another-class').html(responseParam); 
      } 
     }); 
    </script> 
} 

Там будет в среднем 3-10 элементов Int IntParams. что js выполняется сразу после визуализации страницы. Таким образом, весь сценарий выглядит следующим образом. страница рисуется, данные json запрашиваются и когда ее доставляются обратно в js, она помещается где-то в DOM. действие, которое возвращает json, вызывает очередность другого запроса во время его выполнения. поэтому, когда те, предположим, 5 действий ajax, вызываемых к действию, только один получает исполнение за раз. (может ли это быть асинхронным без выключения состояния сеанса?) Первый запрос получает ответ в течение 30-80 миллисекунд, а пятый получает ответ через 2-2,2 секунды. это очень важная часть в моем приложении, поэтому я не хочу потерять миллисекунды. Я не понимаю Если действие занимает в среднем 30-80 миллисекунд, почему пятый получает ответ за 2 секунды. не должно ли это быть чем-то вроде 400 (5 * 80) миллисекунд? или эта очередь вызовов - это то, что занимает слишком много времени? Что можно сделать, чтобы сделать некоторые оптимизации. Я получаю изображение, если было выполнено более 10 вызовов, это займет примерно 5 секунд. Так или иначе, что можно сделать, чтобы сделать все это быстро. Любое предложение будет оценено по достоинству. (даже в js-коде)

ответ

1

Я думаю, что модель для текущего вида имеет проблему.

Пожалуйста, исправьте меня, если это ваш текущий сценарий. У вас есть какой-то единственный массив в Model.IntParams, или это может быть список. за каждый элемент в IntParams вы отправляете запросы на сервер. Предположим, если количество элементов в 5 или 10, оно отправит 5 или 10 запросов, а при разработке или тестировании это будет хорошо. После того, как у вас есть данные о производстве, это может быть 100 или 1000, тогда вам нужно отправить такой запрос. IIS обрабатывает каждый запрос, блокируя сеанс, и мы не можем говорить об этом как о параллельной обработке. Проверьте это, это может помочь вам jQuery Ajax - Running multiple requests against ASP.NET MVC

Также я порекомендую вам иметь сильную модель для представления со всеми свойствами, которые необходимо отобразить. Когда у вас есть сильная модель, заполните данные и перейдите к просмотру.

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

+0

Да, у меня есть только одна коллекция int в моей модели, но представление на самом деле является частичным представлением о том, почему мне не нужна другая вещь в моей модели. это частичное представление вводится в другом представлении, а другое представление вводится в макет, так что у тех других представлений есть модель, специфичная для них – Dimitri

+0

, а затем создайте определенную модель представления для этого представления со всеми необходимыми свойствами. Я считаю, что ваш нынешний подход наверняка откроет много проблем в будущем. Также его плохая практика для отправки запроса ajax непрерывно в цикле, что в конечном итоге приводит к производительности приложения. Вы можете почувствовать разницу только при работе с данными. – kbvishnu

+0

Мне нужно сделать ajax-вызовы в цикле. Я не знаю, какое количество вызовов будет так, поэтому у меня есть это в цикле, что еще я могу сделать? и все параметры, которые мне нужны для этой точки зрения, уже находятся в модели. Я не могу придумать что-нибудь еще, кроме этой коллекции. – Dimitri

Смежные вопросы