2009-12-22 4 views
2

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

+0

Это транзакции с базой данных, которые занимают время? Или фактическое размещение данных через панели обновления? Ваш вопрос неоднозначен. – womp

+0

Я уверен, что его публикация данных, я просмотрел запросы, и я не нашел ничего неприемлемого. Мой вопрос исходит из медлительности updatePanels, обсуждаемой в: http://stackoverflow.com/questions/267124/updatepanel-slowness-in-ie – ActiveX

ответ

6

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

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

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

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

Существует хорошее обсуждение использования UpdatePanel здесь: One Update Panel vs. Multiple Update Panels

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

+1

Самым большим фактором был updateMode, все панели обновления, куда всегда отправляли обратно сервер, который в значительной степени похож на всю страницу! – ActiveX

0

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

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

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

2

У Dave Ward есть хороший article, который оптимизирует UpdatePanels. Есть основные советы, которые вы должны понимать и использовать:

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

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

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