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

Zdroják » PHP » Miniaturní PHP frameworky: Protože na velikosti záleží!

Miniaturní PHP frameworky: Protože na velikosti záleží!

Články PHP, Různé

V PHP si může vývojář vybrat z mnoha desítek či stovek frameworků, které s větší či menší měrou komplexity a komfortu řeší nejčastější problémy či nejčastěji opakované práce, které řeší téměř každý vývojář. Pojďme se podívat na některé frameworky, které mají společnou jednu věc: Jsou opravdu miniaturní!

Každý PHP vývojář (hodný toho jména) zná názvy jako CakePHP, Symfony, Zend Framework. Čeští pak i Nette (pokud ne, můžete se s ním seznámit v seriálu Začínáme s Nette Frameworkem na Zdrojáku). Framework nám může ušetřit spoustu (rutinní a otravné) práce na běžných projektech.

Diskusní fóra jsou plná programátorů, co se dokáží dohadovat dlouhé týdny až roky o tom, který framework je „nejlepší“, a argumentují u toho především sáhodlouhými soupisy toho, co jejich favorit umí. Někteří argumentují i poněkud hůře změřitelnými faktory, jako je kvalita dokumentace či „strmost křivky učení“. A přesně podle známého pravidla: O věcech, které nelze objektivně rozhodnout, se lze dohadovat donekonečna. Proto se v tomto článku vyhneme hodnotícím slovům jako „nejlepší“ a pro zjednodušení budeme předpokládat, že „nejlepší“ framework je takový, v němž

– lze napsat požadovanou aplikaci

– náš vývojář umí pracovat.

Jistě, jsou vývojáři, kteří se naučí pracovat se Zendem a napíší v něm cokoli, od microsite po e-shop kombinovaný se sociální sítí. Jiní dobře znají tři, čtyři „své oblíbené“, a konkrétní framework pro daný úkol volí podle zadání. Pokud patříte k těm druhým, určitě vám přijde vhod následující seznam tipů na frameworky, které neřeší všechno, ale řeší to hlavní, řeší to (pokud možno) elegantně a především: Nezaberou víc než pár desítek, nejvýš stovek kilobajtů!(Čte­náři téma miniframeworků živě vnímají, o čemž svědčí mj. i to, že článek o miniframeworku Limonade minule rozvášnil některé čtenáře až k psaní štěpných komentářů (to je ta slušná verze) – pozn.aut.)

Proč se zabývat (mini)frameworkem?

Máte pravdu, nemusíte jej používat. Ostatně, i z Prahy do Ostravy se dá dojít pěšky. Ale dobrý produktivní programátor nevynalézá kolo a nedělá práci, kterou už dělal nebo kterou za něj udělal někdo jiný. (Rád bych zdůraznil slovo „produktivní“. Ti programátoři, kteří nejsou tlačeni zákazníkem, termínem a manažerem k „produktivitě teď a tady“, mají dost času na vymýšlení vymyšleného, a mají i naději, že to vymyslí líp. – pozn. aut.)

V každodenní praxi se vyskytují úlohy, které jsou takříkajíc „na jedno odpoledne“ – rozsahem malé, víceméně je potřeba jen vhodně „ošatit kostru“. Celé to „zajímavé“ spočívá v nějaké důvtipné myšlence. A právě znalost vhodného miniframeworku umožňuje vývojářům, aby se v takovou chvíli soustředili právě na tu zajímavou myšlenku a neřešili „jak napíšeme routování“ a „jak ošetříme sessions“ či „budeme muset implementovat OpenID, to bude spousta práce…“ Tohle všechno vyřešil už framework… A nemusí to být vždy jen mnohamegová obluda, kterou budete uploadovat na server dvacet minut a další hodinu nastavovat.

Pojďme se na některé zajímavé podívat.

Kohana

Kohana

Framework, který vznikl ze známého CodeIgniteru přepracováním pro verzi PHP5. Kohana je pravděpodobně nejznámější z dnešního seznamu. Se svými cca 1.5MB patří mezi miniframeworky k obrům. V plné distribuci naleznete ale vše, co potřebujete k vytvoření jednoduché webové aplikace. Nabízí (samosebou) MVC, podporu pro UTF-8, vnitřní komunikaci pomocí událostí (events) nebo filtrování vstupních údajů proti XSS. V knihovnách lze nalézt např. i vlastní ORM (Object-Relational Mapper).

