Wydajność aplikacji internetowych
-
Upload
empathy-interactive -
Category
Technology
-
view
2.014 -
download
2
description
Transcript of Wydajność aplikacji internetowych
Wydajność aplikacji internetowych
Wojciech Soczyński
Czym jest wydajność ?
www.empathy.pl
Wydajność można rozpatrywać w różnych kategoriach:
Z perspektywy programisty jest po prostu czasem wykonywania się danego fragmentu kodu (funkcji).
Z perspektywy użytkownika, jest to 'responsiveness' (czas odpowiedzi systemu), czyli czas po jakim program komputerowy wykona działanie w odpowiedzi na działanie użytkownika
Performance != Responsiveness
Jak mierzyć wydajność?
www.empathy.pl
Narzędzia pomiarowe: Apache benchmark – pozwala wytworzyć sztuczny ruch na serwerze o zadanych parametrach Xdebug – rozszerzenie do php umożliwiające zaawansowane debugowanie skryptów oraz profilowanie Microtime() ;) - funkcja php zwracająca ilość mikrosekund jakie upłyneły od unixowej epoki (1970-01-01)
Narzędzia pomiarowe – jak używać ?
www.empathy.pl
Apache benchmark:Ab -c 5 -n 1000 http://localhost/nasza-strona/
Microtime:$fStart = microtime(true);//testowany kod$fEnd = microtime(true);$fResult = $fEnd - $fStart;
Echo „Kod wykonał się w $fResult sekund”;
Narzędzia pomiarowe – jak używać?
www.empathy.pl
Xdebug:1.Kopiujemy plik xdebug.dll do katalogu php/ext2.Dodajemy do php.ini:
zend_extension = E:\wamp\bin\php\php5.3.0\ext\php_xdebug-2.0.5-5.3-vc6.dllxdebug.profiler_enable = 1xdebug.profiler_output_dir = e:\profilexdebug.remote_enable = on
Spowalniacze
www.empathy.pl
Co ma największy wpływ na szybkość aplikacji PHP? Złe założenia projektowe – ze złych założeń wynika większość spowalniaczy
Baza danych – czym większy result set tym dłuższy czas dostępu i pobrania danych
Powolny serwer – no comments ;P
Spowalniacze
www.empathy.pl
Dysk twardy – średni czas dostępu 15 – 20 ms , dużo małych plików do zainkludowania lub z konfiguracją
Niechlujny kod – prowadzi do wielokrotnego powtarzania tych samych operacji oraz niepotrzebnego wykonywaniu innych; automatycznie zwiększa to czas wykonywania się skryptu
Profilowanie: wincachegrind
www.empathy.pl
Profilowanie: wincachegrind
www.empathy.pl
Przykłady
www.empathy.pl
Baza danych:Select * from ...
Kod – źle:
for($i=0; $i<count($zmienna); $i++){...}
Przykłady
www.empathy.pl
Kod - fatalnie:for($i=0; $i<1000; $i++){
$query = „select * from something where id= $i”
$result = mysql_query($query);}
Powolny serwer:Uruchamianie serwisu z sieciowego dysku twardego
ROTFL!;)
Rozwiązania
www.empathy.pl
Złe założenia projektowe – dobre założenia projektowe;) Baza danych – pobieranie tylko tego co jest potrzebne, materialized views, cache Dysk twardy – zakup dysku SSD;P, zminimalizowanie potrzeby dostępu do dysku, amazon s3 Kod – profilowanie i wyszukiwanie wąskich gardeł, bytecode cache, zastąpienie własnych funkcji, funkcjami wbudowanymi
Rozwiązania
www.empathy.pl
Inne: Ręczna kompilacja php, apache, kernela, wzrost wydajności 10-15% Pregeneracja treści w cronie Output buffering Apache -SendBufferSize – redukuje wywołania Apache - Kernel Złoty środek na wszystkie bolączki – CACHE
Przykład
www.empathy.pl
Optymalizacja bloga opartego na autorskim frameworku
Sposób pomiaru:1.Microtime na początku i końcu kodu w index.php, zapis wyniku do pliku csv2.wywołania przy użyciu apache benchmark z parametrami -c 1 -r 1000,3.Restart serwera po każdym benchmarku
Przykład
www.empathy.pl
Metoda optymalizacji WynikPoprawa do
poprzedniego (%)
Brak 0,0615 0Opcode cache 0,0301 52Cache pliku konfiguracyjnego 1 0,0278 7,6
Cache zawartości strony 0,0183 34,2Cache pliku konfiguracyjnego 2 0,0141 23
W sumie 77
Optymalizacja:Fakty i mity
www.empathy.pl
Hierarchia szybkości:1.Funkcje użytkownika2.Funkcje wbudowane3.Elementy języka
Optymalizacja:Fakty i mity
www.empathy.pl
Pętla for z i-- jest szybsza od pętli for z i++Jest rzeczywiście szybsza, ale różnica wynosi 5% na 10 mln iteracji
Echo jest szybsze od print() Jest 5x, ale i tak różnica jest tak mała, że szkoda się tym przejmować
Ścieżki relatywne są wolniejsze od absolutnychTo prawda, różnica dochodzi do 11x
Optymalizacja:Fakty i mity
www.empathy.pl
Require once vs autoloadJeden z testów dużej aplikacji na Zend Frameworku wykazał ponad 70% wzrostu wydajności po usunięciu require i zastosowaniu autoloadera
@ - operator uciszania błędów Bardzo wolny ze względu na zmianę error_reporting()
Źródła
www.empathy.pl
http://planet-php.net/
http://www.brandonsavage.net/?s=optimizations
http://ilia.ws/files/phpquebec_2009.pdf
http://www.survivethedeepend.com
http://till.vox.com/library/post/zendframework-performance.html