Paweł Goleń, blog

A te kilka słów chcę napisać, bo z wydajnością jest często po prostu źle. Bardzo często jest tak, że do załadowania jednej strony potrzebnych jest kilka(naście|dziesiąt) odwołań do serwera. Warto tutaj zaznaczyć, że klient (przeglądarka) nie może nawiązywać dowolnej ilości połączeń do serwera, dobrze zachowujący się klient nawiązuje jednocześnie co najwyżej dwa połączenia do jednego serwera (patrz RFC 2068). Co się dzieje, jeśli w ramach tych dwóch połączeń do załadowania strony trzeba ściągnąć 150 elementów, różnego rodzaju obrazków, plików ze skryptami, definicji stylów CSS, łatwo się domyślić. Jak to można rozwiązać?

Można rozdzielić treść dynamiczną od treści statycznej. Obrazki, skrypty, arkusze stylów mogą być pobierane z innych serwerów, niż “główna” treść. Pozwala to na równoległe pobranie większej ilości danych w jednostce czasu (bo jeśli serwerów jest 6, to przeglądarka może nawiązać 12 połączeń). Ale jeszcze lepiej, by przeglądarka tych połączeń nie musiała nawiązywać. Nie chodzi mi tu o różne techniki “konsolidacji” plików (Data URI Support), ale o efektywne wykorzystanie mechanizmów cache (pamięci podręcznej). Bardzo często mam okazję oglądać, jak przy każdym kolejnym ładowaniu strony, przeglądarka wysyła żądania o praktycznie każdy element graficzny tej strony. Co prawda dostaje od serwera odpowiedź 304 i treść nie jest pobierana, ale samo żądanie jest wysyłane. Po co? Czy obrazki zmieniają się tak szybko? Skrypty? Arkusze stylów? Śmiem wątpić. Ustawienie “czasu życia” (czyli w praktyce na przykład nagłówka Expires) takiego obrazka nawet na godzinę spowodowałoby, że tych żądań zakończonych odpowiedzią serwera 304 byłoby zdecydowanie mniej. To nie jest tak, że w przypadku “bezpiecznych aplikacji webowych” zawsze należy ustawić nagłówek Cache-control na no-store!

W przypadku aplikacji ASP.NET zauważyłem, że często wykorzystywany jest mechanizm WebResource.axd. Według informacji znajdującej się tu: Don’t run production ASP.NET Applications with debug=”true” enabled mechanizm ten jest “samooptymalizujący się”, czyli “na produkcji” automatycznie ustawiany jest “długi czas życia” zwracanych w ten sposób treści. Jeśli treści te zwracane są bez stosownych nagłówków, to można założyć, że aplikacja jest właśnie w wersji debug, co w trakcie testów penetracyjnych może być interesującą informacją. Trochę irytujące może być natomiast obserwowanie, jak po raz kolejny pobierane są te same skrypty i obrazki.

Fiddler pozwala na łatwe ukrycie odwołań do obrazków czy sesji, w których serwer zwrócił odpowiedź 304. Przy zapisywaniu takiej sesji (no trzeba mieć historię działań) okazuje się nagle, że poza 100 sesji widocznych w UI jest jeszcze kilkaset sesji (odwołań do plików), które zostały wyfiltrowane. To naprawdę jest spory problem.

Warto wspomnieć o narzędziach wspomagających optymalizację stron pod względem ich wydajności. Po pierwsze wspominany już Fiddler ma rozszerzenie Timeline , które pozwala w graficznej formie przedstawić proces ładowania strony. Warto też zapoznać się z Fiddler PowerToy – Part 2: HTTP Performance. Po drugie potężna wtyczka Firebug ma rozszerzenie YSlow, które potrafi przeanalizować wskazaną stronę i wskazać obszary wymagające poprawy, a następnie odesłać do odpowiedniego fragmentu Best Practices for Speeding Up Your Web Site.

Oryginał tego wpisu dostępny jest pod adresem Coś z zupełnie innej beczki: wydajność – ilość requestów