Při stažení si navíc můžete vybrat, zda chcete do balíku zahrnout následující moduly:

  •  – Modul pro vytváření komprimovaných archivů, podporuje formáty zip, tar, gzip a bzip2.
  •  – Řeší autentizaci uživatelů a jejich správu. 
  •  – Integruje Google Maps, geolokaci a podporu GMaps API.
  •  – Dynamicky vytváří dokumentaci (zatím betaverze)
  •  – Poskytuje připojení k platebním branám, jako jsou Authorize.net, PayPal, Trident, Trust Commerce nebo YouPay.

Kohana má velmi dobře zpracovanou dokumentaci (wiki) a jsou k dispozici i dobře zpracované tutorialy, které urychlí počáteční fázi učení.

Chcete se naučit o PHP víc?

Akademie Root.cz pořádá školení Úvod do PHP. Kurz vede zkušený lektor Jakub Vrána a je určen všem současným a budoucím webovým vývojářům, kteří se chtějí od základu seznámit s programovacím jazykem PHP. Během kurzu se účastníci naučí vytvářet webové aplikace v PHP od těch nejjednodušších až po ty poměrně složité a seznámí se se všemi klíčovými vlastnostmi jazyka. Máte zájem o jiné školení? Napište nám!

Rapyd

Rapyd

Rapyd je miniaturní framework, zaměřený na vytváření aplikací, založených na vzoru CRUD (Create, Retrieve, Update, Delete) – tedy vzor, používaný u databázových aplikací. Nabízí sadu komponent a tříd, které pomohou vytvořit např. jednoduché rozhraní k databázi. Celý framework se vešel do padesáti souborů, které zabírají necelý půlmegabajt. Kromě práce s databází samosebou nabízí i (téměř povinný) MVC pattern, „hezká“ URL či podporu modulů.

Na webu Rapydu se můžete podívat na ukázku aplikace, postavené na tomto frameworku.

Epicode

Spíš než kompaktní framework připomíná epicode skládačku. Začal jako miniaturní MVC framework a postupem času se vyvinul v sadu nástrojů, které mohou být použity společně či zvlášť. Zahrnuje cachování podporu session, podporu databází, ověřování formulářů, knihovnu pro Twitter, OAuth a asynchronní cURL. Epicode je dosti spartánský framework, dokonce nemá ani vlastní web (používá github). K dispozici je poměrně přehledná dokumentace.

Extra Light Framework

ELF PHP je velmi malý PHP framework, který implementuje (jak jinak) MVC architekturu. Po rozbalení zabírá 72 kB, do kterých se toho však vešlo poměrně hodně. Posuďte sami:

  • Cachování
  • Routování URL
  • Logování
  • Nástroj pro práci s obrázky
  • Vrstva pro databázovou abstrakci

Do další verze jsou plánovány nástroje jako session, pomocná třída pro stránkování či upload souborů.

BaseApp

BaseApp Framework je určen pro samostatné vývojáře nebo malé týmy, které hledají vhodný odrazový můstek. Pokud znáte trochu CakePHP, bude vám API připadat povědomé. BaseApp se inspiroval právě u CakePHP a CodeIgniteru, ale pokouší se to nejdůležitější vměstnat do padesáti kilobytů (kompresovaného kódu). BaseApp nabízí všechny běžné funkce, jaké mají „velké“ frameworky:

  • Podpora PHP 5.
  • Plné MVC (ale může být použit jako knihovna funkcí).
  • API je do značné míry kompatibilní s CakePHP.
  • Funkce Active Records a ORM.
  • Databázová vrstva s podporou AdoDB.
  • Podpora pro ladění a ošetřování chyb (vestavěná podpora pro FireBug).
  • Rozšiřitelná obsluha cookies a session.
  • Routování URL.
  • Podpora AJAX (využívá jQuery).

Framework je hostován na Google code.

Něco trochu jiného: PHP CLI

Tento framework k předchozím moc nezapadá. Není totiž zaměřen na vytváření webových aplikací, ale používá PHP jako nástroj pro příkazovou řádku (Command-Line Interface). PHP-CLI framework vám usnadní psaní aplikací pro příkazovou řádku. Řeší za vás parsování parametrů či výstup do STDOUT a STDERR. Podporuje i ladění či výpis tabulek. Bohužel k tomuto frameworku není žádná dostupná dokumentace, můžete si jej pouze stáhnout a „prozkoumat“. Tento framework je používán nástrojem Drupal Analysis Tool.

