Přejít k navigační liště

Zdroják » PHP » ORM test PHP frameworků – CakePHP, CodeIgniter

ORM test PHP frameworků – CakePHP, CodeIgniter

Články PHP

V prvním díle tohoto seriálu jsme se seznámili se základní problematikou, s postupem a nástroji použitými pro testování. A zde se podíváme na jednoduché informace a výsledky frameworků CakePHP a CodeIgniter.

CakePHP 2.2.5

CakePHP patří mezi PHP frameworky používané pro tvorbu webových aplikací. Ve své základní struktuře využívá velké množství vlastností z Ruby on Rails. Je zaměřen na rychlý vývoj celé aplikace při využití návrhového vzoru MVC. Jeho struktura je srozumitelně uspořádána a tím je zajištěna i snadná orientace v celém kódu. Poskytuje velké množství nástrojů používaných například pro jednoduché ověřování uživatelů nebo důkladnou validaci vstupních dat. Komunikuje s téměř všemi nejpoužívanějšími typy databází a při jejich obsluze využívá ActiveRecord.

Vlastnosti:

  • srozumitelná struktura
  • jednoduché přidávání validací
  • programování v PHP a HTML
  • využívá Model-View-Controller strukturu
  • využívá ActiveRecord
  • propojení s nejpoužívanějšími databázemi
  • snadná rozšiřitelnost

Požadavky pro použitou verzi:

  • HTTP server
  • PHP 5.2.8 nebo vyšší
  • databáze MySQL, Microsoft SQL server, SQLite, Postgre SQL

Dokumentace a podpora:

Díky jeho velké popularitě lze nalézt velké množství již hotových ukázkových aplikací nebo výukové kusy kódu. Na oficiálních stránkách lze informace čerpat z velmi rozsáhlé dokumentace, která je rozdělena na část věnovanou jednotlivým funkcím a část zabývající se návody a postupy. K dispozici jsou i stránky na nejpoužívanějších sociálních sítích a fórech a IRC kanál.

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 1524 1570 136 3709 1902,3 391
2. Měření 3000 1479 1539 159 2896 1928,3 346
3. Měření 3000 1596 1592 138 5631 1763,6 544
Průměr 3000 1533,0 1567,0 144,3 4078,7 1864,7 427,0

 

  • 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 1493 1509 156 2992 33,6 410
2. Měření 3000 1147 1149 133 2364 42 333
3. Měření 3000 1215 1195 141 5679 40,1 442
Průměr 3000 1285,0 1284,3 143,3 3678,3 38,6 395,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 1181 1179 137 2715 40,8 358
2. Měření 3000 1165 1173 136 2659 41,6 346
3. Měření 3000 1233 1217 130 2799 39,2 360
Průměr 3000 1193,0 1189,7 134,3 2724,3 40,5 354,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 1127 1134 130 2533 42,6 330
2. Měření 3000 1143 1143 136 3169 42,2 333
3. Měření 3000 1238 1203 142 2928 39,2 389
Průměr 3000 1169,3 1160,0 136,0 2876,7 41,3 350,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 1124 1197 133 3026 42,6 346
2. Měření 12000 1257 1218 135 3422 621,6 362
3. Měření 12000 1280 1257 138 7721 618,8 469
Průměr 12000 1220,3 1224,0 135,3 4723,0 427,7 392,3

Grafické znázornění:

CakePHP grafy

CodeIgniter 2.1.3

Tento framework je vyvíjen společností EllisLab, která na tvorbě spolupracuje s veřejnou komunitou programátorů. Jedná se o další známý projekt využívající veškeré moderní nástroje. Jádro je velice úsporně navrženo a lze ho rozšířit o velkou řadu doplňků. Díky tomu je celá struktura přehledná. Mezi jeho základní vlastnosti se řadí využívání návrhového vzoru MVC, zanechávání malého otisku v celé aplikaci a takzvaná čistá URL. V důsledku jeho velké popularity a veřejného kódu může každý schopný programátor vytvořit nějaký doplněk. Díky tomu existuje mnoho nástrojů na práci s e-maily, obrázky a hlavně dostupná komunikace s téměř každým používaným typem databáze. Rozdílem od jiných frameworků je, že nevyužívá šablony a tudíž není potřeba se učit nějaký jazyk určený právě k jejich tvorbě.

Vlastnosti:

  • srozumitelná a intuitivní struktura
  • jádro nepotřebuje velké množství knihoven
  • používá „čistou URL“, jednoduché příkazy pomocí URL
  • využívá Model-View-Controller strukturu
  • dobrá rozšiřitelnost na práci s emaily, XML dokumenty, obrázky…
  • propojení s nejpoužívanějšími databázemi
  • nepoužívá šablony (templates)

