Подобрете производителността на страницата на ASPX с мрежите на Telerik

Въпросът ми е свързан с подобряването на производителността на aspx страницата. Така че, след като прочетете тази публикация, моля, коментирайте дали изобщо е възможно да подобрите ефективността на тази страница.

Ето сценария.

Работя върху едно уеб приложение asp.net със следните инструменти

  1. .Net 3.5
  2. Въведен набор от данни (10 таблици)
  3. IE 8 Compatibility View-IE7 Standards (Приложението не работи на FF, Chrome или друг браузър)
  4. Telerik RadControls. (Решетка(и), цифрови текстови полета(а), падащи менюта с автоматично довършване)
  5. App Fabric Cache.
  6. Jquery и други специфични за страницата javascript.

ASPX страницата съдържа

  1. 8 мрежи (от които 6 са telerik мрежи и 2 са html таблици)
  2. Всички телерик мрежи имат дефинирани EditFormTemplates.
  3. Много контроли (не знам колко контроли наистина се използват, така че не съм много запален по почистването на aspx страницата, тъй като това може да изисква много усилия за dev/qa, което за съжаление не е опция в момента.)
  4. Много javascript вътре в RadScriptBlock. (Имаме и javascrtip, който се занимава с ширината и други потребителски интерфейси на решетките)
  5. ViewState е активиран за всички мрежи и контроли на страницата.

Операциите върху тези мрежи са - Вмъкване, Актуализиране, Изтриване, Копиране, Премахване на всички.

Всички тези операции се извършват чрез обратно изпращане на парите.

Няма много посещения в базата данни, тъй като повечето от данните са кеширани в appfabric.

Сега това може да звучи странно, но в тази страница има хиляди редове код. Приблизително 30 000 реда в код отзад, 5 000 реда в jS и около 4 000 реда (HTML/JS комбинирани) в aspx страницата. Има сложна логика в кода, който се изпълнява при зареждане на страницата, както и при всяко частично връщане на публикация, и повечето от решетките се преобвързват(редират) при почти всяка връщане на публикация.

Неща, които направихме, за да подобрим производителността (което не помогна много). Забележка: Пренаписването на цялата страница отново не беше опция, така че всички подобрения трябваше да влязат в тази страница.

  1. Минимизирани всички javascripts, CSS
  2. Добавени са всички скриптове в колекцията от скриптове на Radscript mangaers (не знам дали това ще помогне във всеки случай, но ми казаха да го направя.)
  3. Преместихте целия javascript, написан на aspx, в js файлове от RadScriptBlock
  4. Рефакторинг на много код и минимизиране на използването на appfabric(push,get).
  5. RadCompression вече е внедрен.
  6. Всички мрежи използват сървърно страниране (5 записа на страница).

Страницата почти няма статично съдържание. Кеширане на страница, Кеширането на фрагменти не е възможно, като се има предвид използването на тази страница

Не знам дали това изненадва някого, но операциите за частично обратно изпращане на тази страница отнемат около 4-6 секунди (заявка+отговор+изобразяване). Мисля, че това е доста бързо, като гледам кода, който работи във фонов режим. Но клиентът не се чувства така.

Очакванията са всяка операция на страницата да не отнема повече от 1-1,5 секунди.

Въпроси

  1. Възможно ли е да получите това увеличение на производителността, като погледнете инфраструктурата, използвана в тази страница
  2. Ако изобщо е възможно кои са нещата, които ми липсват и които биха могли да направят страницата по-добра.
  3. Виждал съм, че ItemCreated и ItemDatabound на всяка мрежа се извикват много повече пъти от RowCount. Знам, че това се извиква за всеки елемент, т.е. заглавен, долен колонтитул и елементи, но ако имам брой редове 5, защо тези методи се извикват повече от 10 пъти?
  4. Видях в кода, че разработчиците са използвали Rebind() метод като луд (Може би това е причината за #3). Може ли някой да ми каже кой е правилният начин и място за обаждане на Rebind? Знам, че мрежите на Telerik извикват имплицитно повторно свързване при вмъквания, но в какъв сценарий трябва да извикаме повторно свързване изрично?

Опитвам се да прегледам цялата кодова база и да открия тесните места.

Наистина ще съм благодарен, ако някой ми даде някакъв съвет, който съм готов да изпробвам върху кода.

Уведомете ме, ако е необходима още информация.

Благодаря ти.

РЕДАКТИРАНЕ

В допълнение към анализа проверих състоянието на показване на цялата страница и тя е около 33kb. Освен това, когато премахнах AjaxSettings от страницата, страницата се зарежда доста бързо за 2/3 секунди. Така че смятам, че Ajaxification на страницата създава някакъв проблем при изобразяването на страницата.

Също така записах времената на сървърния процес и това отнема около 1/2 секунди в зависимост от това коя мрежа е в действие.


person Nilesh    schedule 09.04.2014    source източник
comment
Вижте тази статия, която предлага техники за оптимизиране на контролите Telerik AJAX: telerik.com/help/aspnet-ajax/   -  person Rumen Jekov    schedule 17.07.2014


Отговори (2)


След много анализи и ровене в различни слоеве открихме, че има няколко съхранени процедури, които са виновникът. Бяха идентифицирани и ненужни обаждания към процедурите, което доста забавяше страницата. Коригирането ни даде добър тласък на производителността. Също така трябваше да направим някои корекции в събитията за изобразяване на мрежата.

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

person Nilesh    schedule 20.08.2014

Имам примери, при които достъпът до данни на Telerik не е конфигуриран правилно, което води до стотици отделни SQL заявки за попълване на контрола, вместо да се изпълни една заявка, която извлича всички данни наведнъж. Вместо да повтаряме всички стъпки, които сме предприели, за да го анализираме и поправим, се надявам, че е добре, ако просто публикувам връзката към публикацията в блога, която написах за това: http://apmblog.dynatrace.com/2014/04/03/database-access-patterns-gone-wild-inside-telerik-sharepoint-and-asp-net/

person Andreas Grabner    schedule 11.02.2015