Závěr

Miniaturní frameworky jistě najdou uplatnění při vytváření malých webů. Dobré jsou rovněž jako zdroj inspirace pro zkušené vývojáře. Je na místě připomenout, že „minimální velikost“ je svým způsobem technický hack. Rozhodně je nelze doporučit začátečníkům; v nezkušených rukou mohou napáchat víc škody než užitku. Zkušený vývojář však mezi nimi může najít vhodný nástroj např. pro rychlé prototypování. Těžko si lze představit, že na takovém frameworku budou postaveny celé velké weby.

Text vychází z článku Damn Small PHP Frameworks. Because size does matter., který vyšel na webu jees.eu a jehož autorem je Kerasiotis Vasileios

Komentáře

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

Jenom pro srovnání Nette zabírá 720kB, minified verze dokonce jenom 330kB.

Martin

Do 330 kB se vejde celá PHP aplikace středního rozsahu i s chlupama.

Ped

Aktualne moje prvni aplikace stredniho rozsahu postavena nad Nette ma 150kB (je hotova asi z 90%).

A pro jeste trochu jine srovnani: prototyp v cistem php ktery mel za ulohu jenom otestovat graficky design, html tagy a zakladni rozvrzeni webu ma 128kB, t.j. aplikace ktera generuje asi 3× vice stranek + jsou plne funkcni bude asi jen o 50% vetsi nez staticky prototyp.

Celkove jsem docela spokojeny s tim kolik radku v zdrojaku aplikace neco opravdu dela a kolik jich je jen „omacka“ kolem (definice funkci/trid, zapouzdreni, MVC, atd…), od oka bych rekl ze omacka ma jen mirne pres 60% a i to jen diky tomu ze vykonnych radku je tak 1/3 proti cistemu PHP bez Nette. Celkove bez Nette bych se urcite dostal pres 250kB a jeste by to nejspis bylo vic chybove a min bezpecne, nemluve o delsim vyvoji (a to se Nette ucim za jizdy a jeste ho urcite nepouzivam optimalne).

Takze vzdy jde samozrejme o kontext. :) Ale subjektivne z me zkusenosti muzu rict, ze Nette je zatim jediny PHP framework ktery mne zaujal natolik abych ho zkusil pouzit i v komercni aplikaci (jinak jsem v PHP delal jenom soukrome mini projekty bez frameworku, profesionalne delam C++). A s tim pokusem jsem zatim dost spokojeny a tech 330kB mi prijde smysluplne investovanych.

Tim nechci rikat ze Nette je best, vzhledem k tomu ze zadny jiny PHP framework jsem nezkoumal vic nez par hodin, tak nemuzu srovnavat.

Michal Šatal

Dobrý den, jsem vcelku vášnivým uživatelem Kohany a mohu jí jen doporučit, třeba vznikne i větší česká komunita tohoto dle mého názoru podařeného frameworku.

Ostatní zmíněné frameworky mě zaujaly, děkuji autorovi za článek, projdu si zmíněné frameworky už jen abych viděl, jestli někdo neměl nějakou geniální myšlenku. :)

v6ak

Co Adminer editor od Jakuba Vrány?

v6ak

Uznávám, že jsem byl neobvykle stručný. Chtěl jsem říct, že Adminer editor by sem šlo taky zařadit?

v6ak

Podle příkladu na http://www.adminer.org/cs/extension/ bych to spíš než na aplikaci viděl na specializovaný framework. Do miniframeworků (nemusí umět vše, jen to, co zde potřebuju) se IMHO celkem hodí.

Jakub Vrána

Je to tak. Adminer Editor je nástroj pro správu dat v databázi. Dá se všelijak upravovat, ale z tohoto rámce nevykročí. Framework to tedy není.

v6ak

Dobře, formálně sem možná natěsno nepatří, ale tématicky IMHO ano.

jos

co je to kompresovaný kód?

jos

Týjo, tak ono to slovo fakt existuje ) editor to ‚komprimováno‘ nakonec stejně asi odstranil. Při zmběžným pohledu to vypadá, že autor (frameworku) tim má na mysli zazipovaný zdrojáky, což je teda čurina. Ale asi se tim myslí konkatenace všech souborů a odstranění většiny konců řádků, cože je čurina ještě větší.

Mastodont

Pane Malý, bylo by slušné uvést odkaz na článek
http://jeez.eu/…does-matter/