Požadavky pro použitou verzi:

  • HTTP server
  • PHP 5.1.6 nebo vyšší
  • Databáze MySQL(4.1+), Microsoft SQL server, SQLite, Postgre SQL, MySQLi …

Dokumentace a podpora:

Komunikace mezi jednotlivými příznivci probíhá přes oficiální IRC kanál nebo diskuzní fóra. Jako podpora velmi dobře poslouží i rozsáhlá dokumentace s mnoha ukázkovými příklady dostupnými na oficiálních stránkách.

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 302 292 26 1656 2627,5 172
2. Měření 3000 306 280 27 1687 2647,3 174
3. Měření 3000 295 284 25 3553 2644,7 168
Průměr 3000 301,0 285,3 26,0 2298,7 2639,8 171,3

 

  • 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 241 232 58 718 20,6 101
2. Měření 3000 195 196 57 601 26,3 67
3. Měření 3000 196 193 65 529 23,2 79
Průměr 3000 210,7 207,0 60,0 616,0 23,4 82,3

 

  • 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 129 140 15 240 33,6 54
2. Měření 3000 176 175 59 402 25,2 65
3. Měření 3000 216 209 61 561 21,8 92
Průměr 3000 173,7 174,7 45,0 401,0 26,9 70,3

 

  • 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 185 181 59 641 24,5 74
2. Měření 3000 179 177 61 444 24,8 65
3. Měření 3000 217 217 48 555 21,8 88
Průměr 3000 193,7 191,7 56,0 546,7 23,7 75,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 199 204 25 722 1114,8 66
2. Měření 12000 218 221 26 814 1047,8 74
3. Měření 12000 235 219 25 1048 958,7 110
Průměr 12000 217,3 214,7 25,3 861,3 1040,4 83,3

 

Grafické znázornění:

CodeIgniter grafy

Komentáře

Subscribe
Upozornit na
guest
40 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
Kolemjdoucí

Opravdu má tohle smysl? Radši zrušit jako seriál o ZF, lepší než si způsobit ještě větší ostudu. Nebo spojit do jednoho článku a vynechat zbytečný balast. Jen ať se z toho nestane prázdninový seriál, který pomalinku pohřbívá Zdroják.

Martin Hassman

Tak redakce při smyslech nebyla nikdy, jinak by to nemohla vůbec dělat 8-) BTW ZF seriál tehdy skončil odchodem autora, který vše zabalil a přestal zcela komunikovat. S autorem tohohle seriálu se snažím spojit a rozmyslet další kroky, ale už týden od něj nemám žádnou reakci, tak ještě uvidíme.

Dan

Rozhodně taky doporučuju znovu zvážit koncept seriálu… tohle je opravdu, ale opravdu špatné.

Jiří Knesl

Přiznávám se, že výkon mě u frameworků až tak moc nezajímá. Tuším, že Cake a Symfony dopadnou blbě, Yii, Nette, Code Igniter dobře. Ale stejně by mě to nedonutilo projekt, který mám v Cake přepsat do Code Igniteru.

Co mi naopak v seriálu chybí:

1) srovnání, jak se dělají formuláře (přímo se zdrojáky)
2) jak vypadá db vrstva (má migrace? ORM? optimální dotazy jako v NotORM?)
3) jak udělám základní věci, jako routování, připojení do db, redirect, 404 Not Found
4) co umí šablonovací vrstva
5) jak je framework bezpečný (automatická ochrana proti CSRF, automatické escapování)
6) jak v tom udělám přihlášení/uživ.práva/administraci
7) jestli má nějaké pluginy a kolik práce je s jejich instalací
8) jak framework podporuje AJAXové dotazy, automatické REST služby apod.

Ikdyby byla frekvence článků čtvrtinová, myslím, že tak by to mělo význam a bylo by to vodítkem, které může někoho při výběru FW ovlivnit. Dělat benchmarky na laboratorních dotazech nepovažuju za věc, která by cokoliv užitečného pro praxi ukázala.

Kéž bych měl o trochu víc času s tím autorovi pomoci, protože je to chvályhodná aktivita a byla by škoda takovou šanci zahodit.

Já
hmm

čekal jsem že nette nebude žádnej rychlík ( rychlík byl opravdu pouze ve verzích 0.x ), ale že dopadne až tak špatně, to jsem nečekal ( i šnek zend je rychlejší to je pro mě překvapení ).

