Wydajność aplikacji internetowych

2,332 views
2,152 views

Published on

Prezentacja z wewnętrznego spotkania Empathy Interactive nt. wydajności aplikacji internetowych.

Zapraszamy na blog Empathy www.imagineblog.pl

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,332
On SlideShare
0
From Embeds
0
Number of Embeds
267
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Wydajność aplikacji internetowych

  1. 1. Wydajność aplikacji internetowych Wojciech Soczyński
  2. 2. Czym jest wydajność ? www.empathy.pl <ul><li>Wydajność można rozpatrywać w różnych kategoriach: </li></ul><ul><li>Z perspektywy programisty jest po prostu czasem wykonywania się danego fragmentu kodu (funkcji). </li></ul><ul><li>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 </li></ul><ul><li>Performance != Responsiveness </li></ul>
  3. 3. Jak mierzyć wydajność? www.empathy.pl <ul><li>Narzędzia pomiarowe: </li></ul><ul><li>Apache benchmark – pozwala wytworzyć sztuczny ruch na serwerze o zadanych parametrach </li></ul><ul><li>Xdebug – rozszerzenie do php umożliwiające zaawansowane debugowanie skryptów oraz profilowanie </li></ul><ul><li>Microtime() ;) - funkcja php zwracająca ilość mikrosekund jakie upłyneły od unixowej epoki (1970-01-01) </li></ul>
  4. 4. 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”;
  5. 5. Narzędzia pomiarowe – jak używać? www.empathy.pl <ul><li>Xdebug: </li></ul><ul><li>Kopiujemy plik xdebug.dll do katalogu php/ext </li></ul><ul><li>Dodajemy do php.ini: </li></ul><ul><li>zend_extension = E:wampinphpphp5.3.0extphp_xdebug-2.0.5-5.3-vc6.dll </li></ul><ul><li>xdebug.profiler_enable = 1 </li></ul><ul><li>xdebug.profiler_output_dir = e:profile </li></ul><ul><li>xdebug.remote_enable = on </li></ul>
  6. 6. Spowalniacze www.empathy.pl <ul><li>Co ma największy wpływ na szybkość aplikacji PHP? </li></ul><ul><li>Złe założenia projektowe – ze złych założeń wynika większość spowalniaczy </li></ul><ul><li>Baza danych – czym większy result set tym dłuższy czas dostępu i pobrania danych </li></ul><ul><li>Powolny serwer – no comments ;P </li></ul>
  7. 7. Spowalniacze www.empathy.pl <ul><li>Dysk twardy – średni czas dostępu 15 – 20 ms , dużo małych plików do zainkludowania lub z konfiguracją </li></ul><ul><li>Niechlujny kod – prowadzi do wielokrotnego powtarzania tych samych operacji oraz niepotrzebnego wykonywaniu innych; automatycznie zwiększa to czas wykonywania się skryptu </li></ul>
  8. 8. Profilowanie: wincachegrind www.empathy.pl
  9. 9. Profilowanie: wincachegrind www.empathy.pl
  10. 10. Przykłady www.empathy.pl Baza danych: Select * from ... Kod – źle: for($i=0; $i<count($zmienna); $i++){ ... }
  11. 11. 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!;)
  12. 12. Rozwiązania www.empathy.pl <ul><li>Złe założenia projektowe – dobre założenia projektowe;) </li></ul><ul><li>Baza danych – pobieranie tylko tego co jest potrzebne, materialized views, cache </li></ul><ul><li>Dysk twardy – zakup dysku SSD;P, zminimalizowanie potrzeby dostępu do dysku, amazon s3 </li></ul><ul><li>Kod – profilowanie i wyszukiwanie wąskich gardeł, bytecode cache, zastąpienie własnych funkcji, funkcjami wbudowanymi </li></ul>
  13. 13. Rozwiązania www.empathy.pl <ul><li>Inne: </li></ul><ul><li>Ręczna kompilacja php, apache, kernela, wzrost wydajności 10-15% </li></ul><ul><li>Pregeneracja treści w cronie </li></ul><ul><li>Output buffering </li></ul><ul><li>Apache -SendBufferSize – redukuje wywołania Apache - Kernel </li></ul><ul><li>Złoty środek na wszystkie bolączki – CACHE </li></ul>
  14. 14. Przykład www.empathy.pl <ul><li>Optymalizacja bloga opartego na autorskim frameworku </li></ul><ul><li>Sposób pomiaru: </li></ul><ul><li>Microtime na początku i końcu kodu w index.php, zapis wyniku do pliku csv </li></ul><ul><li>wywołania przy użyciu apache benchmark z parametrami -c 1 -r 1000, </li></ul><ul><li>Restart serwera po każdym benchmarku </li></ul>
  15. 15. Przykład www.empathy.pl Metoda optymalizacji Wynik Poprawa do poprzedniego (%) Brak 0,0615 0 Opcode cache 0,0301 52 Cache pliku konfiguracyjnego 1 0,0278 7,6 Cache zawartości strony 0,0183 34,2 Cache pliku konfiguracyjnego 2 0,0141 23 W sumie 77
  16. 16. Optymalizacja: Fakty i mity www.empathy.pl <ul><li>Hierarchia szybkości: </li></ul><ul><li>Funkcje użytkownika </li></ul><ul><li>Funkcje wbudowane </li></ul><ul><li>Elementy języka </li></ul>
  17. 17. 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 absolutnych To prawda, różnica dochodzi do 11x
  18. 18. Optymalizacja: Fakty i mity www.empathy.pl Require once vs autoload Jeden 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()
  19. 19. Ź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
  20. 20. Pytania? [email_address] www.empathy.pl Wojciech Soczyński

×