SlideShare a Scribd company logo
1 of 30
Wydajność i
optymalizacja
MICHAŁ ŁUKASZEWSKI
/LUKASZEWSKI.MICHAL
/ M_LUKASZEWSKI
Problem?


PHP jest coraz szybszy



Sprzęt coraz tańszy



Jesteśmy świetnymi programistami
Problem!


Język jest tak szybki jak mu się na to pozwoli



Sprzęt mamy taki jak dostaniemy



Jesteśmy świetnymi programistami?
Rozwiązania?


To proste!



Skalowanie pionowe



Skalowanie poziome

•
•
•
•
•

Akceleratory
Cache key/value
HHVM
KittenPHP
Zephir

• Apache + mod_php
• Apache + fcgi
• nginx + php-fpm
HHVM vs nginx + php-fpm 5.5

Symfony "Hello world" test

A little heavier work

http://www.alexfu.it/2013/10/22/symfony-benchmark-on-hhvm.html
HHVM


prawie zgodny z PHP 5.4



prawie działają na nim najpopularniejsze frameworki
Zephir


Prawie PHP w składni prawie C



Prawie jak JIT compiler



Opcache na skompilowane obiekty, nie kod bajtowy



Obłędnie szybki
So...
From this

to this
Sratatata
Let's the war begin


Kiedy zaczynamy optymalizację?



Od czego zaczynamy optymalizację?



Kiedy kończymy optymalizację?

A warto w ogóle zaczynać?
Dig deeper


Optymalna architektura



Optymalna implementacja



Mikro optymalizacja
Mikro optymalizacja


echo con.cat vs echo seq,uence
Mikro optymalizacja
 SEQ

= ECHO 'STRING',$VAR,'STRING'

 CONCAT

 ONESTR

= ECHO "STRING",$VAR,"STRING"

= ECHO "STRING $VAR STRING"
How to kill the machine


"anty-YAGNI"



Over-engineering



"anty-KISS"
SOLID?
Fight!


Obiektowy vs strukturalny



Elastyczny vs dedykowany



Nowoczesne fw vs brak fw



PSR vs minimalizm



Kasa vs kasa
Wydajność FW
Skoro musisz korzystać z FW i być zgodny ze wszystkimi zasadami na
świecie - wybierz przynajmniej wydajną podstawę

http://www.ruilog.com/blog/view/b6f0e42cf705.html
HHVM vs "popularne" fw
Seek & destroy


Analiza statyczna



Profilowanie



Load testy
Analiza statyczna


Przesłanki, nie fakty



Skomplikowany kod jest podejrzany



Prosty wcale nie musi być wydajny



Pluginy do IDE



Sonar
Profilowanie


Bardzo dobrze!



Programiści to kłamczuszki?



Profilowanie = aplikacja zapełniona danymi



Profilowanie = scenariusze testowe



Profilowanie = przewidywanie ruchu
Przykład
Drupal

Symfony

http://itarato.blogspot.com/2013/01/drupal-and-symfony-with-xdebug-and.html
http://www.ruilog.com/blog/view/b6f0e42cf705.html

Laravel
Load testy


Środowisko musi odpowiadać warunkom produkcyjnym



Aplikacja zapełniona danymi



Przygotowanie scenariuszy jest upierdliwe



Analiza wyników wcale nie taka prosta



Czasochłonne



"Dość" późno
Gentlemen Start Your Engines


w 80% przypadków po prostu pisz dobrze



pozostałe 20% (optymalizowane pod kątem wydajności) będą
wymagały zatrudnienia pozostałych 80% wiedzy jaką masz, możesz
mieć i - kiedyś - powinieneś mieć.
CC-2.0
zdjęcia pochodzą z


http://www.flickr.com/photos/sarahsue/1367962715/



http://www.flickr.com/photos/myoldpostcards/8350545853/



http://www.flickr.com/photos/56216216@N07/9094516993/



http://www.flickr.com/photos/devincrawford/532081408/



http://www.flickr.com/photos/creative809/4649207340/



http://www.flickr.com/photos/85709842@N03/7957933258/



http://www.flickr.com/photos/71928544@N04/8670224587/



Vodafone McLaren Mercedes press materials

More Related Content

Similar to Wydajność i optymalizacja

Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%Laravel Poland MeetUp
 
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPJak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPPiotr Horzycki
 
CI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieCI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieGrzegorz Godlewski
 
Od Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduOd Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduThe Software House
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowychTomasz Borowski
 
PHP5. Tworzenie stron WWW. Ćwiczenia praktyczne. Wydanie II
PHP5. Tworzenie stron WWW. Ćwiczenia praktyczne. Wydanie IIPHP5. Tworzenie stron WWW. Ćwiczenia praktyczne. Wydanie II
PHP5. Tworzenie stron WWW. Ćwiczenia praktyczne. Wydanie IIWydawnictwo Helion
 
Najczęstsze błędy początkujących programistów PHP
Najczęstsze błędy początkujących programistów PHPNajczęstsze błędy początkujących programistów PHP
Najczęstsze błędy początkujących programistów PHPPHPstokPHPstok
 
Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012Cezary Walenciuk
 