Autor: Paweł Goleń

Czytaj dalej...

Krótki przykład jak NIE należy implementować walidacji danych wejściowych...

Czytaj dalej...

Pojawiła się wersja PyFlag dla Windows. Chyba w końcu uda mi się sprawdzić to narzędzie. Przy okazji warto też wspomnieć o PlainSight, kolejnym narzędziu (właściwie środowisku) w kolejce do sprawdzenia.

Czytaj dalej...

Jest sobie gazeta, która przez przypadek publikuje ponownie stary artykuł dotyczący problemów finansowych pewnej firmy. Agregator wiadomości uwzględnia ten artykuł, trafia on do inwestorów. Inwestorzy w panice wyprzedają akcje. Kurs akcji spada. Hipotetyczny scenariusz? No nie bardzo: Blamestorming. Swoją drogą polecam książkę Dług Honorowy.

Czytaj dalej...

Testuję sobie aplikację i co widzę? Po wpisaniu w formularz wyszukiwania znaku ' pojawia się błąd 500. No to myślę sobie – SQL Injection jak nic. Szybki test XYZ%25' AND 1=1 AND 'A' LIKE ' oraz XYZ%25' AND 1=0 AND 'A' LIKE ' (XYZ%25' by widzieć, że zapytanie działa, fragment 'A' LIKE ' dlatego, że zostawało z początku zapytania %25' z “oryginalnego” LIKE, a jakoś komentarz nie chciał działać) potwierdza hipotezę. Pozostaje więc zamiast tego 0 i 1 wstawić subselecta i jest piękny Blind SQL Injection. No i tu zaczęły się schody...

Czytaj dalej...

Śląscy policjanci zatrzymali dwóch 16-latków, którzy za pomocą stworzonego przez siebie programu rozsyłali spam. Właściciele zaatakowanego przez hakerów popularnego serwisu społecznościowego Nasza-klasa oszacowali straty na 60 mln zł. (więcej)

Czytaj dalej...

Why I'm not running Chrome anymore (back to IE8 beta 2 for me). Dawno, dawno temu stwierdziłem, że przeglądarki skończą w “chroot”. Firefox na razie tego nie robi, IE w Vista korzysta (a przynajmniej może) z Protected Mode. Google wymyśliło skopiowało w Chrome sandbox, co jest fajnym pomysłem, ale wykonanie całości... Przy okazji – hookowanie funkcji jest ZŁE!

Czytaj dalej...

Dawno, dawno temu na wakacyjnych spotkaniach na pytanie “skąd jesteś” odpowiadaliśmy, że z Nienacka. Wiele osób pytało wówczas gdzie jest ten Nienack/Nienacko. Tym razem powrót znienacka oznacza tyle, że tak jak nagle zniknąłem (co wywołało zaniepokojenie co poniektórych), tak i nagle wracam. A zniknięcie to związane było z wakacyjnym byczeniem się (w wersji umiarkowanie intensywnej). Teraz trzeba się ogarnąć, czeka na mnie całkiem spory zapas postów do przeczytania... I szara rzeczywistość kraju, w którym sumaryczna długość autostrad pewnie jest porównywalna z długością wiaduktów, tuneli i mostów na autostradach w Chorwacji (tak, złośliwy jestem). Podejrzewam, że Chorwaci to Słowianie, którzy poszli na południe mając dość wiecznej niemożności szczepu Lecha. Mały, górzysty kraj z niewielką liczbą ludności, w dodatku tak naprawdę dopiero kilkanaście lat po wojnie domowej. I co, da się? A w naszym pięknym kraju zajmować się będziemy za grube pieniądze katastrofą w Gibraltarze, albo innymi pompatycznymi zagadnieniami “polityki historycznej”.

Oryginał tego wpisu dostępny jest pod adresem Powrót znienacka

Autor: Paweł Goleń

Pokażę jeszcze, że rzeczywiście artefakty były proste do znalezienia.

Czytaj dalej...