xanax

ja som nette opustil uz davno prave koli rychlosti.. niektore pomalsie casti nette by bolo lepsie prepisat do C++ ako PHP moduly.

kaktuss

Len jedno nechapem, ze preco ma v tom teste na phalconphp.com Nette taky obrovsky prenos dat oproti inym fw.

Total transferred: 50370200 bytes

co je napr. 120x viac ako Phalcon.

Vie to niekto vysvetlit?

kaktuss

Tak v tom teste Nette nie ze pohorelo, ale zhorelo. Otazkou je, ci to je nieco realne alebo…

Hmm

Ci je to uplne realne neviem, ale nieco pravdy na tom bude, pretoze Nette som taktiez zahodil po par rokoch kvoli rychlosti a komplikovanosti a presiel na rychlejsi a prijemnejsi CodeIgniter

karel

Také mě zaujalo, jak v tom testu nette propadlo, tak jsem se schválně podíval na zdrojáky toho testu. Jsou k dispozici zde:
https://github.com/phalcon/framework-bench/tree/master/helloworld

Ten test je bohužel naprosto zfixlovaný, a to z těchto důvodů:

– phalcon má v testu pouze jeden controller a jedno view, které obsahuje pouze samotný text „Hello!“ bez ničeho dalšího. To pak při 2000x opakování dá těch 32kB přenesených HTML dat

– nette má v testu z neznámých důvodů controllery dva, v testu přenáší celé HTML včetně HEAD části, navíc používá i šablonovací systém a includuje šablonu do nadřazené šablony. V šabloně pak kromě textu nepochopitelně generuje navíc i odkaz. Dále má v bootstrapu zapnutý debugger, který je součástí stránky, proto ve výsledku při 2000x opakování přenese 50MB HTML dat!

Srovnávají se naprosto nesrovnatelné věci. Pro stejné porovnání by nette muselo mít v šabloně také pouze samotný text bez ničeho dalšího. A samozřejmě vypnutý debugger.

glubo

No to vypada jako jasna vyzva na pull request…

vojtech.dobes
Vojtěch Matějka

Off topic: Jak se podařil příspěvek s datem 11.7.2013 ve 22:56, když teď je teprve 11.7.2013 10:02?

Martin Hassman

Vojta je prostě napřed 8-) Díky za upozornění, podíváme se na to.

Martin Hassman

Tak bylo to poslední aktualizací WP, teď už se čas zobrazuje v pořádku.

qwe

Ještě je tam další rozdíl. Ve phalcon testu není žádný .htaccess, zatímco v nette testu .htaccess je, přitom pro tento test, kde se nepoužívá url rewrite, není potřeba, stačí jen samotný index.php. I to bude mít vliv na ApacheBench.

vojtech.dobes

Díky za upozornění, poslední pull request, který hýbal s Nette v tom testu, zdá se zavedl naprosto zvláštní úpravy…

hmm

nechtěl by to tedy někdo naklonovat a udělat rychlej testík? Teď mě to zajímá ještě víc :D

David Grudl

BTW, k čemu je benchmark webu, který nedělá nic? Až budu tvořit stránku, která vypíše jenom <h1>Hello!</h1>, obejdu se bez frameworku i PHP ;)

hmm

Davide ( pokud mohu tykat ), každý druhý dnes „honí“ rychlost, u menších webu to nevadí, ale na větších webech ( rozumněj s větší návštěvností ) se už každá milisekunda „neberte to doslovně“ počítá :).
Na nette webu je „Dle nezávislého testu je Nette Framework jedním z nejrychlejších frameworků vůbec.“ proto by bylo pěkné kdyby tomu tak opravdu bylo i v tomto testu / dnešní době, nicméně i po pull req. co zaslal [vojtech.dobes] je na tom nette stále nejhůře a to už stojí za zamyšlení. ( na to jak bylo nette pěkné, malé, rychlé, tak teď docela nabobtnalo a rapidně zpomalilo a to není dobré do budoucna )

karel

Vy tam někde vidíte nové výsledky toho testu? Já tam vidím pořád ty staré.

hmm

Výsledky tam samozřejmě nejsou, ale nic Vám nebrání v tom, si stáhnout všechny zdrojáky z GITu a udělat si vlastní měření ;) ( zabere to tak 15 minut max. )

qwe

Tak se o výsledky poděl.

vaclav.sir

Zkusil jsem to a u mě byl rozdíl mezi Nette a Zendem ještě větší. Dva requesty sice skončily error 500 z nějakého cache-related důvodu (Nette\InvalidStateException: Malformed journal file), ale to by takový vliv mít nemělo.

