Przyspieszamy ASP.NET - wstęp
Od dłuższego czasu w pracy zajmuję się tworzeniem biznesowej aplikacji webowej. Słowem wstępu, jest to system wspierający przygotowywanie projektów dofinansowanych z EFS PO KL, zrealizowany w modelu Software as Service (reklama dla zainteresowanych: www.webefs.pl). Aplikację tworzymy głównie z wykorzystaniem ASP.NET 3.5 (klasycznego – nie MVC), a w tym ASP.NET AJAX. Z ciekawostek ważnych w kontekście tego wpisu, jej interfejs graficzny zbudowaliśmy w oparciu o Office Ribbon UI, a więc jest relatywnie bogaty.
Nie tak dawno musiałem stawić czoła chyba najstarszemu problemowi w informatyce – system działa wolno. Niestety, problem nie zależał od obciążenia serwera; był zauważalny przy wręcz prawie zerowym ruchu. Dlatego optymalizację logiki aplikacji oraz jej interakcji z bazą danych, o których mniejsze lub większe pojęcie miałem, musiałem zostawić na później i zabrać się za szukanie rozwiązania gdzieś indziej. Otóż tzw. “wolne działanie” miało dwa najważniejsze symptomy:
- Strony ładowały się długo.
- Użytkownicy mieli odczucie, iż strony po załadowaniu działały wolno – jakby z opóźnieniem (chodzi tutaj o takie kwestie jak JavaScript, efekty “hover” czy samo przewijanie strony).
I najważniejsze – o ile w Chrome i Firefox prędkość była znośna, o tyle w IE (zwłaszcza 7, mniej 6 i 8) nie dało się praktycznie korzystać z aplikacji.
Oczywiście, osoby zajmujące się od dłuższego czasu tworzeniem witryn webowych, na pewno wiedzą na czym może tutaj polegać problem i jak mu zaradzić. Dla mnie jednak w owym czasie była to terra ignota. Na szczęście szybko trafiłem na bardzo ciekawą stronę:
Best Practices for Speeding Up Your Web Site
W najbliższym cyklu postów postaram się przedstawić wnioski, jakie wysnułem podczas wdrażania części z rozwiązań zaprezentowanych w powyższym artykule. W szczególności postaram się skoncentrować na praktycznych aspektach optymalizacji aplikacji web w technologii ASP.NET AJAX na serwerze IIS 6 i 7. Mam nadzieję, ta wiedza komuś się kiedyś przyda.
Niestety, w projekcie, nad którym pracuję, nie przyjąłem żadnych naukowych metod mierzenia prędkości działania stron, więc nie dysponuję danymi pokazującymi czarno na białym, iż wprowadzone rozwiązania przyczyniły się do np. skrócenia czasu ładowania stron przeciętnie o x %. Musicie zadowolić się jedynie stwierdzeniem, iż różnicę widać gołym okiem i jest znacząca ;).
Dla zachęty do przeczytania przyszłych postów z tej serii dodam, iż niektóre z prezentowanych rozwiązań są prawie idealne – wymagają małego nakładu pracy, dają widoczny efekt i praktycznie nie powodują efektów ubocznych.
Pierwszy odcinek z tej serii – już niebawem!