Your SlideShare is downloading. ×
  • Like
Wydajność aplikacji internetowych
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Wydajność aplikacji internetowych

  • 1,937 views
Published

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

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

Zapraszamy na blog Empathy www.imagineblog.pl

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,937
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
4
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Wydajność aplikacji internetowych Wojciech Soczyński
  • 2. 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
  • 3. 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)
  • 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. Narzędzia pomiarowe – jak używać? www.empathy.pl
    • Xdebug:
    • Kopiujemy plik xdebug.dll do katalogu php/ext
    • Dodajemy do php.ini:
    • zend_extension = E:wampinphpphp5.3.0extphp_xdebug-2.0.5-5.3-vc6.dll
    • xdebug.profiler_enable = 1
    • xdebug.profiler_output_dir = e:profile
    • xdebug.remote_enable = on
  • 6. 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
  • 7. 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
  • 8. Profilowanie: wincachegrind www.empathy.pl
  • 9. Profilowanie: wincachegrind www.empathy.pl
  • 10. Przykłady www.empathy.pl Baza danych: Select * from ... Kod – źle: for($i=0; $i<count($zmienna); $i++){ ... }
  • 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. 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
  • 13. 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
  • 14. Przykład www.empathy.pl
    • Optymalizacja bloga opartego na autorskim frameworku
    • Sposób pomiaru:
    • Microtime na początku i końcu kodu w index.php, zapis wyniku do pliku csv
    • wywołania przy użyciu apache benchmark z parametrami -c 1 -r 1000,
    • Restart serwera po każdym benchmarku
  • 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. Optymalizacja: Fakty i mity www.empathy.pl
    • Hierarchia szybkości:
    • Funkcje użytkownika
    • Funkcje wbudowane
    • Elementy języka
  • 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. 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. Ź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. Pytania? [email_address] www.empathy.pl Wojciech Soczyński