Nejedná se sice o prostý překlad, nicméně výčet frameworků je stejný a mnohé části textu rovněž.

honza

pekny prehled…

zajimal by me nazor sirsi programatorske verejnosti, zda-li vidi v pouzivani techto FW zasadni vyhodu, nez-li pouzivat a spravovat svuj vlastni. Me treba celkem bavi si zdokonalovat svuj vlastni FW a z profesniho hlediska mi prijde vyhodne, ze nejsem jen lepic, ale i vim, co se deje uvnitr. A efektivita mi nedela problem, i kdyz uznavam, ze nette je treba fajn.

Mastodont

Z hlediska osobního vývoje je lepší vlastní FW, při hledání zaměstnání je lépe prokazovat se znalostí něčeho zavedeného :-))

jos

a nebo schopností číst manuál

ITGuru

Já osobně nejsem zastánce jakýchkoli frameworků. Nikdy jsem framework nepoužil, ale spolupracoval jsem na projektu, kde byl Zend Framework a mě to prostě přijde jako nepřehledná kupa odpadků.
Hlavní důvod proč FW nechci je ta velikost, takže pro mě přichází v úvahu jen nějaký ten miniframework. Maximum co bych byl ochotný použít je Nette – to mě přijde jako poměrně pěkný jednoduchý, ale mocný a čistý FW.
Další důvod je, že nechci aby byl web podřízený frameworku (což imho u Zendu je), ale naopak. Proto mám vlastní FW (nebo spíše knihovnu funkcí a tříd), který mi ulehčuje práci a nic mě nevnucuje. Navíc se vývojem zdokonaluji a taky mě to baví. Nepoužívám nic, co jsem nenapsal sám (jen když šlo o rychlost). Nemusím řešit licence, a že to něco neumí, a když je tam chyba, tak si ji hned opravím a nemusím se učit to používat atp.

Láďa

Většina lidí potřebuje pracovat (neboli vytvářet web), ne vytvářet frameworky. Čím je tahle potřeba silnější, tím je tolerance k popsaným výtkám vůči frameworkům vyšší.

ITGuru

Tak s tím naprosto souhlasím! Chápu že programátoři využívají frameworky i proč je využívají. Je to myslím jednoznačně nejrychlejší a nejefektivnější způsob, jak udělat web.
Já osobně však nemám jako nejvyšší prioritu rychlost. Raději to dělám déle, aby pak server vykonával 8kB kódu místo 400kB. Nelíbí se mi pamatovat si a psát jména tříd a jejich metody dlouhé jak celé souvětí:
$request = new Zend_Controller_Re­quest_Apache404();
$class = Zend_CodeGene­rator_Php_Clas­s::fromReflec­tion();

Raději sázím na „čím méně, tím lépe“. A ty funkce, které často využívám seskupuji do své „knihovny“ a příště už je nedělám – tedy na vývoji knihovny moc času nestrávím (pouze na vývoji a ladění celku), protože ji skládám postupně.

I ta moje knihovna se řídí tím pravidlem „čím méně, tím lépe“. Např. pokud chci využívat cookie, zavolám metodu Suite::load_mo­dule(‚Cookies‘); a až v tu chvíli se načte pomocí require_once třída pro správu Cookie popř. vytvoří instance atp.
Tedy ne, že načtu 40 souborů a pak čekám co programátor bude chtít, ale načtu minimum a až si programátor řekne, načtu další fragment.

Pozn.: Netvrdím, že kdo používá framework je špatný, ani že já dělám lépe. Pouze se dělím o svůj názor na věc.

Deter

Souhlasím, taky si vyvíjím vlastní (mini)framework. Veškeré klady takového počínání jste tu už zmínil – zdokonalování se, možnost rychlé/snadné opravy nějaké nefunkčnosti, framework přesně na míru mým zvyklostem, takže vývoj je v něm pak mnohem rychlejší. Na druhou stranu uznávám, že při hledání nového zaměstnání může být prokázání znalosti Zendu lepší, než zmínka o vlastním FW. I když i to se určitě bere jako klad. Už proto, že jste vůbec něco takového schopný napsat :)

honza

presne tak…

ad pohovor: asi zalezi, co firma shani, jestli programatora nebo jim staci prumerny lepic za polovicni plat. Pokud prijimam programatora, tak me hlavne zajima, jestli umi premejslet a jake ma zkusenosti a umi resit problemy, pise kod ktery je efektni a prehledny a neni to rychlokvaska (klucik, co hraje hry a umi programovat weby = naklikal dva weby v drupalu) …
ale pokud zmini vlastni FW, hodne to napovi.

