Rychlost Nette frameworku
- mistercz
- Člen | 8
Zdravím,
chtel bych se zeptat jak to je s rychlosti Nette? Premyslel jsem o jeho
vyuziti na vlastnich projektech a tak jsem si udelal male mereni, ktere me
prekvapilo.
Vzal jsem Nette Framework 2.1.1 a nakopiroval jsem jeho sandbox adresar na
nas produkcni server. Kod jsem
zmenil pouze tak, ze jsem na urcita mista pridal zjisteni aktualniho casu pomoci
funkce microtime.
Zjistil jsem ze skript probehne v nasledujicich casech od spusteni index.php
Prvni spusteni:
143 ms – Navrat z volani $container->getService(‚application‘);
155 ms – Volani renderDefault prezenteru
366 ms – Vstup do latte sablony
483 ms – Ukonceni skriptu
Nasledne spusteni po vytvoreni cache:
30 ms – Navrat z volani $container->getService(‚application‘);
49 ms – Volani renderDefault prezenteru
51 ms – Vstup do latte sablony
55 ms – Ukonceni skriptu
55 ms na prazdnou stranku me prijde pomerne hodne. U vlastniho projektu, jenz generuje pomerne slozite stranky ale zadny framework nepouziva, se dostavam na prumerne hodnoty kolem 12 ms na stranku.
Jsou prosím moje zjištění cca správné nebo jsem neco zasadniho minul a jde Nette přepnout do nějakého turbo módu? Jelikoz mam server pomerne pretizeny, tak me zajima zda bych po prechodu na Nette potreboval tech serveru minimalne 5 ?
Při pohledu na to co Nette framework dělá se dá těch 55 ms pochopit, ale než zkonstatuju že jej pro můj projekt použít nemůžu, tak jsem si řekl že se projistotu optám.
Díky moc,
M.Topolar
Editoval mistercz (4. 3. 2014 13:41)
- Majkl578
- Moderator | 1364
Nette není mikroframework, ale ani moloch jako Zend. DI a Application mají nějakou nutnou režii, které se těžko zbavíš. Benchmarky prázdného sandboxu jsou nesmyslné, je logické, že bude pomalejší než nějaký jednostránkový bastl v PHP. Důležitý je výsledek, tj, výsledná aplikace a přidaná hodnota při vývoji.
55 ms na prazdnou stranku me prijde pomerne hodne.
V tom případě tě poněkud lituji, na localhostu mi sandbox při 2+
spuštění nabíhá 8ms (PHP 5.5.9, Zend OPcache).
Možná by ses měl prvně zaměřit na vylepšení konfigurace svého serveru.
:) Začal bych pořízením OPcache.
Ještě dám reálný příklad ze života – na nyní spouštěném projektu, psaném v Nette 2.1 + Doctrine 2.4, s použitím dalších knihoven jako Kdyby/Events nebo Guzzle HTTP frameworku. Na serveru s Apache 2.2 a PHP 5.4 se s použitím striktně nastavené OPcache (při nakešování souboru na disk nekouká) dostane load aplikace na nějakých 170ms na stránce s ~6 dotazy a na 220ms na stránce s ~16 dotazy včetně transakce a insertů.
- mistercz
- Člen | 8
V tom případě tě poněkud lituji, na localhostu mi sandbox při 2+ spuštění nabíhá 8ms (PHP 5.5.9, Zend OPcache).
Diky za reakci. No ono porovnavat localhost se serverem v zatezi moc dobre
nejde, ale urcite se najdou vykonnejsi servery… Aby se do testu nemotala
vykonnost HW tak jsem to nahral na produkcni server a
vsechny namerene hodnoty jsou na stejnem HW.
- mistercz
- Člen | 8
Majkl578 napsal(a):
Samozřejmě že nejde, spíš šlo o demonstraci jak rychle to může jet. :) Většinu času na produkci ti totiž budou beztak tvořit časy na parsování PHP scriptů, proto je vhodné mít na serveru opcode cache, Zend OPcache je momentálně nejkvalitnější.
8ms je proti tem naměřeným časům z říše snů. Díky za tip na Zend OPcache se určitě podívám jaký to bude mít dopad na rychlost.
- mistercz
- Člen | 8
Majkl578 napsal(a):
je vhodné mít na serveru opcode cache, Zend OPcache je momentálně nejkvalitnější.
Cosik ta cache do sebe ma :-) z 55ms je 23ms coz je urcite lepsi…
11 ms – Navrat z volani
$container->getService(‚application‘);
20 ms – Volani renderDefault prezenteru
21 ms – Vstup do latte sablony
23 ms – Ukonceni skriptu
Editoval mistercz (4. 3. 2014 14:31)
- Majkl578
- Moderator | 1364
Na produkci ji máme nastavenou takhle:
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=128
opcache.interned_strings_buffer=12
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0
;opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.save_comments=1
opcache.load_comments=1
opcache.verbosity_level=2
Aktuální stav:
Opcode Caching Up and Running
Optimization Enabled
Startup OK
Shared memory model mmap
Cache hits 12322128
Cache misses 41865
Used memory 54760208
Free memory 79457520
Wasted memory 0
Cached scripts 1444
Cached keys 1448
Max keys 7963
Tohle nastavení je ale hodně striktní – pokud změníš PHP soubor,
změna se neprojeví, dokud cache ručně neinvaliduješ (restart PHP /
voláním opcache_reset()
/ voláním
opcache_invalidate(file)
). Na druhou stranu přináší nejvyšší
výkon, jelikož se nezabývá diskovými operacemi.
- mistercz
- Člen | 8
Diky moc postelovanim te cache podle tveho navodu jsem se dostal na 12 ms. Da se rict ze neuveritelne. :-)
5 ms – Navrat z volani $container->getService(‚application‘);
9 ms – Volani renderDefault prezenteru
10 ms – Vstup do latte sablony
12 ms – Ukonceni skriptu
Editoval mistercz (4. 3. 2014 17:04)