SlideShare a Scribd company logo
http://lynt.cz
WordPress + výkon
Vláďa Smitka
vladimir.smitka@lynt.cz
@smitka
Lynt services s.r.o.
4. 10. 2015 1
http://lynt.cz
Skrytá reklama
• Před pár dny jsme spustili nový blog, kde
probíráme možnosti automatizace PPC
http://ppc-scripts.eu
4. 10. 2015 2
http://lynt.cz
Jak zrychlit WP?
4. 10. 2015 3
Nechte to na někom jiném!
http://lynt.cz
Děkuji za pozornost!
4. 10. 2015 4
http://lynt.cz
Přednáška č. 2 – jak na to jít sami
• Funkce zmíněných služeb:
– Cache zpracované stránky
– Optimalizace zdrojů – kombinace JS a CSS, optimalizace
obrázků
4. 10. 2015 5
http://lynt.cz/blog/wordpress-v-
cz-velky-pruzkum
http://lynt.cz
Optimalizace obrázků
• Správné rozměry
• Zkontrolujte, zda jsou miniatury opravdu
miniaturní
• Správné formáty
• „webová grafika“ – 8 bit PNG, SVG
• Fotografie – JPG (kvalita 75 je často OK, v
Photoshopu 60)
• Video – MP4, FLV, GIF!
4. 10. 2015 6
http://lynt.cz
Optimalizace obrázků – 24 bit PNG
• Nejčastěji se používá kvůli alfa kanálu
• Často je použit zbytečně – alfa kanál podporují i 8
bit PNG, které jsou mnohem menší, jen
Photoshop je donedávna neuměl vytvořit
• https://tinypng.com/
• TruePNG - http://css-ig.net/articles/truepng
• AdvDef -http://advancemame.sourceforge.net/comp-
download.html
4. 10. 2015 7
http://lynt.cz
Optimalizace obrázků - pluginy
• https://wordpress.org/plugins/ewww-image-
optimizer/ + https://ewww.io
• https://wordpress.org/plugins/shortpixel-
image-optimiser/ - 100 obrázků/měsíc
zdarma
• https://wordpress.org/plugins/kraken-image-
optimizer/ - je potřeba placený plán
4. 10. 2015 8
http://lynt.cz
CSS sprites a data URI
• Jaký je problém?
• Hlavičky HTTP komunikace mají velikost průměrně
0,5 – 1KB (u malých obrázků zaberou hlavičky více než užitečná
data)
• Samotné připojení k serveru také nějaký čas trvá
• Cílem je tedy snížit počet požadavků:
A) u většího počtu obrázků lze použít jejich kombinaci do jednoho
(http://draeton.github.io/stitches/)
B) jednotlivé malé obrázky lze načít pomocí data URI:
<img src="data:image/png;base64,…data v base64…">
4. 10. 2015 9
http://lynt.cz
Optimalizace JS a CSS
• Cíl – snížení počtu dotazů na server, snížení
velikosti
• Spojení více CSS a JS souborů do jednoho +
jejich komprimace
• https://wordpress.org/plugins/autoptimize/
• https://wordpress.org/plugins/bwp-minify/
4. 10. 2015 10
http://lynt.cz
Autoptimize
4. 10. 2015 11
http://lynt.cz
Stránková cache
• Uloží zpracovanou stránku a později ji vrací
jako statický soubor
• https://wordpress.org/plugins/wp-super-
cache/
• https://wordpress.org/plugins/w3-total-
cache/
4. 10. 2015 12
http://lynt.cz
WP Super Cache
4. 10. 2015 13
http://lynt.cz4. 10. 2015 14
Děkuji za pozornost!
http://lynt.cz
Přednáška č. 3 – ta opravdová
4. 10. 2015 15
Hledání problému:
https://gtmetrix.com/
Aplikace Zdroje
http://lynt.cz4. 10. 2015 16
http://lynt.cz
Načítání zdrojů podrobněji
• http://www.webpagetest.org/
4. 10. 2015 17
http://lynt.cz
Načítání zdrojů – hlavní problémy
• Expires hlavičky (mod_expires) – zaručí, že
nebude nutné zdroje stahovat znovu (jinak se
využije heuristika prohlížeče)
• GZIP komprese (mod_deflate) – běžně 30-70%
úspora u textových souborů
• Keep Alive – udržuje spojení, není je třeba
znovu navazovat, stojí trochu RAM
4. 10. 2015 18
http://lynt.cz
Keep Alive
4. 10. 2015 19
30ms
Vypnuté udržování spojení může
být u webů s velkým počtem
zdrojů kritické na mobilních
zařízeních – velká latence
Ping 300ms, 150 zdrojů, paralelismus 5:
2x300x150/5 = 18s čekání na spojení + ukončování
Proč tolik
přesměrování?
http://lynt.cz
HTTPS & SPDY & HTTP/2
4. 10. 2015 20
HTTP/2
• šifrování,
• komprese,
• keep alive,
• binární protokol
Není nutné řešit slučování CSS,
JS, ani sprites. Jejich použití zde
může i drobně zpomalovat –
jsou najednou stahována i data,
která nejsou aktuálně potřeba.
http://lynt.cz
TTFB – co zpomaluje
• MySQL dotazy
• Nepoužívání cache
• HTTP požadavky (např. testy aktualizací)
• Čím více pluginů, tím více dotazů
4. 10. 2015 21
http://lynt.cz
Vliv pluginů
• Test na VPS od WEDOS (1 jádro, 4G RAM)
ab -n 1000 -c 4 http://domena
• Čistý WP:
Requests per second: 15.93 [#/sec]
Time per request: 251.095 [ms]
• WP + SliderRevolution + CF7 + Yoast SEO
Requests per second: 4.61 [#/sec]
Time per request: 868.450 [ms]
• WP + SliderRevolution + CF7 + Yoast SEO + WPML + Jetpack
Requests per second: 2.94 [#/sec]
Time per request: 1360.454 [ms]
4. 10. 2015 22
Výborně, během
několika minut se nám
podařilo více než 5x
snížit výkon!
http://lynt.cz
Motivace: náš server
• WP + několik běžných pluginů
Requests per second: 319.26 [#/sec]
Time per request: 12.529 [ms]
Ping 2,5 ms
4. 10. 2015 23
35 ms
Samozřejmě jsou použité podlé triky s cache, více o tom později
http://lynt.cz
P3 Profiler
• https://wordpress.org/plugins/p3-profiler/
• Nejjednodušší, nejméně informací, nejméně přesné
• Může říci, jaký plugin dělá největší problémy
4. 10. 2015 24
http://lynt.cz
Query monitor
• https://wordpress.org/plugins/query-
monitor/
• Podrobný přehled, co WP dělá
• Skvělý i při vývoji
(ukazuje např. aktivní podmínky)
4. 10. 2015 25
http://lynt.cz
Query Monitor – DB dotazy
4. 10. 2015 26
Seznam všech
dotazů
Dotazy dle
funkce
Dotazy dle
komponenty
http://lynt.cz
Query Monitor – další informace
4. 10. 2015 27
HTTP požadavky založené na wp_remote_X
curl, file_get_contents atd. neodhalí [ty lze odchytnout například analýzou provozu (tcpdump, wireshark)]
Chybí ale třeba SAVEQUERIES – další IO
Zapisuje do
souboru:
IO operace
Bude používat
neminifikované
knihovny: více dat
HTTP
požadavky
http://lynt.cz
Pohled z druhé strany
• Zatím jsme zkoumali web z pohledu aplikace
• Přišel čas podívat se na to, kde aplikace běží
4. 10. 2015 28
http://lynt.cz
Infrastruktura
4. 10. 2015 29
3 komponenty – HTTP server, DB server a Zdroje dat
Každá má úplně jiné nároky…
DB
Storage
WEBLOADBALANCER
Cloud
× 2
http://lynt.cz
Monitoring – hledáme úzké hrdlo
4. 10. 2015 30
htop
Munin
http://munin-monitoring.org/
http://www.zabbix.com/
http://www.librenms.org/
htop
iotop
iftop
nmon
http://lynt.cz
Verze PHP
• OpCode cache
• Object cache
4. 10. 2015 31
Novější verze PHP
zrychlují a hlavně
umí lépe využít
OpCache (což také
stojí více RAM)
http://lynt.cz
OpCode cache
• Při každém volání je skript přeložen z jazyka PHP
do Bytecode, aby mohl být vykonán
• OpCache výsledek uloží a není třeba opakované
kompilace
• Nutno doinstalovat (PHP < 5.5)
• APC
• Xcache
• Zend OpCache (přibaleno od PHP 5.5)
4. 10. 2015 32
http://lynt.cz
Object Cache
• Často součást modulu s OpCache, někdy samostatná
• Uživatel si může sám ukládat data pro pozdější použití
• Je potřeba povolit a alokovat velikost
• Do WP je třeba nahrát drop-in object backend
– APC
– Xcache
– APCu (pro Zend OpCache)
– Redis
– Memcached
• WP do ní bude ukládat mnoho dat, která jinak ukládá jako
tranzientní proměnné do databáze – rapidně klesne počet
DB dotazů
4. 10. 2015 33
71 z nich patří Slider Revolution
http://lynt.cz
Zjištění z Query Monitoru
• Pravděpodobně zjistíte, že se necachuje menu a
některé widgety
• http://afterburner.voceplatforms.com/back-
end.html#voce-widget-cache
• http://afterburner.voceplatforms.com/back-
end.html#voce-cached-nav
• Doporučuji projít i další nástroje a tipy z tohoto webu
4. 10. 2015 34
http://lynt.cz
HTTP server
• Je několik možností, jak PHP provozovat
• Apache (prefork) + mod_php
• Apache (mpm event/worker) + PHP-FPM, FastCGI
• Nginx + PHP-FPM
4. 10. 2015 35
Apache
Apache -
.htaccess
Nginx
req/s 8.2 9.35 9.96
0
2
4
6
8
10
12
req/s
Apache vs Nginx
Apache
Apache -
.htaccess
Nginx
Nginx +
Microcache
req/s 8.2 9.35 9.96 279.97
0
50
100
150
200
250
300
req/s
Apache vs Nginx +
Microcache (nefér srovnání)
AllowOverride None
http://lynt.cz
/wp-content/uploads/revslider/classicslider/bike.jpg
4. 10. 2015 36
Heleď,
nemáš tu
.htaccess?
A co
tady?A tady?
A nebo
tady?
A tady už
určitě
bude!
Apache se příliš nehodí pro statické soubory
http://lynt.cz
Zpět k našemu serveru
• Dříve zmíněný skvělý výsledek byl právě díky microcache –
Nginx si zapamatuje výsledek dotazu na několik
vteřin/minut a ten vrátí
• Tato technika se hodí v případech, že očekáváme zvýšenou
špičkovou návštěvnost – např. po publikaci nového obsahu
• Microcache: Requests per second: 319.26 [#/sec]
• WP Supercache: Requests per second: 270.84 [#/sec]
• Bez cachování *: Requests per second: 13.52 [#/sec]
* je třeba vzít v úvahu, že byl test prováděn v plném provozu se stovkami jiných požadavků
4. 10. 2015 37
http://lynt.cz
Poslední test
• Test na WEDOS VPS s velkou konkurenčností
ab -n 1000 -c 40 http://domena
• Requests per second: 1191.49 [#/sec] (mean)
• Time per request: 33.572 [ms] (mean)
• Time per request: 0.839 [ms] (mean, across all
concurrent requests)
Poznámka na konec:
„Použití cache s sebou vždy nese problém její invalidace!“
4. 10. 2015 38
http://lynt.cz
Opravdové nástroje
4. 10. 2015 39
http://lynt.cz
Blackfire.io
• Profilace výkonu a skvělá vizualizace
• Je třeba na server nainstalovat agenta a rozšíření do
PHP - návod
• Profilaci lze spouštět z Chrome pomocí Blackfire
Companion
• Hack verze zdarma
• Premium verze 82,5€/měsíc
(navíc analyzuje DB dotazy,
HTTP požadavky, lze pracovat v týmu,
delší dobu si pamatuje data)
4. 10. 2015 40
http://lynt.cz4. 10. 2015 41
http://lynt.cz
Přes 30% na načítání lokalizace?
• WP využívá Gettext PHP implementaci, která
není příliš rychlá
• Řešení:
• https://github.com/LyntServices/WP-lang-
cache (staré, vyžaduje zásah do jádra,
modifikace pro ObjectCache)
• https://wordpress.org/plugins/mo-cache/
4. 10. 2015 42
http://lynt.cz4. 10. 2015 43
http://lynt.cz
Proč je do_action pomalé?
4. 10. 2015 44
Od PHP5.6 lze použít optimalizovanou funkcionalitu Argument Unpacking:
…$the_['acceped_args']
Samotná funkce call_user_func_array nepředstavuje extrémní problém, problém
je, že se volá velmi často, v některých případech se jedná i o tisíce volání.
http://lynt.cz
Ukázka velkého problému
4. 10. 2015 45
http://lynt.cz
Další ukázka – i s opravou!
4. 10. 2015 46
http://lynt.cz
Další ukázka – i s opravou!
4. 10. 2015 47
Oprava:
extension=json.so
chyběl nativní modul pro práci s JSON
9.2s => 0.0248s = 370x zvýšení výkonu 
http://lynt.cz
Konec profilování
• Při profilování WP v Blackfire většinou skončíte na
2 případech:
1) do_action – obecná WP akce (podobně jako
apply_filters), v Blackfire nelze přesně
vysledovat příčiny a důsledky konkrétního volání
2) šedý proužek – výkon spotřebovaný samotnou
funkcí, není vidět kód
• V tento moment přichází debugování
4. 10. 2015 48
http://lynt.cz
Xdebug
• Rozšíření do PHP: http://xdebug.org/
• Pomocník, který poradí, co stáhnout a jak
nakonfigurovat podle výstupu z phpinfo():
http://xdebug.org/wizard.php
• Vysvětlení konfiguračních voleb:
https://gist.github.com/IngmarBoddington/53
11858
4. 10. 2015 49
xdebug.remote_enable = 1
xdebug.profiler_enable_trigger = 1
xdebug.trace_format = 1
xdebug.trace_enable_trigger = 1
http://lynt.cz
Xdebug – co to umí?
• Umožňuje krokovat kód z vývojového prostředí
• Generuje Trace-log
• Analyzuje pokrytí kódu
• Umí také profilovat (data jsou více zkreslená vlastní režií)
xdebug.profiler_enable_trigger = 1
?XDEBUG_PROFILE
• Pro vizualizaci lze použít například WebGrind:
https://github.com/jokkedk/webgrind
• Xdebug Helper do Chrome:
https://chrome.google.com/webstore/detail/xdebug-
helper/eadndfjplgieldjbigjakmdgkmoaaaoc
4. 10. 2015 50
http://lynt.cz
WebGrind
4. 10. 2015 51
http://lynt.cz
Trace
• Tracelog – ohromné množství dat
• Hodí se na řešení problémů s RAM
• https://github.com/corretge/xdebug-trace-gui
4. 10. 2015 52
řádek
strávený čas
změna využití
paměti
Stav využití paměti v průběhu vykonávání skriptu
http://lynt.cz
Trace části kódu
4. 10. 2015 53
xdebug_start_trace('for.xt');
for ($i=0;$i<3;$i++){
echo rand(0,$i);
}
xdebug_stop_trace();
TRACE START [2015-10-01 11:49:49]
2 2 1 0.005554 223088
2 3 0 0.005621 223128 rand 0 D:htdocswp4info.php 7
2 3 1 0.005740 223128
2 4 0 0.005770 223128 rand 0 D:htdocswp4info.php 7
2 4 1 0.005879 223128
2 5 0 0.005908 223128 rand 0 D:htdocswp4info.php 7
2 5 1 0.006016 223128
2 6 0 0.006044 223096 xdebug_stop_trace 0 D:htdocswp4info.php 9
0.006130 223120
TRACE END [2015-10-01 11:49:49]
http://lynt.cz
Krokování programu
4. 10. 2015 54
Default: localhost:9000
http://lynt.cz
Myšlenka otce Fura
4. 10. 2015 55
„Končí zlatá éra webových vývojářů,
začíná éra systémových administrátorů.“
http://lynt.cz
Souhrn - analýza výkonu
• Jak se web jeví navenek?
– https://gtmetrix.com/
– http://www.webpagetest.org/
– nástroje v prohlížeči
• Co zdržuje WordPress?
– P3 profiler – orientační detekce pomalých pluginů
– Query monitor – konkrétní DB dotazy a další
• Profilace a ladění
– Blackfire.io
– Xdebug (vizualizace webgrind)
4. 10. 2015 56
http://lynt.cz
A to je vše, přátelé.
4. 10. 2015 57
Malý dárek: Blackfire.io Premium na měsíc zdarma:
DODWEDOS102015
platí do 19.10.2015
kód se zadává při nákupu měsíční verze
Můžete mne samozřejmě sledovat na twitteru @smitka a navštívit náš blog http://lynt.cz/blog

More Related Content

What's hot

Nejčastejší problémy WordPress webů
Nejčastejší problémy WordPress webůNejčastejší problémy WordPress webů
Nejčastejší problémy WordPress webů
Vladimír Smitka
 
Wordfence 2016
Wordfence 2016Wordfence 2016
Wordfence 2016
Vladimír Smitka
 
Instalace WordPress
Instalace WordPressInstalace WordPress
Instalace WordPress
Vladimír Smitka
 
Jak si (ne)nechat hacknout Wordpress stránky
Jak si (ne)nechat hacknout Wordpress stránkyJak si (ne)nechat hacknout Wordpress stránky
Jak si (ne)nechat hacknout Wordpress stránky
Vladimír Smitka
 
Základní pluginy pro WordPress
Základní pluginy pro WordPressZákladní pluginy pro WordPress
Základní pluginy pro WordPress
Radek Kucera
 
Sysops tipy pro lepší WP
Sysops tipy pro lepší WPSysops tipy pro lepší WP
Sysops tipy pro lepší WP
Vladimír Smitka
 
Najčastejšie problémy WordPress webov
Najčastejšie problémy WordPress webovNajčastejšie problémy WordPress webov
Najčastejšie problémy WordPress webov
Vladimír Smitka
 
Google Tag Manager a analytika ve WordPress
Google Tag Manager a analytika ve WordPressGoogle Tag Manager a analytika ve WordPress
Google Tag Manager a analytika ve WordPress
Vladimír Smitka
 
WordCamp Bratislava 2019 - Cache!
WordCamp Bratislava 2019 - Cache!WordCamp Bratislava 2019 - Cache!
WordCamp Bratislava 2019 - Cache!
Vladimír Smitka
 
Wordpress_DOD
Wordpress_DODWordpress_DOD
Wordpress_DOD
Doubry99
 
WordPress šablony a rychlost načítání (WordCamp Praha 2017)
WordPress šablony a  rychlost načítání (WordCamp Praha 2017)WordPress šablony a  rychlost načítání (WordCamp Praha 2017)
WordPress šablony a rychlost načítání (WordCamp Praha 2017)
Martin Michálek
 
Jak zlepšit zabezpečení čtvrtiny celého webu
Jak zlepšit zabezpečení čtvrtiny celého webuJak zlepšit zabezpečení čtvrtiny celého webu
Jak zlepšit zabezpečení čtvrtiny celého webu
Michal Špaček
 
Základní pluginy pro WordPress 25-6-2016
Základní pluginy pro WordPress 25-6-2016Základní pluginy pro WordPress 25-6-2016
Základní pluginy pro WordPress 25-6-2016
Radek Kucera
 
WP Weekend 2018
WP Weekend 2018WP Weekend 2018
WP Weekend 2018
Vladimír Smitka
 
Hesla a vícefaktorová autentizace ve WP
Hesla a vícefaktorová autentizace ve WPHesla a vícefaktorová autentizace ve WP
Hesla a vícefaktorová autentizace ve WP
Vladimír Smitka
 
Verzování WordPress webů (#wpkonference 11/2014)
Verzování WordPress webů (#wpkonference 11/2014)Verzování WordPress webů (#wpkonference 11/2014)
Verzování WordPress webů (#wpkonference 11/2014)
Borek Bernard
 
Webmeetup #3
Webmeetup #3Webmeetup #3
Webmeetup #3
Vladimír Smitka
 
Jak zrychlit WP pomocí cachovacích pluginů
Jak zrychlit WP pomocí cachovacích pluginůJak zrychlit WP pomocí cachovacích pluginů
Jak zrychlit WP pomocí cachovacích pluginůJakub Klapka
 
Principy cachování ve WordPressu
Principy cachování ve WordPressuPrincipy cachování ve WordPressu
Principy cachování ve WordPressu
David Biňovec
 
Optimalizace webových aplikací
Optimalizace webových aplikacíOptimalizace webových aplikací
Optimalizace webových aplikací
Vašek Purchart
 

What's hot (20)

Nejčastejší problémy WordPress webů
Nejčastejší problémy WordPress webůNejčastejší problémy WordPress webů
Nejčastejší problémy WordPress webů
 
Wordfence 2016
Wordfence 2016Wordfence 2016
Wordfence 2016
 
Instalace WordPress
Instalace WordPressInstalace WordPress
Instalace WordPress
 
Jak si (ne)nechat hacknout Wordpress stránky
Jak si (ne)nechat hacknout Wordpress stránkyJak si (ne)nechat hacknout Wordpress stránky
Jak si (ne)nechat hacknout Wordpress stránky
 
Základní pluginy pro WordPress
Základní pluginy pro WordPressZákladní pluginy pro WordPress
Základní pluginy pro WordPress
 
Sysops tipy pro lepší WP
Sysops tipy pro lepší WPSysops tipy pro lepší WP
Sysops tipy pro lepší WP
 
Najčastejšie problémy WordPress webov
Najčastejšie problémy WordPress webovNajčastejšie problémy WordPress webov
Najčastejšie problémy WordPress webov
 
Google Tag Manager a analytika ve WordPress
Google Tag Manager a analytika ve WordPressGoogle Tag Manager a analytika ve WordPress
Google Tag Manager a analytika ve WordPress
 
WordCamp Bratislava 2019 - Cache!
WordCamp Bratislava 2019 - Cache!WordCamp Bratislava 2019 - Cache!
WordCamp Bratislava 2019 - Cache!
 
Wordpress_DOD
Wordpress_DODWordpress_DOD
Wordpress_DOD
 
WordPress šablony a rychlost načítání (WordCamp Praha 2017)
WordPress šablony a  rychlost načítání (WordCamp Praha 2017)WordPress šablony a  rychlost načítání (WordCamp Praha 2017)
WordPress šablony a rychlost načítání (WordCamp Praha 2017)
 
Jak zlepšit zabezpečení čtvrtiny celého webu
Jak zlepšit zabezpečení čtvrtiny celého webuJak zlepšit zabezpečení čtvrtiny celého webu
Jak zlepšit zabezpečení čtvrtiny celého webu
 
Základní pluginy pro WordPress 25-6-2016
Základní pluginy pro WordPress 25-6-2016Základní pluginy pro WordPress 25-6-2016
Základní pluginy pro WordPress 25-6-2016
 
WP Weekend 2018
WP Weekend 2018WP Weekend 2018
WP Weekend 2018
 
Hesla a vícefaktorová autentizace ve WP
Hesla a vícefaktorová autentizace ve WPHesla a vícefaktorová autentizace ve WP
Hesla a vícefaktorová autentizace ve WP
 
Verzování WordPress webů (#wpkonference 11/2014)
Verzování WordPress webů (#wpkonference 11/2014)Verzování WordPress webů (#wpkonference 11/2014)
Verzování WordPress webů (#wpkonference 11/2014)
 
Webmeetup #3
Webmeetup #3Webmeetup #3
Webmeetup #3
 
Jak zrychlit WP pomocí cachovacích pluginů
Jak zrychlit WP pomocí cachovacích pluginůJak zrychlit WP pomocí cachovacích pluginů
Jak zrychlit WP pomocí cachovacích pluginů
 
Principy cachování ve WordPressu
Principy cachování ve WordPressuPrincipy cachování ve WordPressu
Principy cachování ve WordPressu
 
Optimalizace webových aplikací
Optimalizace webových aplikacíOptimalizace webových aplikací
Optimalizace webových aplikací
 

Viewers also liked

Jak si (ne)nechat hacknout Wordpress stránky - How to have unhackable WordPre...
Jak si (ne)nechat hacknout Wordpress stránky - How to have unhackable WordPre...Jak si (ne)nechat hacknout Wordpress stránky - How to have unhackable WordPre...
Jak si (ne)nechat hacknout Wordpress stránky - How to have unhackable WordPre...
Michal Kubicek
 
WordPressセキュリティの 心配事を吹き飛ばせ! WordCamp Kansai 2016
WordPressセキュリティの心配事を吹き飛ばせ! WordCamp Kansai 2016WordPressセキュリティの心配事を吹き飛ばせ! WordCamp Kansai 2016
WordPressセキュリティの 心配事を吹き飛ばせ! WordCamp Kansai 2016
yoshinori matsumoto
 
Nette s XDebug a PHPStorm
Nette s XDebug a PHPStormNette s XDebug a PHPStorm
Nette s XDebug a PHPStorm
blueweb_sk
 
Advanced automatization in Sklik - EN slides (automatizace Skliku)
Advanced automatization in Sklik - EN slides (automatizace Skliku)Advanced automatization in Sklik - EN slides (automatizace Skliku)
Advanced automatization in Sklik - EN slides (automatizace Skliku)
Jakub Kašparů
 
Honza Doleček - Jak používáme NewRelic Posobota 2013-05
Honza Doleček - Jak používáme NewRelic Posobota 2013-05Honza Doleček - Jak používáme NewRelic Posobota 2013-05
Honza Doleček - Jak používáme NewRelic Posobota 2013-05
PeckaDesign.cz
 
PECKADESIGN/MONITORING
PECKADESIGN/MONITORINGPECKADESIGN/MONITORING
PECKADESIGN/MONITORING
PeckaDesign.cz
 
WordCamp Praha 2017 - Tomáš Kocifaj
WordCamp Praha 2017 - Tomáš KocifajWordCamp Praha 2017 - Tomáš Kocifaj
WordCamp Praha 2017 - Tomáš Kocifaj
Brilo Team
 
WordPress performance tuning
WordPress performance tuningWordPress performance tuning
WordPress performance tuning
Vladimír Smitka
 
Přechod na HTTPS
Přechod na HTTPSPřechod na HTTPS
Přechod na HTTPS
Michal Špaček
 
WordPress Security: Defend yourself against digital invaders
WordPress Security:Defend yourself against digital invadersWordPress Security:Defend yourself against digital invaders
WordPress Security: Defend yourself against digital invaders
Vladimír Smitka
 

Viewers also liked (10)

Jak si (ne)nechat hacknout Wordpress stránky - How to have unhackable WordPre...
Jak si (ne)nechat hacknout Wordpress stránky - How to have unhackable WordPre...Jak si (ne)nechat hacknout Wordpress stránky - How to have unhackable WordPre...
Jak si (ne)nechat hacknout Wordpress stránky - How to have unhackable WordPre...
 
WordPressセキュリティの 心配事を吹き飛ばせ! WordCamp Kansai 2016
WordPressセキュリティの心配事を吹き飛ばせ! WordCamp Kansai 2016WordPressセキュリティの心配事を吹き飛ばせ! WordCamp Kansai 2016
WordPressセキュリティの 心配事を吹き飛ばせ! WordCamp Kansai 2016
 
Nette s XDebug a PHPStorm
Nette s XDebug a PHPStormNette s XDebug a PHPStorm
Nette s XDebug a PHPStorm
 
Advanced automatization in Sklik - EN slides (automatizace Skliku)
Advanced automatization in Sklik - EN slides (automatizace Skliku)Advanced automatization in Sklik - EN slides (automatizace Skliku)
Advanced automatization in Sklik - EN slides (automatizace Skliku)
 
Honza Doleček - Jak používáme NewRelic Posobota 2013-05
Honza Doleček - Jak používáme NewRelic Posobota 2013-05Honza Doleček - Jak používáme NewRelic Posobota 2013-05
Honza Doleček - Jak používáme NewRelic Posobota 2013-05
 
PECKADESIGN/MONITORING
PECKADESIGN/MONITORINGPECKADESIGN/MONITORING
PECKADESIGN/MONITORING
 
WordCamp Praha 2017 - Tomáš Kocifaj
WordCamp Praha 2017 - Tomáš KocifajWordCamp Praha 2017 - Tomáš Kocifaj
WordCamp Praha 2017 - Tomáš Kocifaj
 
WordPress performance tuning
WordPress performance tuningWordPress performance tuning
WordPress performance tuning
 
Přechod na HTTPS
Přechod na HTTPSPřechod na HTTPS
Přechod na HTTPS
 
WordPress Security: Defend yourself against digital invaders
WordPress Security:Defend yourself against digital invadersWordPress Security:Defend yourself against digital invaders
WordPress Security: Defend yourself against digital invaders
 

Similar to Výkon WordPress

Generátory statických webů
Generátory statických webůGenerátory statických webů
Generátory statických webů
Michal Doležel
 
Hledání příčin pomalého webu a jak to řešit
Hledání příčin pomalého webu a jak to řešitHledání příčin pomalého webu a jak to řešit
Hledání příčin pomalého webu a jak to řešit
Desingdev
 
Rizika použití WordPressu
Rizika použití WordPressuRizika použití WordPressu
Rizika použití WordPressu
SUPERKODERS
 
Tomáš Poner a Vladislav Musílek, Nejlepší affiliate pluginy pro WordPress
Tomáš Poner a Vladislav Musílek, Nejlepší affiliate pluginy pro WordPressTomáš Poner a Vladislav Musílek, Nejlepší affiliate pluginy pro WordPress
Tomáš Poner a Vladislav Musílek, Nejlepší affiliate pluginy pro WordPress
Colpirio.com s.r.o.
 
Nové »bezhlavé« CMS — přechod od monolitů ke službám
Nové »bezhlavé« CMS — přechod od monolitů ke službámNové »bezhlavé« CMS — přechod od monolitů ke službám
Nové »bezhlavé« CMS — přechod od monolitů ke službám
Jaroslav Vrána
 
Prezentace jak zrychlit načítání webu
Prezentace jak zrychlit načítání webuPrezentace jak zrychlit načítání webu
Prezentace jak zrychlit načítání webu
SUPERKODERS
 
Oxygen Builder - Kyslík pro WordPress
Oxygen Builder - Kyslík pro WordPressOxygen Builder - Kyslík pro WordPress
Oxygen Builder - Kyslík pro WordPress
Aleš Sýkora
 
Webový front-end ve službách mobilního vývojáře
Webový front-end  ve službách mobilního  vývojáře Webový front-end  ve službách mobilního  vývojáře
Webový front-end ve službách mobilního vývojáře Martin Michálek
 
PHP Vysočina - WordPress - 25.10.2018
PHP Vysočina - WordPress - 25.10.2018PHP Vysočina - WordPress - 25.10.2018
PHP Vysočina - WordPress - 25.10.2018
Brilo Team
 
TNPW2-2014-03
TNPW2-2014-03TNPW2-2014-03
TNPW2-2014-03
Lukáš Vacek
 
Michal Konečný - Systém Archivematica z pohledu uživatele
Michal Konečný - Systém Archivematica z pohledu uživateleMichal Konečný - Systém Archivematica z pohledu uživatele
Michal Konečný - Systém Archivematica z pohledu uživatele
LTP-portal-cz
 
HCL Sametime Meetings on Docker - SUTOL Cafe 2/2021
HCL Sametime Meetings on Docker - SUTOL Cafe 2/2021HCL Sametime Meetings on Docker - SUTOL Cafe 2/2021
HCL Sametime Meetings on Docker - SUTOL Cafe 2/2021
Ales Lichtenberg
 
HCL Sametime V11 instalace - tipy
HCL Sametime V11  instalace - tipyHCL Sametime V11  instalace - tipy
HCL Sametime V11 instalace - tipy
Ales Lichtenberg
 
Rich Internet Applications 2009 (Czech)
Rich Internet Applications 2009 (Czech)Rich Internet Applications 2009 (Czech)
Rich Internet Applications 2009 (Czech)Pavel Růžička
 
DEV Čtvrtkon #76 - nopCommerce
DEV Čtvrtkon #76 - nopCommerceDEV Čtvrtkon #76 - nopCommerce
DEV Čtvrtkon #76 - nopCommerce
Ctvrtkoncz
 
TNPW2-2016-03
TNPW2-2016-03TNPW2-2016-03
TNPW2-2016-03
Lukáš Vacek
 
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...
Jaroslav Prodelal
 
Webinář: Unikátní funkce a novinky ve Veeam Backup & Replication verze 7 / 27...
Webinář: Unikátní funkce a novinky ve Veeam Backup & Replication verze 7 / 27...Webinář: Unikátní funkce a novinky ve Veeam Backup & Replication verze 7 / 27...
Webinář: Unikátní funkce a novinky ve Veeam Backup & Replication verze 7 / 27...
Jaroslav Prodelal
 

Similar to Výkon WordPress (20)

Generátory statických webů
Generátory statických webůGenerátory statických webů
Generátory statických webů
 
Hledání příčin pomalého webu a jak to řešit
Hledání příčin pomalého webu a jak to řešitHledání příčin pomalého webu a jak to řešit
Hledání příčin pomalého webu a jak to řešit
 
Rizika použití WordPressu
Rizika použití WordPressuRizika použití WordPressu
Rizika použití WordPressu
 
Tomáš Poner a Vladislav Musílek, Nejlepší affiliate pluginy pro WordPress
Tomáš Poner a Vladislav Musílek, Nejlepší affiliate pluginy pro WordPressTomáš Poner a Vladislav Musílek, Nejlepší affiliate pluginy pro WordPress
Tomáš Poner a Vladislav Musílek, Nejlepší affiliate pluginy pro WordPress
 
Nové »bezhlavé« CMS — přechod od monolitů ke službám
Nové »bezhlavé« CMS — přechod od monolitů ke službámNové »bezhlavé« CMS — přechod od monolitů ke službám
Nové »bezhlavé« CMS — přechod od monolitů ke službám
 
Prezentace jak zrychlit načítání webu
Prezentace jak zrychlit načítání webuPrezentace jak zrychlit načítání webu
Prezentace jak zrychlit načítání webu
 
Oxygen Builder - Kyslík pro WordPress
Oxygen Builder - Kyslík pro WordPressOxygen Builder - Kyslík pro WordPress
Oxygen Builder - Kyslík pro WordPress
 
Webový front-end ve službách mobilního vývojáře
Webový front-end  ve službách mobilního  vývojáře Webový front-end  ve službách mobilního  vývojáře
Webový front-end ve službách mobilního vývojáře
 
PHP Vysočina - WordPress - 25.10.2018
PHP Vysočina - WordPress - 25.10.2018PHP Vysočina - WordPress - 25.10.2018
PHP Vysočina - WordPress - 25.10.2018
 
TNPW2-2014-03
TNPW2-2014-03TNPW2-2014-03
TNPW2-2014-03
 
Michal Konečný - Systém Archivematica z pohledu uživatele
Michal Konečný - Systém Archivematica z pohledu uživateleMichal Konečný - Systém Archivematica z pohledu uživatele
Michal Konečný - Systém Archivematica z pohledu uživatele
 
HCL Sametime Meetings on Docker - SUTOL Cafe 2/2021
HCL Sametime Meetings on Docker - SUTOL Cafe 2/2021HCL Sametime Meetings on Docker - SUTOL Cafe 2/2021
HCL Sametime Meetings on Docker - SUTOL Cafe 2/2021
 
HCL Sametime V11 instalace - tipy
HCL Sametime V11  instalace - tipyHCL Sametime V11  instalace - tipy
HCL Sametime V11 instalace - tipy
 
TNPW2-2013-03
TNPW2-2013-03TNPW2-2013-03
TNPW2-2013-03
 
Rich Internet Applications 2009 (Czech)
Rich Internet Applications 2009 (Czech)Rich Internet Applications 2009 (Czech)
Rich Internet Applications 2009 (Czech)
 
DEV Čtvrtkon #76 - nopCommerce
DEV Čtvrtkon #76 - nopCommerceDEV Čtvrtkon #76 - nopCommerce
DEV Čtvrtkon #76 - nopCommerce
 
Joomla! na MS Windows
Joomla! na MS WindowsJoomla! na MS Windows
Joomla! na MS Windows
 
TNPW2-2016-03
TNPW2-2016-03TNPW2-2016-03
TNPW2-2016-03
 
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...
 
Webinář: Unikátní funkce a novinky ve Veeam Backup & Replication verze 7 / 27...
Webinář: Unikátní funkce a novinky ve Veeam Backup & Replication verze 7 / 27...Webinář: Unikátní funkce a novinky ve Veeam Backup & Replication verze 7 / 27...
Webinář: Unikátní funkce a novinky ve Veeam Backup & Replication verze 7 / 27...
 

More from Vladimír Smitka

Co ukázal globální scan přístupných .git repozitářů?
Co ukázal globální scan přístupných .git repozitářů?Co ukázal globální scan přístupných .git repozitářů?
Co ukázal globální scan přístupných .git repozitářů?
Vladimír Smitka
 
Drobné chyby, které vám mohou zlomit vaz
Drobné chyby, které vám mohou zlomit vazDrobné chyby, které vám mohou zlomit vaz
Drobné chyby, které vám mohou zlomit vaz
Vladimír Smitka
 
Http/2 vs Image Sprites
Http/2 vs Image SpritesHttp/2 vs Image Sprites
Http/2 vs Image Sprites
Vladimír Smitka
 
Ansible
AnsibleAnsible
WordPress security for everyone
WordPress security for everyoneWordPress security for everyone
WordPress security for everyone
Vladimír Smitka
 
České weby a Wordpress (Q4/2014)
České weby a Wordpress (Q4/2014)České weby a Wordpress (Q4/2014)
České weby a Wordpress (Q4/2014)
Vladimír Smitka
 
Wordcamp Praha 2015 - další útržky z prezentace
Wordcamp Praha 2015 - další útržky z prezentaceWordcamp Praha 2015 - další útržky z prezentace
Wordcamp Praha 2015 - další útržky z prezentace
Vladimír Smitka
 
Dijskrův algoritmus
Dijskrův algoritmusDijskrův algoritmus
Dijskrův algoritmus
Vladimír Smitka
 
Sítě pro malé a střední podniky 2014
Sítě pro malé a střední podniky 2014Sítě pro malé a střední podniky 2014
Sítě pro malé a střední podniky 2014
Vladimír Smitka
 

More from Vladimír Smitka (9)

Co ukázal globální scan přístupných .git repozitářů?
Co ukázal globální scan přístupných .git repozitářů?Co ukázal globální scan přístupných .git repozitářů?
Co ukázal globální scan přístupných .git repozitářů?
 
Drobné chyby, které vám mohou zlomit vaz
Drobné chyby, které vám mohou zlomit vazDrobné chyby, které vám mohou zlomit vaz
Drobné chyby, které vám mohou zlomit vaz
 
Http/2 vs Image Sprites
Http/2 vs Image SpritesHttp/2 vs Image Sprites
Http/2 vs Image Sprites
 
Ansible
AnsibleAnsible
Ansible
 
WordPress security for everyone
WordPress security for everyoneWordPress security for everyone
WordPress security for everyone
 
České weby a Wordpress (Q4/2014)
České weby a Wordpress (Q4/2014)České weby a Wordpress (Q4/2014)
České weby a Wordpress (Q4/2014)
 
Wordcamp Praha 2015 - další útržky z prezentace
Wordcamp Praha 2015 - další útržky z prezentaceWordcamp Praha 2015 - další útržky z prezentace
Wordcamp Praha 2015 - další útržky z prezentace
 
Dijskrův algoritmus
Dijskrův algoritmusDijskrův algoritmus
Dijskrův algoritmus
 
Sítě pro malé a střední podniky 2014
Sítě pro malé a střední podniky 2014Sítě pro malé a střední podniky 2014
Sítě pro malé a střední podniky 2014
 

Výkon WordPress

  • 1. http://lynt.cz WordPress + výkon Vláďa Smitka vladimir.smitka@lynt.cz @smitka Lynt services s.r.o. 4. 10. 2015 1
  • 2. http://lynt.cz Skrytá reklama • Před pár dny jsme spustili nový blog, kde probíráme možnosti automatizace PPC http://ppc-scripts.eu 4. 10. 2015 2
  • 3. http://lynt.cz Jak zrychlit WP? 4. 10. 2015 3 Nechte to na někom jiném!
  • 5. http://lynt.cz Přednáška č. 2 – jak na to jít sami • Funkce zmíněných služeb: – Cache zpracované stránky – Optimalizace zdrojů – kombinace JS a CSS, optimalizace obrázků 4. 10. 2015 5 http://lynt.cz/blog/wordpress-v- cz-velky-pruzkum
  • 6. http://lynt.cz Optimalizace obrázků • Správné rozměry • Zkontrolujte, zda jsou miniatury opravdu miniaturní • Správné formáty • „webová grafika“ – 8 bit PNG, SVG • Fotografie – JPG (kvalita 75 je často OK, v Photoshopu 60) • Video – MP4, FLV, GIF! 4. 10. 2015 6
  • 7. http://lynt.cz Optimalizace obrázků – 24 bit PNG • Nejčastěji se používá kvůli alfa kanálu • Často je použit zbytečně – alfa kanál podporují i 8 bit PNG, které jsou mnohem menší, jen Photoshop je donedávna neuměl vytvořit • https://tinypng.com/ • TruePNG - http://css-ig.net/articles/truepng • AdvDef -http://advancemame.sourceforge.net/comp- download.html 4. 10. 2015 7
  • 8. http://lynt.cz Optimalizace obrázků - pluginy • https://wordpress.org/plugins/ewww-image- optimizer/ + https://ewww.io • https://wordpress.org/plugins/shortpixel- image-optimiser/ - 100 obrázků/měsíc zdarma • https://wordpress.org/plugins/kraken-image- optimizer/ - je potřeba placený plán 4. 10. 2015 8
  • 9. http://lynt.cz CSS sprites a data URI • Jaký je problém? • Hlavičky HTTP komunikace mají velikost průměrně 0,5 – 1KB (u malých obrázků zaberou hlavičky více než užitečná data) • Samotné připojení k serveru také nějaký čas trvá • Cílem je tedy snížit počet požadavků: A) u většího počtu obrázků lze použít jejich kombinaci do jednoho (http://draeton.github.io/stitches/) B) jednotlivé malé obrázky lze načít pomocí data URI: <img src="data:image/png;base64,…data v base64…"> 4. 10. 2015 9
  • 10. http://lynt.cz Optimalizace JS a CSS • Cíl – snížení počtu dotazů na server, snížení velikosti • Spojení více CSS a JS souborů do jednoho + jejich komprimace • https://wordpress.org/plugins/autoptimize/ • https://wordpress.org/plugins/bwp-minify/ 4. 10. 2015 10
  • 12. http://lynt.cz Stránková cache • Uloží zpracovanou stránku a později ji vrací jako statický soubor • https://wordpress.org/plugins/wp-super- cache/ • https://wordpress.org/plugins/w3-total- cache/ 4. 10. 2015 12
  • 14. http://lynt.cz4. 10. 2015 14 Děkuji za pozornost!
  • 15. http://lynt.cz Přednáška č. 3 – ta opravdová 4. 10. 2015 15 Hledání problému: https://gtmetrix.com/ Aplikace Zdroje
  • 17. http://lynt.cz Načítání zdrojů podrobněji • http://www.webpagetest.org/ 4. 10. 2015 17
  • 18. http://lynt.cz Načítání zdrojů – hlavní problémy • Expires hlavičky (mod_expires) – zaručí, že nebude nutné zdroje stahovat znovu (jinak se využije heuristika prohlížeče) • GZIP komprese (mod_deflate) – běžně 30-70% úspora u textových souborů • Keep Alive – udržuje spojení, není je třeba znovu navazovat, stojí trochu RAM 4. 10. 2015 18
  • 19. http://lynt.cz Keep Alive 4. 10. 2015 19 30ms Vypnuté udržování spojení může být u webů s velkým počtem zdrojů kritické na mobilních zařízeních – velká latence Ping 300ms, 150 zdrojů, paralelismus 5: 2x300x150/5 = 18s čekání na spojení + ukončování Proč tolik přesměrování?
  • 20. http://lynt.cz HTTPS & SPDY & HTTP/2 4. 10. 2015 20 HTTP/2 • šifrování, • komprese, • keep alive, • binární protokol Není nutné řešit slučování CSS, JS, ani sprites. Jejich použití zde může i drobně zpomalovat – jsou najednou stahována i data, která nejsou aktuálně potřeba.
  • 21. http://lynt.cz TTFB – co zpomaluje • MySQL dotazy • Nepoužívání cache • HTTP požadavky (např. testy aktualizací) • Čím více pluginů, tím více dotazů 4. 10. 2015 21
  • 22. http://lynt.cz Vliv pluginů • Test na VPS od WEDOS (1 jádro, 4G RAM) ab -n 1000 -c 4 http://domena • Čistý WP: Requests per second: 15.93 [#/sec] Time per request: 251.095 [ms] • WP + SliderRevolution + CF7 + Yoast SEO Requests per second: 4.61 [#/sec] Time per request: 868.450 [ms] • WP + SliderRevolution + CF7 + Yoast SEO + WPML + Jetpack Requests per second: 2.94 [#/sec] Time per request: 1360.454 [ms] 4. 10. 2015 22 Výborně, během několika minut se nám podařilo více než 5x snížit výkon!
  • 23. http://lynt.cz Motivace: náš server • WP + několik běžných pluginů Requests per second: 319.26 [#/sec] Time per request: 12.529 [ms] Ping 2,5 ms 4. 10. 2015 23 35 ms Samozřejmě jsou použité podlé triky s cache, více o tom později
  • 24. http://lynt.cz P3 Profiler • https://wordpress.org/plugins/p3-profiler/ • Nejjednodušší, nejméně informací, nejméně přesné • Může říci, jaký plugin dělá největší problémy 4. 10. 2015 24
  • 25. http://lynt.cz Query monitor • https://wordpress.org/plugins/query- monitor/ • Podrobný přehled, co WP dělá • Skvělý i při vývoji (ukazuje např. aktivní podmínky) 4. 10. 2015 25
  • 26. http://lynt.cz Query Monitor – DB dotazy 4. 10. 2015 26 Seznam všech dotazů Dotazy dle funkce Dotazy dle komponenty
  • 27. http://lynt.cz Query Monitor – další informace 4. 10. 2015 27 HTTP požadavky založené na wp_remote_X curl, file_get_contents atd. neodhalí [ty lze odchytnout například analýzou provozu (tcpdump, wireshark)] Chybí ale třeba SAVEQUERIES – další IO Zapisuje do souboru: IO operace Bude používat neminifikované knihovny: více dat HTTP požadavky
  • 28. http://lynt.cz Pohled z druhé strany • Zatím jsme zkoumali web z pohledu aplikace • Přišel čas podívat se na to, kde aplikace běží 4. 10. 2015 28
  • 29. http://lynt.cz Infrastruktura 4. 10. 2015 29 3 komponenty – HTTP server, DB server a Zdroje dat Každá má úplně jiné nároky… DB Storage WEBLOADBALANCER Cloud × 2
  • 30. http://lynt.cz Monitoring – hledáme úzké hrdlo 4. 10. 2015 30 htop Munin http://munin-monitoring.org/ http://www.zabbix.com/ http://www.librenms.org/ htop iotop iftop nmon
  • 31. http://lynt.cz Verze PHP • OpCode cache • Object cache 4. 10. 2015 31 Novější verze PHP zrychlují a hlavně umí lépe využít OpCache (což také stojí více RAM)
  • 32. http://lynt.cz OpCode cache • Při každém volání je skript přeložen z jazyka PHP do Bytecode, aby mohl být vykonán • OpCache výsledek uloží a není třeba opakované kompilace • Nutno doinstalovat (PHP < 5.5) • APC • Xcache • Zend OpCache (přibaleno od PHP 5.5) 4. 10. 2015 32
  • 33. http://lynt.cz Object Cache • Často součást modulu s OpCache, někdy samostatná • Uživatel si může sám ukládat data pro pozdější použití • Je potřeba povolit a alokovat velikost • Do WP je třeba nahrát drop-in object backend – APC – Xcache – APCu (pro Zend OpCache) – Redis – Memcached • WP do ní bude ukládat mnoho dat, která jinak ukládá jako tranzientní proměnné do databáze – rapidně klesne počet DB dotazů 4. 10. 2015 33 71 z nich patří Slider Revolution
  • 34. http://lynt.cz Zjištění z Query Monitoru • Pravděpodobně zjistíte, že se necachuje menu a některé widgety • http://afterburner.voceplatforms.com/back- end.html#voce-widget-cache • http://afterburner.voceplatforms.com/back- end.html#voce-cached-nav • Doporučuji projít i další nástroje a tipy z tohoto webu 4. 10. 2015 34
  • 35. http://lynt.cz HTTP server • Je několik možností, jak PHP provozovat • Apache (prefork) + mod_php • Apache (mpm event/worker) + PHP-FPM, FastCGI • Nginx + PHP-FPM 4. 10. 2015 35 Apache Apache - .htaccess Nginx req/s 8.2 9.35 9.96 0 2 4 6 8 10 12 req/s Apache vs Nginx Apache Apache - .htaccess Nginx Nginx + Microcache req/s 8.2 9.35 9.96 279.97 0 50 100 150 200 250 300 req/s Apache vs Nginx + Microcache (nefér srovnání) AllowOverride None
  • 36. http://lynt.cz /wp-content/uploads/revslider/classicslider/bike.jpg 4. 10. 2015 36 Heleď, nemáš tu .htaccess? A co tady?A tady? A nebo tady? A tady už určitě bude! Apache se příliš nehodí pro statické soubory
  • 37. http://lynt.cz Zpět k našemu serveru • Dříve zmíněný skvělý výsledek byl právě díky microcache – Nginx si zapamatuje výsledek dotazu na několik vteřin/minut a ten vrátí • Tato technika se hodí v případech, že očekáváme zvýšenou špičkovou návštěvnost – např. po publikaci nového obsahu • Microcache: Requests per second: 319.26 [#/sec] • WP Supercache: Requests per second: 270.84 [#/sec] • Bez cachování *: Requests per second: 13.52 [#/sec] * je třeba vzít v úvahu, že byl test prováděn v plném provozu se stovkami jiných požadavků 4. 10. 2015 37
  • 38. http://lynt.cz Poslední test • Test na WEDOS VPS s velkou konkurenčností ab -n 1000 -c 40 http://domena • Requests per second: 1191.49 [#/sec] (mean) • Time per request: 33.572 [ms] (mean) • Time per request: 0.839 [ms] (mean, across all concurrent requests) Poznámka na konec: „Použití cache s sebou vždy nese problém její invalidace!“ 4. 10. 2015 38
  • 40. http://lynt.cz Blackfire.io • Profilace výkonu a skvělá vizualizace • Je třeba na server nainstalovat agenta a rozšíření do PHP - návod • Profilaci lze spouštět z Chrome pomocí Blackfire Companion • Hack verze zdarma • Premium verze 82,5€/měsíc (navíc analyzuje DB dotazy, HTTP požadavky, lze pracovat v týmu, delší dobu si pamatuje data) 4. 10. 2015 40
  • 42. http://lynt.cz Přes 30% na načítání lokalizace? • WP využívá Gettext PHP implementaci, která není příliš rychlá • Řešení: • https://github.com/LyntServices/WP-lang- cache (staré, vyžaduje zásah do jádra, modifikace pro ObjectCache) • https://wordpress.org/plugins/mo-cache/ 4. 10. 2015 42
  • 44. http://lynt.cz Proč je do_action pomalé? 4. 10. 2015 44 Od PHP5.6 lze použít optimalizovanou funkcionalitu Argument Unpacking: …$the_['acceped_args'] Samotná funkce call_user_func_array nepředstavuje extrémní problém, problém je, že se volá velmi často, v některých případech se jedná i o tisíce volání.
  • 46. http://lynt.cz Další ukázka – i s opravou! 4. 10. 2015 46
  • 47. http://lynt.cz Další ukázka – i s opravou! 4. 10. 2015 47 Oprava: extension=json.so chyběl nativní modul pro práci s JSON 9.2s => 0.0248s = 370x zvýšení výkonu 
  • 48. http://lynt.cz Konec profilování • Při profilování WP v Blackfire většinou skončíte na 2 případech: 1) do_action – obecná WP akce (podobně jako apply_filters), v Blackfire nelze přesně vysledovat příčiny a důsledky konkrétního volání 2) šedý proužek – výkon spotřebovaný samotnou funkcí, není vidět kód • V tento moment přichází debugování 4. 10. 2015 48
  • 49. http://lynt.cz Xdebug • Rozšíření do PHP: http://xdebug.org/ • Pomocník, který poradí, co stáhnout a jak nakonfigurovat podle výstupu z phpinfo(): http://xdebug.org/wizard.php • Vysvětlení konfiguračních voleb: https://gist.github.com/IngmarBoddington/53 11858 4. 10. 2015 49 xdebug.remote_enable = 1 xdebug.profiler_enable_trigger = 1 xdebug.trace_format = 1 xdebug.trace_enable_trigger = 1
  • 50. http://lynt.cz Xdebug – co to umí? • Umožňuje krokovat kód z vývojového prostředí • Generuje Trace-log • Analyzuje pokrytí kódu • Umí také profilovat (data jsou více zkreslená vlastní režií) xdebug.profiler_enable_trigger = 1 ?XDEBUG_PROFILE • Pro vizualizaci lze použít například WebGrind: https://github.com/jokkedk/webgrind • Xdebug Helper do Chrome: https://chrome.google.com/webstore/detail/xdebug- helper/eadndfjplgieldjbigjakmdgkmoaaaoc 4. 10. 2015 50
  • 52. http://lynt.cz Trace • Tracelog – ohromné množství dat • Hodí se na řešení problémů s RAM • https://github.com/corretge/xdebug-trace-gui 4. 10. 2015 52 řádek strávený čas změna využití paměti Stav využití paměti v průběhu vykonávání skriptu
  • 53. http://lynt.cz Trace části kódu 4. 10. 2015 53 xdebug_start_trace('for.xt'); for ($i=0;$i<3;$i++){ echo rand(0,$i); } xdebug_stop_trace(); TRACE START [2015-10-01 11:49:49] 2 2 1 0.005554 223088 2 3 0 0.005621 223128 rand 0 D:htdocswp4info.php 7 2 3 1 0.005740 223128 2 4 0 0.005770 223128 rand 0 D:htdocswp4info.php 7 2 4 1 0.005879 223128 2 5 0 0.005908 223128 rand 0 D:htdocswp4info.php 7 2 5 1 0.006016 223128 2 6 0 0.006044 223096 xdebug_stop_trace 0 D:htdocswp4info.php 9 0.006130 223120 TRACE END [2015-10-01 11:49:49]
  • 54. http://lynt.cz Krokování programu 4. 10. 2015 54 Default: localhost:9000
  • 55. http://lynt.cz Myšlenka otce Fura 4. 10. 2015 55 „Končí zlatá éra webových vývojářů, začíná éra systémových administrátorů.“
  • 56. http://lynt.cz Souhrn - analýza výkonu • Jak se web jeví navenek? – https://gtmetrix.com/ – http://www.webpagetest.org/ – nástroje v prohlížeči • Co zdržuje WordPress? – P3 profiler – orientační detekce pomalých pluginů – Query monitor – konkrétní DB dotazy a další • Profilace a ladění – Blackfire.io – Xdebug (vizualizace webgrind) 4. 10. 2015 56
  • 57. http://lynt.cz A to je vše, přátelé. 4. 10. 2015 57 Malý dárek: Blackfire.io Premium na měsíc zdarma: DODWEDOS102015 platí do 19.10.2015 kód se zadává při nákupu měsíční verze Můžete mne samozřejmě sledovat na twitteru @smitka a navštívit náš blog http://lynt.cz/blog

Editor's Notes

  1. Co způsobuje pomalost?
  2. Proč se používají 24 bit PNG?
  3. Pozor na koncová lomítka, proveďte jejich přesměrování na straně serveru, ne na straně CMS