альтернатива для asp.net updatePanels - PullRequest
2 голосов
/ 22 декабря 2009

Я рассматриваю, что веб-приложение завершено на 90%, но оно очень медленное, даже в локальной среде (веб-сервер и БД) транзакция может занять от 5 до 10 секунд. Причина этой задержки заключается в том, что она использует панели обновления повсеместно, я имею в виду в 99,9% всех взаимодействий с БД. Какие варианты у меня есть, чтобы ускорить это приложение без необходимости переписывать все приложение? Я имею в виду, что я не против изменить кое-что здесь и там, но есть много функциональных возможностей, которые зависят от этих транзакций (панели обновления).

Ответы [ 3 ]

6 голосов
/ 22 декабря 2009

Опыт показывает, что ViewState оказывает наибольшее влияние на производительность UpdatePanels и AJAX в целом, поскольку каждый раз, когда происходит двусторонняя передача данных, все данные в ViewState должны быть сериализованы, упакованы в XmlHttpRequest и отправлены по сети.

  1. Максимально уменьшите ViewState (отключите его для элементов управления, таких как метки, которые определены на странице aspx и не будут меняться во время круговых поездок - установите для них свойство EnableViewState="False")

  2. Минимизируйте область действия UpdatePanels. Под этим я подразумеваю максимально уменьшить количество элементов управления в панелях. Если определенные элементы управления не нужно обновлять во время запросов AJAX, извлеките их из панели обновления, чтобы уменьшить накладные расходы на стороне клиента.

  3. Примите во внимание тот факт, что по умолчанию UpdatePanels «подключены», что означает, что во время каждого цикла обновления ВСЕ UpdatePanels будут выполнять свои функции обновления, даже если для изменения потребуется только одна панель. Чтобы обойти это, попробуйте использовать свойство UpdateMode="Conditional". Затем вы вынуждены запускать несколько панелей для обновления только тогда, когда это необходимо.

Здесь хорошо обсуждается использование UpdatePanel: Одна панель обновления против нескольких панелей обновления

В целом, я бы согласился с другими, что кажется, что AJAX может быть не единственной вашей проблемой. Возможно, вы захотите профилировать производительность приложения и базы данных, чтобы сфокусироваться на нужной области.

2 голосов
/ 22 декабря 2009

Есть хорошая статья Дэйва Уорда об оптимизации UpdatePanels. Вот основные советы, которые вы должны понимать и использовать:

  1. Страница перезагружается полностью, даже если фактически была изменена только одна UpdatePanel. Для оптимизации вы можете использовать Request["__EVENTTARGET"] == UpdatePanel1.ClientID подсказку, описанную в статье.
  2. Используйте событие PreRender, чтобы фактически заполнить панели данными. Таким образом вы избежите ненужной загрузки данных.

Но если у вас есть система, которая в будущем будет перегружена, было бы лучше спроектировать ее с использованием веб-сервисов, а не обновлять панели.

0 голосов
/ 22 декабря 2009

Ваш вопрос немного неясен относительно того, что происходит в рамках панелей обновления. Сами панели обновления обычно не общаются с БД и не вызывают каких-либо особых замедлений.

Вы должны профилировать SQL-запросы, которые выполняет каждая загрузка страницы (либо использовать SQL-профилировщик, какой-то .NET-профилировщик, или просто установить таймеры вокруг ваших наиболее распространенных SQL-запросов).

Если вы используете веб-сервер Firefox и Visual Studio, вы можете отключить ipv6 в Firefox. Вы можете сделать это, набрав about: config if адресную строку и изменив значение «network.dns.disableIPv6» на «true».

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