Как сократить время обработки веб-формы - PullRequest
1 голос
/ 30 июня 2009

У меня есть веб-форма с довольно большим количеством полей (от 15 до 40, в зависимости от пользовательских настроек). Когда пользователь заканчивает заполнять форму, я блокирую ее с помощью jQuery.blockUI, а затем на стороне сервера обрабатываю форму, упаковываю ее в xml и вызываю новую страницу. Но переход между страницами обычно занимает около 1 или 2 секунд, и я хочу уменьшить его.

Можно выполнить всю обработку на следующей странице, поскольку данные затем отправляются на внешние веб-службы и ожидают ответа. Это занимает до 2 минут, поэтому на 1 или 2 секунды их меньше.

Итак, есть ли простой способ выполнить всю обработку данных и при этом сократить время перехода?

Заранее спасибо

ОБНОВЛЕНИЕ: Я почти уверен, что это был бы лучший подход. Но правильное время - главный приоритет, и я убежден, что знаю горлышко бутылки и не имею ни малейшего представления о том, как решить или ускорить синтаксический анализ данных в XML, содержащий почти 200 полей (около 50 из форма, отдых от запросов или кода).

Отметим, что 2 секунды приходят не только из-за синтаксического анализа данных, но и из-за нашего замедленного соединения на сервере разработки и скорости соединения в Испании в целом. Я на 80% уверен, что на производственном сервере это будет не так медленно, но я не хочу рисковать, предполагая, что ничто не может быть ускорено.

Тогда пара минут, связанных с запросом внешних веб-сервисов, не в моих руках. Он связывается с веб-сервисом провайдера, который связывается с парой компаний автострахования, которые получают данные и выбрасывают список страховых цен? (извините, не знаю правильного слова). И поскольку это потерянное время, я думаю, что могу скрыть эти две секунды конструкции XML здесь.

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

Ответы [ 3 ]

2 голосов
/ 30 июня 2009

Вы можете попытаться выполнить обработку в другом потоке. Просто возьмите строку, закрутите нить и верните результат. К сожалению, программирование потоков не считается «простым». Кстати, обычно теперь воспринимается как что-либо ниже 3 сек.

2 голосов
/ 30 июня 2009

Я думаю, вам нужно сосредоточиться на том, почему так долго обрабатывается 40 полей. Каковы возможные узкие места на бэкэнде? Какие запросы вы выполняете так долго? Если вы можете сократить время обработки до менее чем 10 секунд, вы можете избежать обработки вашей страницы, в противном случае вам понадобится другая архитектура, такая как REST или NServiceBus, чтобы разгрузить длительное выполнение и каким-то образом уведомить клиента, что вы закончили.

0 голосов
/ 01 июля 2009

Я перечитал ваш вопрос и извините за то, что не подумал сначала спросить: нужно ли анализировать форму обратно в XML? Можно ли сериализовать ваши данные в JSON, передать их на сервер, десериализовать и сделать веб-запрос? Формат JSON намного «легче», чем XML, и вы сериализуете и десериализуете с помощью такой библиотеки, как JSON.Net . Это должно устранить некоторые ваши накладные расходы на обработку.

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

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

...