ORM test PHP frameworků – PHP, závěr

Poslední díl celého seriálu zaměřeného na testování rychlosti PHP frameworků při komunikaci s databází. V této části jsou obsaženy výsledky projektu vytvořeného pomocí čistého PHP. A na závěr hromadné shrnutí všech naměřených výsledků.
Seriál: ORM test PHP frameworků (9 dílů)
- Spouštíme letní ORM test PHP frameworků 3. 7. 2013
- ORM test PHP frameworků – CakePHP, CodeIgniter 10. 7. 2013
- ORM test PHP frameworků – DooPHP, Jelix 17. 7. 2013
- ORM test PHP frameworků – Kohana, Laravel 26. 7. 2013
- ORM test PHP frameworků – Nette, Prado 31. 7. 2013
- ORM test PHP frameworků – Qcodo, Recess 7. 8. 2013
- ORM test PHP frameworků – Seagull, Symfony 14. 8. 2013
- ORM test PHP frameworků – Yii, Zend Framework 21. 8. 2013
- ORM test PHP frameworků – PHP, závěr 28. 8. 2013
Nálepky:
PHP
PHP je programovací skriptovací jazyk určený zejména pro tvorbu dynamických webových stránek. Ve své kompilované podobě jej lze i využít pro tvorbu desktopových aplikací. Využívá objektově orientované programování, což umožňuje návrh složitějších struktur celé aplikace. Velice užitečné je i dynamické typování jednotlivých proměnných a jejich automatická deklarace.
Vlastnosti:
- využívá dynamické typování
- pole jsou asociativní
- používá proměnné s různou viditelností pro ostatní kód
- umožňuje objektově orientované programování
Výsledky testů:
- Test výběr (SELECT)
Test | Požadavků | Průměr [ms] | Medián [ms] | Min [ms] | Max [ms] | Prům. rychlost [KB/s] | Odchylka [ms] |
1. Měření | 3000 | 32 | 32 | 6 | 126 | 2522,9 | 15 |
2. Měření | 3000 | 37 | 35 | 6 | 147 | 2571,2 | 18 |
3. Měření | 3000 | 34 | 33 | 6 | 178 | 2436,6 | 17 |
Průměr | 3000 | 34,3 | 33,3 | 6,0 | 150,3 | 2510,2 | 16,7 |
- Test vložení (INSERT)
Test | Požadavků | Průměr [ms] | Medián [ms] | Min [ms] | Max [ms] | Prům. rychlost [KB/s] | Odchylka [ms] |
1. Měření | 3000 | 83 | 80 | 39 | 506 | 47,5 | 39 |
2. Měření | 3000 | 85 | 81 | 39 | 424 | 50,3 | 32 |
3. Měření | 3000 | 104 | 89 | 40 | 489 | 41,6 | 61 |
Průměr | 3000 | 90,7 | 83,3 | 39,3 | 473,0 | 46,5 | 44,0 |
- Test úprava (UPDATE)
Test | Požadavků | Průměr [ms] | Medián [ms] | Min [ms] | Max [ms] | Prům. rychlost [KB/s] | Odchylka [ms] |
1. Měření | 3000 | 84 | 80 | 40 | 393 | 44,6 | 35 |
2. Měření | 3000 | 87 | 81 | 45 | 323 | 49,5 | 30 |
3. Měření | 3000 | 84 | 80 | 41 | 473 | 42,5 | 39 |
Průměr | 3000 | 85,0 | 80,3 | 42,0 | 396,3 | 45,5 | 34,7 |
- Test smazání (DELETE)
Test | Požadavků | Průměr [ms] | Medián [ms] | Min [ms] | Max [ms] | Prům. rychlost [KB/s] | Odchylka [ms] |
1. Měření | 3000 | 86 | 79 | 41 | 557 | 43,4 | 54 |
2. Měření | 3000 | 90 | 82 | 41 | 501 | 49,1 | 39 |
3. Měření | 3000 | 109 | 90 | 52 | 453 | 41,8 | 50 |
Průměr | 3000 | 95,0 | 83,7 | 44,7 | 503,7 | 44,8 | 47,7 |
- Test vše zároveň (ALL)
Test | Požadavků | Průměr [ms] | Medián [ms] | Min [ms] | Max [ms] | Prům. rychlost [KB/s] | Odchylka [ms] |
1. Měření | 12000 | 73 | 75 | 5 | 422 | 940,8 | 41 |
2. Měření | 12000 | 77 | 79 | 5 | 576 | 1058,4 | 47 |
3. Měření | 12000 | 75 | 78 | 6 | 387 | 779 | 41 |
Průměr | 12000 | 75,0 | 77,3 | 5,3 | 461,7 | 926,1 | 43,0 |
Grafické znázornění:
Celkové výsledky
Jak bylo zmíněno v úvodu a znázorněno v ukázkách předchozích testů, byly měřeny různé hodnoty, ze kterých jsou asi nejdůležitější právě graficky znázorněná průměrná rychlost odezvy a průměrná rychlost přenosu dat. Právě tyto dvě hodnoty poukazují na rychlost celkového frameworku v projektech, které se snažily simulovat chování jednoduché aplikace při zátěži podobné reálnému provozu.
V následujících grafech lze vidět názorné shrnutí výsledků všech 15 otestovaných aplikací v závislosti na výsledných hodnotách průměrné odezvy (červené sloupce) a průměrné rychlosti (zelené sloupce). V grafech jsou použity výsledky získané ze všech tří měření přepočítané do jejich průměrné hodnoty.
1. Test výběr (SELECT)
2. Test vložení (INSERT)
3. Test úprava (UPDATE)
4. Test smazání (DELETE)
5. Test vše zároveň (ALL)
Vyhodnocení výsledků
Z takto naměřených údajů lze vyčíst, že nejrychlejší projekt je napsaný pomocí čistého PHP. Tento výsledek byl předvídatelný, protože tato aplikace neobsahuje žádné dodatečné funkce nebo složitější strukturu, které by omezovaly její výkon.
Nejlepších výsledků dosahuje framework DooPHP. Jeho velmi rychlé zpracování požadavků je způsobeno úsporným navržením základního jádra, které je možné rozšiřovat o další funkcionalitu. Při zasílání jednoduchých příkazů pro databázi využívá pouze základní funkce a jednoduchý model, což má pozitivní vliv na celkovou rychlost. Podobnou strukturu používají frameworky Jelix nebo CodeIgniter.
Framework Kohana dosahuje také velmi dobrých výsledků, ale je stále pomalejší než CodeIgniter, od kterého je odvozena. To může být způsobeno přidáním většího množství kontrolních funkcí k základní struktuře nebo využíváním rozdílných databázových knihoven.
Nejdelší odezvy byly naměřeny u projektů vytvořených frameworky Prado a Symfony. Oba tyto projekty jsou zaměřeny spíše na rychlý vývoj robustní aplikace s velice rozsáhlou funkcionalitou. Z tohoto důvodu musejí být i pro jednoduchou webovou stránku importovány rozsáhlé knihovny funkcí, které jsou sice užitečné, ale snižují celkovou rychlost aplikace.
Na základě těchto výsledků nelze určit, který framework je nejrychlejší nebo nejlepší. Celý tento test slouží spíše k orientačnímu přehledu a srovnání v určitých podmínkách. Také nechci tvrdit, že tento test je naprosto přesný, protože jak bylo psáno v úvodu, tak jsem se se všemi jednotlivými projekty učil od naprostých začátků a je samozřejmě nemožné se s nimi za takovou krátkou dobu a s takovým počtem naučit dokonale.
Také by někdo mohl namítat, že nebyly otestovány všechny verze, nebo byly zahrnuty starší verze, než jsou k dispozici nyní. Nicméně toto srovnávání trvalo nějaký čas a za tu dobu byly samozřejmě vydány i nová rozšíření nebo celé nové verze některých frameworků.
Samozřejmě výběr frameworku závisí na zkušenostech nebo vkusu programátora.
Závěr
Tento test nevznikl jen z důvodu nedostatku takovýchto porovnání, ale také z důvodu, že já sám jsem si chtěl vybrat nějaký framework pro svůj budoucí projekt. Osobně bych volil framework Jelix, a to nejen kvůli jeho výsledkům, ale také proto, že se mi s ním pracovalo asi nejlépe.
Doufám, že tento srovnávací test pomůže alespoň pár ostatním programátorům webových aplikací, nebo usnadní výběr při rozhodování pro nováčky v oblasti PHP frameworků.
Jsou někde k dostání zdrojáky benchmarku, které všecko spustí a vygenerují mi ty grafy znovu a znovu? Chci mít možnost si to porovnat s vlastním frameworkem a hledat optimalizace, které různé frameworky mají.
Zdrojové kódy nebyly ke článku zveřejněny, protože disk s celým serverem a všemi kódy je poškozen. V současné době je v opravně a až se vrátí, tak se pokusím veškerá data uveřejnit.
A proč nesáhneš po záložní kopii a nenahraješ to sem z ní?
Skutečně mě fascinuje zoufalost redakce, že má odvahu zveřejnit takový blábol. Poslední díl jen podtrhuje celý seriál.
Dokonce nechybí ani perlička na závěr a vítězem testu frameworků se stalo čisté PHP, bravo :D
Ovšem ty zdůvodnění a závěry, proč ten který fw dopadl jak dopadl…. to je opravdu vrchol. Nic tak odfláknutého a amatérského jsem dlouho neviděl.
Znovu žádám redakci, aby před článek přidala výrazné upozornění, že se jedná pouze o seznam náhodně seřazených php frameworků a hlavně začátečníci by ho v žádném případě neměli číst, neboť hrozí výrazné uvedení v omyl.
To je pravda .. mnohem užitečnější by bylo, kdyby autor porovnával, jak se mu s každým frameworkem pracovalo, jak rychle se s ní dokázal základy naučit, co bylo pro a proti – a vést porovnávání tímto směrem.
Porovnávání rychlostí frameworku nemá žádný význam – jak je psáno v závěru „Tento test nevznikl jen z důvodu nedostatku takovýchto porovnání“ – důvod proč jich je nedostatek je ten, že se to nedá takto srovnávat a zvláště opera s databází – to se netestuje rychlost frameworku, ale pouze některé z jejích komponent pro práci s databázi a to i dost frameworků jich má několik.
A vybírat ještě framework podle tohoto testu? Víceméně všechny dopadli výkonostně stejně – ty rozdíly nikoho nezajímají – mnohem důležitější je:
– komunita kolem frameworku
– má nástroje, které k danému projektu potřebuju
– jsou pro něj doplňky, které mi ušetří práci
– budu pracovat s kolegy, který již nějaké FW umí
– … atd..
A už jen poslední věc – rychlost PHP vs. databáze, alespoň tady mohla být uvedena zda se jednalo o testování PDO, nebo nativní funkční mysql_* …
Na Rootu mají pro pobavení komix, na Zdrojáku test PHP frameworků.
jedna se o ZF1 nebo ZF2 ? dik
ZF 2, přesněji Zend Framework 2.1.4
Nechci tady nadávat na autora, chápu jeho motivaci dodat srovnání, které chybí. Pokud se to bere ve správném kontextu a nedělá se z toho hledání nej frameworku, tak to tady má své místo. V článku to je napsáno, ale někteří by to nepochpili ani kdyby to bylo v pruhovaném rámečku s velkým nápisem POZOR.
Ohledně rychlosti, neměla by se přeceňovat. V dnešní době je výpočetní výkon stále levnější a lidé dražší. A nepředpokládá se, zle by se to někdy mělo obrátit. U drtivé většiny projektů je tedy mnohem výhodnější to napsat rychle než výkonně. Je opravdu jen velmi málo projektů, kde by přímo výkon frameworku hrál zásadní roli.
Já například používám Drupal, protože se v něm vyvíjí velmi rychle a při využití všech možností cachování ani moc nežere. Co z toho, že při vypnuté cache potřebuje na jeden pageview nad 100 dotazů na databázi?
Vy budete taky mistr sveho remesla.. Samozrejme, ze zalezi na rychlosti (ano, pracuju na velkem projektu, ne nepouzivame PHP), v momente, kdy vasi aplikaci zacne pouzivat vice lidi vsadte se, ze vykon budete resit, pokud to neni staticka stranka.
Problem tohoto skvostneho serialu neni ani tak v tematu, ale ve zpracovani, v tom, ze se meri ORM a v testech ani napsano, co za ORM je pouzito, to ze testovani je totalne nesmyslne, nikdo nepotrebuje jednoduchy select a neukaze se tak optimalizacni sila ORM a dalsich tisic veci…
BTW: Drupal neni framework ale CMS…
drupal uz delsi dobu lze povazovat spis za framework a s prichodem osmicky to bude 100% pravda (symfony2 naspodku).
Fajn, delas na velikananskem projektu kde nemuzes vyuzit cachovani. Kolik takovych za rok delas?
Navic zrovna takovy test za jak dlouho projde SQL prikaz nevypovida VUBEC NIC.
Je čas opět připomenout, jak se to případně MÁ dělat:
http://www.techempower.com/benchmarks/#section=intro&hw=i7&test=db
Přesně tak, bylo by mnohem smysluplnější udělat pull requesty pro chybějící frameworky do tohoto projektu. Navíc údajně nejrychlejší framework Phalcon zde na Zdrojáku chybí.
http://www.techempower.com/benchmarks/#section=data-r6&hw=i7&test=json&l=sg
ty zavery mne taky bavi:
– „Na základě těchto výsledků nelze určit, který framework je nejrychlejší nebo nejlepší.“ – Tak proc tolik energie a prace?
– „… k srovnání v určitých podmínkách …“ – Spis neurcite.
Ten zaver sice hodne vysvetluje (polehcujici okolnost), ale asi spis bych to zaradil jako osobni blog s nazvem ‚Jak jsem si vybral framewirk‘, nez seriozne tvarici se clanek.
Myslim, ze v tom pripade tech ostrych a negativnich reakci hodne ubylo. A naopak, mozna by padlo vic navrhu, poznamek, poznatku …
Ale jinak fajn lehke ctivo na leto :)