Wydajność aplikacji internetowych

20
Wydajność aplikacji internetowych Wojciech Soczyński

description

Prezentacja z wewnętrznego spotkania Empathy Interactive nt. wydajności aplikacji internetowych. Zapraszamy na blog Empathy www.imagineblog.pl

Transcript of Wydajność aplikacji internetowych

Page 1: Wydajność aplikacji internetowych

Wydajność aplikacji internetowych

Wojciech Soczyński

Page 2: Wydajność aplikacji internetowych

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

Page 3: Wydajność aplikacji internetowych

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)

Page 4: Wydajność aplikacji internetowych

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”;

Page 5: Wydajność aplikacji internetowych

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

Page 6: Wydajność aplikacji internetowych

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

Page 7: Wydajność aplikacji internetowych

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

Page 8: Wydajność aplikacji internetowych

Profilowanie: wincachegrind

www.empathy.pl

Page 9: Wydajność aplikacji internetowych

Profilowanie: wincachegrind

www.empathy.pl

Page 10: Wydajność aplikacji internetowych

Przykłady

www.empathy.pl

Baza danych:Select * from ...

Kod – źle:

for($i=0; $i<count($zmienna); $i++){...}

Page 11: Wydajność aplikacji internetowych

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!;)

Page 12: Wydajność aplikacji internetowych

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

Page 13: Wydajność aplikacji internetowych

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

Page 14: Wydajność aplikacji internetowych

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

Page 15: Wydajność aplikacji internetowych

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

Page 16: Wydajność aplikacji internetowych

Optymalizacja:Fakty i mity

www.empathy.pl

Hierarchia szybkości:1.Funkcje użytkownika2.Funkcje wbudowane3.Elementy języka

Page 17: Wydajność aplikacji internetowych

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

Page 18: Wydajność aplikacji internetowych

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()

Page 19: Wydajność aplikacji internetowych

Ź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

Page 20: Wydajność aplikacji internetowych

Pytania?

[email protected]

Wojciech Soczyński