A FW je vlastne co? par stranek popisku fci, metod, co ktera dela, vraci.. rozsireni zakladu co nabizi jazyk…to se da naucit za par dni, pro prumerneho VS trivialni vec.

komak

Ja som sa tiež rozhodol pre vlastný FW a to z toho titulu, že potrebujem svoju prvú väčšiu aplikáciu napísať čo najrýchlejšie a obávam sa, že štúdium nejakého frameworku mi zaberie veľa času a nakoniec zistím, že mi niečím nevyhovuje a študovať a skúšať nejaký ďalší už by mohlo byť likvidačné.. S php-FW-ami nemám skúsenosti, ale skúšal som niekoľko obdobných „FW“ v iných programovacích jazykoch a vždy som narazil na niečo, čo bezpodmienečne v programe chcem a FW to neumožňuje. Potom som to skúšal „dobastliť“ a nakoniec mi z toho vyšlo, že urobiť si to od začiatku „po svojom“ je pre mňa (resp. pre kvalitu aplikácie) najlepšie riešenie.

Jiří Knesl

Proč nevyužijete autoloading? Vyhnete se zapomenutým nenačteným modulům.

ITGuru

Na to asi neznám správnou odpověď. __autoload() se mi líbí a bezpochyby je to šikovná pomůcka, ale nějak se mi nelíbí, že se loaduje z jedné adresy. Pokud by chtěl uživatel použít __autoload() na svoje knihovny, znefunkčnil by můj FW.
Popravdě nějak jsem se tím nezabýval – require_once mi vyhovuje a zatím jsem nenarazil na problémy – naopak jsem rád, že mám každé načtení pod kontrolou.
Navíc někdy testuju co se stane, když modul nebo knihovna schází nebo je vadná (jak se bude FW chovat) a k tomuto účelu bych to musel vypínat atp.
Není to špatné, ale nějak jsem k tomu asi ještě nedospěl…

fos4

Kdyz si napises tridu/fci ktera ti projede adresare, zjistis v kterych souborech jsou tridi (token_get_all) a vysledek si ulozis tak pak je jedno kde se knihovny nachazeji. Mimo jine neni nutno pouzit __autoload() ale staci spl_autoload_re­gister()

Jiří Knesl

K tomu centrálnímu bodu lze připojovat libovolné množství autoloaderů. Navíc require_once funguje dál, takže by to vaše stávající aplikace nijak neohrozilo.

Nebudu vás nutit, různí lidé píší různé PHP. :)

Michal Zahradnicek

Nedávno som čítal jeden článok, kde autor písal, že každý programátor, pokiaľ chce rásť by si mal spraviť svoj vlastny framework. Často krát ich naprogramuje aj viac…

Ja osobne som tiež nebol zástancom frameworkov(a objektového programovania), ale čas ukázal(v PHP robím cca 8 rokov), že je to veľmi dobrá vec a taký framework vie veľmi urýchliť robotu.

Najskôr som mal tiež iba nejakú knižnicu, ktorú som vylepšoval a stačila mi, ale asi pred 2 rokmi som spravil niečo medzi tou knižnicou a frameworkom a postavil na tom cca 2 weby, potom som spravil vlastný framework, ktorý však nebol zlý, ale ani veľmi dobrý(bol v ňom postavený jeden projekt) a potom som začal používať cakePHP. Cake mi veľmi vyhovoval čo sa týka spôsobu práce(zdá sa mi priam geniálny), ale je strašne pomalý(na veľkom projekte jeden request 200ms s akcelerátorom a to tam dokopy nič nerobí). Teraz asi 4 mesiace pracujem na podobnom frameworku ako je baseApp(kópia cakePHP). Načítanie jednoduchej stránky trvá cca 3ms aj s napojením na DB + jedno query + render layout + view. Myslím, že je to vcelku slušný čas.

Keď ho dokončím, tak by som ho chcel zverejniť pod MIT licenciou. Teraz do neho ešte robím nejaké helpery a komponenty. Možno cca za dáke 2–3 mesiace…

Martin Kopta

Frameworků, které by v PHP splnily zadání „malé“, je více. Zajímavý je třeba framework Limonade (http://github.com/…ign/limonade) inspirovaný Sinatrou v Ruby.

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.