Повышение производительности страницы ASPX с помощью сетки Telerik
Мой вопрос связан с улучшением производительности страницы ASPX. Поэтому после прочтения этого поста, пожалуйста, прокомментируйте, возможно ли вообще улучшить производительность этой страницы.
Вот сценарий.
Я работаю над одним веб-приложением asp.net со следующими инструментами
- .Net 3.5
- Типизированный набор данных (10 таблиц)
- IE 8 Совместимость View-IE7 Стандарты (приложение не работает на FF, Chrome или любом другом браузере)
- Telerik RadControls. (Сетка (и), Числовые текстовые поля, Раскрывающиеся списки с автозаполнением)
- App Fabric Cache.
- Jquery и другие специфичные для страницы javascript.
ASPX-страница содержит
- 8 сеток (из которых 6 - сеточные телерики и 2 - HTML-таблицы)
- Для всех сеток telerik определены шаблоны EditFormTemplates.
- Много элементов управления (я не знаю, сколько элементов управления действительно используется, поэтому я не сильно заинтересован в очистке страницы aspx, так как для этого может потребоваться много усилий dev/qa, что, к сожалению, пока не подходит).
- Много javascript внутри RadScriptBlock.(У нас также есть javascrtip, который перемещается по ширине и другой интерфейс сетки)
- ViewState включен для всех сеток и элементов управления на странице.
Операции над этими сетками: Вставить, Обновить, Удалить, Скопировать, Удалить все.
Все эти операции выполняются через родословные.
Хитов базы данных не так много, так как большая часть данных кэшируется в appfabric.
Сейчас это может показаться странным, но на этой странице есть тысячи строк кода. Примерно 30 тыс. Строк кода, 5 тыс. Строк в jS и около 4 тыс. Строк (html/js вместе) на странице aspx. В коде есть сложная логика, которая запускается как при загрузке страницы, так и при каждом частичном обратном сообщении, и большинство сеток перепривязываются (редактируются) почти при каждом обратном сообщении.
Вещи, которые мы сделали, чтобы улучшить производительность (что не очень помогло). Примечание: перезапись всей страницы не была возможной, поэтому все улучшения должны были идти на этой странице.
- Минимизированы все JavaScript, CSS
- Добавлены все скрипты в коллекцию скриптов Radscript mangaers (я не знаю, поможет ли это в любом случае, но мне было сказано это сделать).
- Переместил весь javascript, написанный на aspx, в js файлы из RadScriptBlock
- Реорганизовано много кода и сведено к минимуму использование appfabric (push, get).
- RadCompression уже реализован.
- Все гриды используют пейджинг на сервере (5 записей на страницу).
На странице почти нет статического содержимого. Кэширование страниц, Кэширование фрагментов невозможно при использовании этой страницы.
Я не знаю, удивит ли это кого-нибудь, но частичные операции обратной передачи на этой странице занимают около 4-6 секунд (запрос + ответ + визуализация). Я думаю, что это довольно быстро, глядя на код, который работает в фоновом режиме. Но клиент так не чувствует.
Ожидается, что любая операция на странице не должна занимать более 1-1,5 секунды.
Вопросы
- Можно ли добиться такого повышения производительности, глядя на инфраструктуру, используемую на этой странице?
- Если это вообще возможно, какие вещи мне не хватает и которые могут сделать страницу лучше.
- Я видел, что ItemCreated и ItemDatabound каждой сетки вызывается намного больше, чем
RowCount
, Я знаю, что это вызывается для каждого элемента, т.е. заголовка, нижнего колонтитула и элементов, но если у меня число строк 5, почему эти методы вызываются более 10 раз? - Я видел в коде, который использовали разработчики
Rebind()
метод, как сумасшедший (может быть, это причина № 3). Может кто-нибудь сказать мне, как правильно и место позвонить Rebind? Я знаю, что Telerik Grid вызывает безусловное повторное связывание на вставках, но в каком случае нам нужно явно вызывать повторное связывание?
Я пытаюсь пересмотреть всю кодовую базу и пытаюсь найти узкие места.
Я был бы очень признателен, если бы кто-нибудь дал мне какой-либо совет, который я готов опробовать на коде.
Дайте мне знать, если потребуется дополнительная информация.
Благодарю вас.
РЕДАКТИРОВАТЬ
В дополнение к анализу, я проверил состояние всей страницы, и оно составляет около 33 КБ. Кроме того, когда я удалил AjaxSettings со страницы, страница загружается довольно быстро за 2/3 секунды. Поэтому я чувствую, что Аяксификация страницы создает некоторые проблемы при отображении страницы.
Я также зарегистрировал время процесса сервера, и это занимает около 1/2 секунды, в зависимости от того, какая сетка работает.
2 ответа
После большого анализа и копания в разных слоях мы обнаружили, что виновниками были несколько хранимых процедур. Также были выявлены ненужные вызовы для процедур, что немного замедляло работу страницы. Исправление, которое дало нам хороший прирост производительности. Также нам пришлось внести некоторые изменения в события рендеринга сетки.
Не уверен, поможет ли этот ответ кому-то в будущем, но я надеюсь, что по крайней мере он даст некоторые подсказки. Динатрас очень пригодилась в этом упражнении.
У меня есть примеры, когда доступ к данным Telerik был настроен неправильно, что приводило к сотням отдельных запросов SQL для заполнения элемента управления вместо выполнения одного запроса, который извлекал все данные одновременно. Вместо того, чтобы повторять все шаги, которые мы предприняли, чтобы проанализировать и исправить это, я надеюсь, что все в порядке, если я просто опубликую ссылку на сообщение в блоге, которое я написал об этом: http://apmblog.dynatrace.com/2014/04/03 / доступ к базам данных-модель-поехало-дикой внутри-Telerik-и-SharePoint-Asp-нетто /