Въпросът ми е свързан с подобряването на производителността на aspx страницата. Така че, след като прочетете тази публикация, моля, коментирайте дали изобщо е възможно да подобрите ефективността на тази страница.
Ето сценария.
Работя върху едно уеб приложение asp.net със следните инструменти
- .Net 3.5
- Въведен набор от данни (10 таблици)
- IE 8 Compatibility View-IE7 Standards (Приложението не работи на FF, Chrome или друг браузър)
- Telerik RadControls. (Решетка(и), цифрови текстови полета(а), падащи менюта с автоматично довършване)
- App Fabric Cache.
- Jquery и други специфични за страницата javascript.
ASPX страницата съдържа
- 8 мрежи (от които 6 са telerik мрежи и 2 са html таблици)
- Всички телерик мрежи имат дефинирани EditFormTemplates.
- Много контроли (не знам колко контроли наистина се използват, така че не съм много запален по почистването на aspx страницата, тъй като това може да изисква много усилия за dev/qa, което за съжаление не е опция в момента.)
- Много javascript вътре в RadScriptBlock. (Имаме и javascrtip, който се занимава с ширината и други потребителски интерфейси на решетките)
- ViewState е активиран за всички мрежи и контроли на страницата.
Операциите върху тези мрежи са - Вмъкване, Актуализиране, Изтриване, Копиране, Премахване на всички.
Всички тези операции се извършват чрез обратно изпращане на парите.
Няма много посещения в базата данни, тъй като повечето от данните са кеширани в appfabric.
Сега това може да звучи странно, но в тази страница има хиляди редове код. Приблизително 30 000 реда в код отзад, 5 000 реда в jS и около 4 000 реда (HTML/JS комбинирани) в aspx страницата. Има сложна логика в кода, който се изпълнява при зареждане на страницата, както и при всяко частично връщане на публикация, и повечето от решетките се преобвързват(редират) при почти всяка връщане на публикация.
Неща, които направихме, за да подобрим производителността (което не помогна много). Забележка: Пренаписването на цялата страница отново не беше опция, така че всички подобрения трябваше да влязат в тази страница.
- Минимизирани всички javascripts, 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 извикват имплицитно повторно свързване при вмъквания, но в какъв сценарий трябва да извикаме повторно свързване изрично?
Опитвам се да прегледам цялата кодова база и да открия тесните места.
Наистина ще съм благодарен, ако някой ми даде някакъв съвет, който съм готов да изпробвам върху кода.
Уведомете ме, ако е необходима още информация.
Благодаря ти.
РЕДАКТИРАНЕ
В допълнение към анализа проверих състоянието на показване на цялата страница и тя е около 33kb. Освен това, когато премахнах AjaxSettings от страницата, страницата се зарежда доста бързо за 2/3 секунди. Така че смятам, че Ajaxification на страницата създава някакъв проблем при изобразяването на страницата.
Също така записах времената на сървърния процес и това отнема около 1/2 секунди в зависимост от това коя мрежа е в действие.