Každopádně až budu tvořit stránku, která vypíše jenom <h1>Hello!</h1>, také se obejdu bez PHP. Pro srovnání jsem zkusil ještě hello world v Node.js a to je teprve rozdíl…

kaktuss

Tak taketo porovnanie by mi osobne ovela viac dalo, ako toto aktualne porovnavanie rychlosti.

janek

Omlouvám se, ale nechápu ten přístup, kdy nemůžu mít kritický názor jen proto, že nejsem autor článku nebo že jsem se nějak nepodílel. Slepá adorace autorů čehokoliv vede pouze ke snížení kvality.

Zkuste si někdy vzít do hospody jednoho programátora (skutečného, řekněme seniora u velké firmy nebo zkušeného freelancera) který miluje třeba Symphony, druhý Zend a třetí Nette. Stačí je jen poslouchat… a jestli byste byl pak schopen nějak stanovit, který FW je nejrychlejší, nejlepší, nej*

joe

mne to praveze pride dobry clanok pretoze opisuje vyhody a rozdiely frameworkov.a casovy test je tiez dost dolezity kedze si clovek vie porovnat co je vyhodnejsie pouzit pre projekt. Ostatne veci sa uz najdu v dokumentacii. nieco taketo som hladal.
diki

janek

Vy vážně věříte, že když napíšete aplikaci na FW, který tento test vyhrál, že ta apliakce bude v reálném provozu rychlejší než dejme tomu tem FW, který skončil na posledním místě ? :)

glubo

Počujte, Kefalín. A čo si vy predstavujete pod takým slovom, „Postgre SGL“?

Jaroslav Kubíček

„Rozdílem od jiných frameworků je, že nevyužívá šablony a tudíž není potřeba se učit nějaký jazyk určený právě k jejich tvorbě“

to je nějaký apríl, ne?

Franta.

Teď jsem zjistil, že tuhle killer feature má nette taky, stačí přejmenovat .latte na .phtml :) Proč to není na nette.org mezi výhodami?

janek

Co přesně znamenají poslední hodnoty „all“ ? Průměrnou odezvu čtení i zápisu ? :)
Průměrná rychlost kiloBajtů/s čeho? Jak to souvisí s frameworkem?
děkuji

janek

Stále nechápu tu průměrnou rychlost kiloBajtů/s.
Přesto jsou ty výsledky na nic. Aplikace většinu času masivně čte a to hlavně z cache (file, memory). Triviální zapis do databáze je většinou rychlý, pokud nezatěžujeme tabulku nějakým složitějším dotazem (nebo zprasenym). Tzn rychlost zápisu nijak nesouvisí s FW.
Z tohoto hlediska by mě u FW spíše zajímalo, jak je řešene cache resp. typická situace, kdy provádím update a potřebuji invalidovat cache. Samotný update do db je hned, ale invalidace cache může trvat i několik vteřin v závislosti na velikosti cache nebo množství tagů apod.

janek

Myslím, že by redakce měla zvážit vložení zvýrazněného perexu před každý díl tohoto seriálu, kde by bylo uvedeno, že se jedná pouze o náhodně seřazený neúplný seznam php frameworků.

Jan Machala

Dobře, chápu že autor neví, jak by se mělo psát srovnání FW. Ale jak tohle může projít redakcí… Autorovi doporučuji, aby se s někým spojil a zkusil napsat článek pořádně (např. příklady kódů řešení, ve kterých FW vyniká, či principy, které jinde nejsou a naopak nedostatky).

BTW neexistence šablonovacího systému opravdu výhoda není. A co se týká benchmarků, jeden test přece nemůže rozhodnout o celkové rychlosti. A to ať je to test hello wordu, nebo databázový test. Smysl dává jedině kombinace několika běžných use cases. A nezapomeňte na cache (na různých úrovních). Takže nakonec záleží jen na tom, jak dobře se v tom a tom FW dá web navrhnout a v něm následně optimalizovat na rychlost.

Kristian Feldsam

Tak toto je divny test. Codeigniter ORM nema, da sa doinstalovat, najznamejsi je DataMapper. O tom sa ale autor v clanku nezmienuje. Taktiez mi to pride skor test databazy ako samotneho frameworku.

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.

Pocta C64

Za prvopočátek své programátorské kariéry vděčím počítači Commodore 64. Tehdy jsem genialitu návrhu nemohl docenit. Dnes dokážu lehce nahlédnout pod pokličku. Chtěl bych se o to s vámi podělit a vzdát mu hold.