wydajność aplikacji internetowych
DESCRIPTION
Prezentacja z wewnętrznego spotkania Empathy Interactive nt. wydajności aplikacji internetowych. Zapraszamy na blog Empathy www.imagineblog.plTRANSCRIPT
![Page 1: Wydajność aplikacji internetowych](https://reader036.vdocuments.site/reader036/viewer/2022062708/558c53c3d8b42ad5428b45f2/html5/thumbnails/1.jpg)
Wydajność aplikacji internetowych
Wojciech Soczyński
![Page 2: Wydajność aplikacji internetowych](https://reader036.vdocuments.site/reader036/viewer/2022062708/558c53c3d8b42ad5428b45f2/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062708/558c53c3d8b42ad5428b45f2/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062708/558c53c3d8b42ad5428b45f2/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062708/558c53c3d8b42ad5428b45f2/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062708/558c53c3d8b42ad5428b45f2/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062708/558c53c3d8b42ad5428b45f2/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062708/558c53c3d8b42ad5428b45f2/html5/thumbnails/8.jpg)
Profilowanie: wincachegrind
www.empathy.pl
![Page 9: Wydajność aplikacji internetowych](https://reader036.vdocuments.site/reader036/viewer/2022062708/558c53c3d8b42ad5428b45f2/html5/thumbnails/9.jpg)
Profilowanie: wincachegrind
www.empathy.pl
![Page 10: Wydajność aplikacji internetowych](https://reader036.vdocuments.site/reader036/viewer/2022062708/558c53c3d8b42ad5428b45f2/html5/thumbnails/10.jpg)
Przykłady
www.empathy.pl
Baza danych:Select * from ...
Kod – źle:
for($i=0; $i<count($zmienna); $i++){...}
![Page 11: Wydajność aplikacji internetowych](https://reader036.vdocuments.site/reader036/viewer/2022062708/558c53c3d8b42ad5428b45f2/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062708/558c53c3d8b42ad5428b45f2/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062708/558c53c3d8b42ad5428b45f2/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062708/558c53c3d8b42ad5428b45f2/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062708/558c53c3d8b42ad5428b45f2/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062708/558c53c3d8b42ad5428b45f2/html5/thumbnails/16.jpg)
Optymalizacja:Fakty i mity
www.empathy.pl
Hierarchia szybkości:1.Funkcje użytkownika2.Funkcje wbudowane3.Elementy języka
![Page 17: Wydajność aplikacji internetowych](https://reader036.vdocuments.site/reader036/viewer/2022062708/558c53c3d8b42ad5428b45f2/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062708/558c53c3d8b42ad5428b45f2/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022062708/558c53c3d8b42ad5428b45f2/html5/thumbnails/19.jpg)
Ź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