Wydajność i optymalizacja

Post on 13-Apr-2017

763 views 0 download

Transcript of Wydajność i optymalizacja

Wydajność i optymalizacjaMICHAŁ Ł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

• Apache + mod_php• Apache + fcgi• nginx + php-fpm

• Akceleratory• Cache key/value• HHVM• KittenPHP• Zephir

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 = ECHO "STRING",$VAR,"STRING" ONESTR = 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

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

Wydajność FW

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.htmlhttp://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