PHP meetup#4 Godek
PHP meetup#4 GodekPHP meetup#4 Godek
PHP meetup#4 GodekMaciek Godek
 

Similar to Wydajność i optymalizacja (20)

Webinar symfony
Webinar symfonyWebinar symfony
Webinar symfony
 
PHP5. Radocha z programowania
PHP5. Radocha z programowaniaPHP5. Radocha z programowania
PHP5. Radocha z programowania
 
Laravel/PHP - zderzenie z PDFami
Laravel/PHP - zderzenie z PDFamiLaravel/PHP - zderzenie z PDFami
Laravel/PHP - zderzenie z PDFami
 
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
 
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPJak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
 
PHP-PM. Hit czy kit?
PHP-PM. Hit czy kit?PHP-PM. Hit czy kit?
PHP-PM. Hit czy kit?
 
Swoole w PHP. Czy to ma sens?
Swoole w PHP. Czy to ma sens?Swoole w PHP. Czy to ma sens?
Swoole w PHP. Czy to ma sens?
 
CI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieCI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecie
 
PHP5. Księga eksperta
PHP5. Księga ekspertaPHP5. Księga eksperta
PHP5. Księga eksperta
 
Od Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduOd Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki kodu
 
Roaaar!
Roaaar!Roaaar!
Roaaar!
 
PHP. Praktyczne wprowadzenie
PHP. Praktyczne wprowadzeniePHP. Praktyczne wprowadzenie
PHP. Praktyczne wprowadzenie
 
Od zera do Automattica
Od zera do AutomatticaOd zera do Automattica
Od zera do Automattica
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
 
Php 4 a bíblia
Php 4   a bíbliaPhp 4   a bíblia
Php 4 a bíblia
 
Websockety w PHP
Websockety w PHPWebsockety w PHP
Websockety w PHP
 
PHP5. Tworzenie stron WWW. Ćwiczenia praktyczne. Wydanie II
PHP5. Tworzenie stron WWW. Ćwiczenia praktyczne. Wydanie IIPHP5. Tworzenie stron WWW. Ćwiczenia praktyczne. Wydanie II
PHP5. Tworzenie stron WWW. Ćwiczenia praktyczne. Wydanie II
 
Najczęstsze błędy początkujących programistów PHP
Najczęstsze błędy początkujących programistów PHPNajczęstsze błędy początkujących programistów PHP
Najczęstsze błędy początkujących programistów PHP
 
Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012
 
PHP meetup#4 Godek
PHP meetup#4 GodekPHP meetup#4 Godek
PHP meetup#4 Godek
 

More from Michal Lukaszewski

How we built a tools stack for the benchmarking AI and what happened next
How we built a tools stack for the benchmarking AI and what happened nextHow we built a tools stack for the benchmarking AI and what happened next
How we built a tools stack for the benchmarking AI and what happened nextMichal Lukaszewski
 
Dwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędówDwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędówMichal Lukaszewski
 
How to fix a code to not corrupt an application
How to fix a code to not corrupt an applicationHow to fix a code to not corrupt an application
How to fix a code to not corrupt an applicationMichal Lukaszewski
 
Distributed Systems @ Code Europe
Distributed Systems @ Code EuropeDistributed Systems @ Code Europe
Distributed Systems @ Code EuropeMichal Lukaszewski
 
Budowanie aplikacji PHP bez użycia frameworków
Budowanie aplikacji PHP bez użycia frameworkówBudowanie aplikacji PHP bez użycia frameworków
Budowanie aplikacji PHP bez użycia frameworkówMichal Lukaszewski
 
Domain Events in Distributed Architecture
Domain Events in Distributed ArchitectureDomain Events in Distributed Architecture
Domain Events in Distributed ArchitectureMichal Lukaszewski
 
Technologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadku
Technologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadkuTechnologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadku
Technologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadkuMichal Lukaszewski
 

More from Michal Lukaszewski (9)

How we built a tools stack for the benchmarking AI and what happened next
How we built a tools stack for the benchmarking AI and what happened nextHow we built a tools stack for the benchmarking AI and what happened next
How we built a tools stack for the benchmarking AI and what happened next
 
Dwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędówDwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędów
 
How to fix a code to not corrupt an application
How to fix a code to not corrupt an applicationHow to fix a code to not corrupt an application
How to fix a code to not corrupt an application
 
Distributed Systems @ Code Europe
Distributed Systems @ Code EuropeDistributed Systems @ Code Europe
Distributed Systems @ Code Europe
 
Budowanie aplikacji PHP bez użycia frameworków
Budowanie aplikacji PHP bez użycia frameworkówBudowanie aplikacji PHP bez użycia frameworków
Budowanie aplikacji PHP bez użycia frameworków
 
Domain Events in Distributed Architecture
Domain Events in Distributed ArchitectureDomain Events in Distributed Architecture
Domain Events in Distributed Architecture
 
Action Domain Response
Action Domain ResponseAction Domain Response
Action Domain Response
 
Technologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadku
Technologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadkuTechnologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadku
Technologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadku
 
Solid vs php
Solid vs phpSolid vs php
Solid vs php
 

Wydajność i optymalizacja