Velký test PHP frameworků: Zend, Nette, PHP a RoR

11. 9. 2008
Doba čtení: 15 minut

Sdílet

Dnes ukončíme náš velký test PHP frameworků a zakončení to bude opravdu zajímavé. Na programu totiž máme populární Zend framework a vycházející českou hvězdu – framework Nette. Na konci článku se dočkáme srovnání všech testovaných frameworků, a to nejen mezi sebou, ale také v porovnání s čistým PHP a RoR.

Zend

Zend framework je ke stažení na framework.zen­d.com/download ve verzi 1.5.1 vydané 25. března 2008.

Základní vlastnosti

  • Podporuje databáze MySQL, MSSQL, SQLite, Oracle, PostgreSQL, IBM DB2.
  • Pro přístup do databáze využívá PDO.
  • Součástí Zendu je celá řada modulů, např. ověřování práv (Zend_Acl), posílání emailů (Zend_Mail) nebo tvorba PDF dokumentů (Zend_Pdf).
  • Pohledy můžou být klasické soubory tvořeny kombinací HTML a PHP mající příponu phtml, nebo lze využít i šablonovací systém SMARTY.
  • Obsahuje i nadstandardní validační metody, jako např. ověření, zda jde o: IP adresu, hexadecimální číslo nebo datum. Nabízí také možnost zadání regulárního výrazu.
  • Obsahuje standardní helpery.
  • Konfiguraci můžeme provést dvěma způsoby, a to v souboru INI nebo XML. Pro načtení dat z těchto souborů následně využijeme třídu Zend_Config_Ini, popř. Zend_Config_Xml.

Dokumentace a uživatelská podpora

Dokumentace je u Zendu velmi propracovaná a snadno se v ní orientuje. Je také doplněna velkým množstvím příkladů. Na stránkách Zendu nalezneme i různé video tutoriály a prezentace.

Tento framework je celosvětově velmi rozšířený a komunita kolem něj je obrovská. Na internetu tak existují velká fóra v různých jazycích, jež jsou naplněna řešenými problémy.

Zend má velké zastoupení i mezi českými vývojáři. Lze tedy najít mnoho návodů a řešených problémů právě v češtině.

Ukázka zdrojových kódů

Ukázka pohledu:

1 <table cellspacing = "10" border="1" cellpadding = "5">
2
3 <?php foreach($this->useri as $user) : ?>
4 <tr>
5 <td><?php echo $this->escape($user->ID);?></td>
6 <td><?php echo $this->escape($user->name)." ".$this->escape($user->surname);?></td>
7 <td><?php echo $this->escape($user->email);?></td>
8 <td><?php echo $this->escape($user->phone);?></td>
9 <td>
10   <a href="<?php echo $this->baseUrl; ?>/users/edit/id/<?php
11      echo $user->ID.'/id_clena/'.$user->id_member;?>">Edit</a>
12 </td>
13 </tr>
14 <?php endforeach; ?>
15 </table><br />
16 <a href="<?php echo $this->baseUrl; ?>/index">Zpět na seznam členů</a> 

Ukázka modelu:

1 <?php
2
3 class Users extends Zend_Db_Table
4 {
5    protected $_name = 'users';
6 }
7 ?> 

Ukázka kontroleru:

1 <?php
2 require_once 'Zend/Controller/Action.php';
3 require_once 'Zend/Session/Namespace.php';
4 require_once 'Zend/Form.php';
5 require_once 'Zend/Form/Element/Text.php';
6
7 class UsersController extends Zend_Controller_Action
8 {
9    function indexAction()
10    {
11
12      $useri = new Users();
13      $id = (int)$this->_request->getParam('id', 0);
14      $member = new Members();
15      $this->view->member = $member->fetchRow('ID='.$id);
16      $this->view->title = "Uživatelé člena ".$this->view->member->name;
17      $namespace = new Zend_Session_Namespace();
18      if (isset($namespace->vypis))
19      {
20          $this->view->vypis = $namespace->vypis;
21          unset($namespace->vypis);
22      }
23
24      if ($id > 0) $this->view->useri = $useri->fetchAll('id_member='.$id);
25    }
26 }
27 ?> 

Výsledky testů bez použití eAcceleratoru

Zend – výsledky testů bez eAcceleratoru.
Akce Vzorky Průměr [ms] Median [ms] Min [ms] Max [ms] Sm. Odch. [ms] Modus [ms]
První test
Zobrazení členů 30 1016 843 171 2437 745,03 375
Zobrazení uživatelů 30 1260 531 156 19000 3329,90 281
Editace uživatele 30 1177 672 171 12641 2185,80 172
Upravení dat 30 1805 1953 328 4359 939,39 344
Celkem 120 1314 859 156 19000 
Druhý test
Zobrazení členů 30 1210 547 171 15547 2708,54 375
Zobrazení uživatelů 30 703 578 157 1890 463,98 328
Editace uživatele 30 1120 640 156 14343 2488,68 344
Upravení dat 30 1343 1250 343 2860 683,33 672
Celkem 120 1094 688 156 15547
Třetí test
Zobrazení členů 30 973 766 203 2969 681,26 344
Zobrazení uživatelů 30 981 1032 157 2578 567,52 297
Editace uživatele 30 1002 843 172 2406 665,41 610
Upravení dat 30 2023 2109 500 4250 1020,15 2953
Celkem 120 1245 1062 157 4250
Graf 1

Obr. 22. Zend – průměrné časy jednotlivých akcí bez eAcceleratoru

Paměťové nároky: 6538.49 kB

Rychlosti práce s databází – Zend
Akce Průměrný čas [ms]
Výpis všech členů 17,72
Jméno člena 44,34
Všichni uživatelé člena 9,89
Načtení jednoho uživatele 103,35
Update dotaz 8,98
Celkem 34,07

Výsledky testů s použitím eAcceleratoru

Zend – výsledky testů s eAcceleratorem.
Akce Vzorky Průměr [ms] Median [ms] Min [ms] Max [ms] Sm. Odch. [ms] Modus [ms]
První test
Zobrazení členů 30 97 62 46 843 140,67 47
Zobrazení uživatelů 30 48 47 31 94 13,51 47
Editace uživatele 30 42 47 31 63 10,61 47
Upravení dat 30 118 94 63 407 79,68 78
Celkem 120 76 62 31 843
Druhý test
Zobrazení členů 30 59 62 46 78 11,72 62
Zobrazení uživatelů 30 47 47 31 63 5,68 47
Editace uživatele 30 46 47 31 63 8,44 47
Upravení dat 30 92 94 78 141 13,43 94
Celkem 120 61 47 31 141 
Třetí test
Zobrazení členů 30 73 63 46 125 27,28 47
Zobrazení uživatelů 30 48 47 31 93 13,69 47
Editace uživatele 30 52 47 31 94 14,27 47
Upravení dat 30 98 94 62 156 17,16 94
Celkem 120 68 62 31 156
Graf 2

Obr. 23. Zend – průměrné časy jednotlivých akcí s eAcceleratorem.

Paměťové nároky:
Framework: 1228.24 kB
eAccelerator: 4536.32 kB
Celkem: 5764.56 kB

Zhodnocení

Ačkoli je Zend velmi populární a nabízí mnoho zajímavých možností, rychlosti přístupu do databáze bez použití eAcceleratoru jsou propastné. Podle výše uvedených skutečností potřebuje pro zobrazení dat průměrný čas kolem 1 s, a pro aktualizaci až 1,7 s. Jakmile zapneme eAccelerator, tak se jeho výkon několikanásobně zvedne a najednou se objevuje v průměrném časovém rozmezí 40–100 ms.

Příklad webu postaveného na tomto frameworku: www.vysledky.cz nebo www.shopio.cz

Nette

Jedná se o framework českého autora, který je stále ve fázi vývoje. Je dostupný na nettephp.com/cs/dow­nload ve verzi 0.7 vydané 17. července 2008.

Základní vlastnosti

  • Pro práci s databází používá knihovnu dibi, což je databázová vrstva určená pro PHP 5.
  • Prozatím neobsahuje žádné speciální moduly, kromě modulu pro autorizaci a práva.
  • Pohledy používají vlastní šablonovací systém.
  • Základní validační pravidla.
  • Našel jsem pouze helper pro (X)HTML prvky – Nette::Web::Html.
  • Konfigurace úpravou INI souborů a PHP souborů.

Dokumentace a uživatelská podpora

Jelikož framework teprve před pár měsíci oficiálně spatřil světlo světa, jeho dokumentace ještě není na takové úrovni, aby se s ním dalo efektivně pracovat. Na stránkách najdeme jen několik málo příkladů a API reference, takže se o nějaké dokumentaci skoro nedá ani mluvit. Rovněž nečekejte nějakou velkou komunitu či návody, jak co vytvořit.

Ukázka zdrojových kódů

Ukázka pohledu:

1 <h1>{$title}</h1>
2 <table border="1" cellspacing="5">
3   <tr>
4       <th>Id</th>
5       <th>Jmeno</th>
6       <th>Email</th>
7       <th>Telefon</th>
8 <th>Akce</th>
9   </tr>
10  {foreach $users as $user}
11  <tr>
12      <td>{$user->ID}</td>
13      <td>{$user->name} {$user->surname}</td>
14      <td>{$user->email}</td>
15      <td>{$user->phone}</td>
16 <td>
17 <a href="{$component->link('edit', $user->ID)}">Edit</a>
18 </td>
19  </tr>
20 {/foreach}
21 </table> 

Ukázka modelu:

1 class Members extends DibiTable
2 {
3
4   public function get_member_name($id=0)
5   {
6       $row = $this->fetch(array('id' => $id));
7       return $row->name;
8   }
9 } 

Ukázka kontroleru:

1 public function handleSave($id = 0)
2   {
3       $request = $this->request;
4       if (!$request->isPost()) return;
5
6
7
8       if ($id !== 0) {
9           $data = array(
10          'name'  => trim($request->post['name']),
11          'surname'   => trim($request->post['surname']),
12          'phone'     => trim($request->post['phone']),
13          'email'     => trim($request->post['email']));
14          $user = new Users();
15          $user->update($id, $data);
16
17      $this->redirect('default/'.$request->post['id_member']);
18 } 

Výsledky testů bez použití eAcceleratoru

U všech testů byla použita vícesouborová verze knihovny dibi.

Nette – výsledky testů bez eAcceleratoru.
Akce Vzorky Průměr [ms] Median [ms] Min [ms] Max [ms] Sm. Odch. [ms] Modus [ms]
První test
Zobrazení členů 30 80 63 47 281 42,48 62
Zobrazení uživatelů 30 66 62 46 172 26,17 62
Editace uživatele 30 81 63 46 235 49,71 62
Upravení dat 30 173 125 109 625 107,24 125
Celkem 120 100 63 46 625
Druhý test
Zobrazení členů 30 68 63 47 109 17,73 62
Zobrazení uživatelů 30 59 62 47 78 8,10 63
Editace uživatele 30 59 62 47 63 5,79 62
Upravení dat 30 124 125 109 235 26,58 125
Celkem 120 78 63 47 235
Třetí test
Zobrazení členů 30 88 63 47 562 91,13 62
Zobrazení uživatelů 30 71 62 46 281 48,85 63
Editace uživatele 30 76 63 46 281 47,66 63
Upravení dat 30 157 125 109 500 75,04 125
Celkem 120 98 63 46 562
Graf 3

Obr. 24. Nette – průměrné časy jednotlivých akcí bez eAcceleratoru.

Paměťové nároky: 2432.74 kB

Rychlosti práce s databází – Nette
Akce Průměrný čas [ms]
Výpis všech členů 2,26
Jméno člena 8,52
Všichni uživatelé člena 1,05
Načtení jednoho uživatele 0,42
Update dotaz 10,55
Celkem 4,62

Výsledky testů s použitím eAcceleratoru

Nette – výsledky testů s eAcceleratorem.
Akce Vzorky Průměr [ms] Median [ms] Min [ms] Max [ms] Sm. Odch. [ms] Modus [ms]
První test
Zobrazení členů 30 29 16 15 219 36,24 32
Zobrazení uživatelů 30 26 16 15 47 13,51 16
Editace uživatele 30 24 16 15 47 10,89 16
Upravení dat 30 75 47 31 907 154,93 47
Celkem 120 39 31 15 907
Druhý test
Zobrazení členů 30 30 16 15 187 32,34 16
Zobrazení uživatelů 30 22 16 15 47 9,68 16
Editace uživatele 30 23 16 15 47 9,72 16
Upravení dat 30 45 47 31 63 8,30 47
Celkem 120 30 31 15 187
Třetí test
Zobrazení členů 30 31 16 15 219 36,82 16
Zobrazení uživatelů 30 18 16 15 31 6,17 16
Editace uživatele 30 19 16 15 47 8,19 16
Upravení dat 30 46 47 31 172 24,27 47
Celkem 120 29 16 15 219
Graf 4

Obr. 25. Nette – průměrné časy jednotlivých akcí s eAcceleratorem.

Paměťové nároky:
Framework: 658.71 kB
eAccelerator: 1658.87 kB
Celkem: 2317.59 kB

Zhodnocení

Nette framework byl, a dá se říci, že stále je, nejočekávanějším frameworkem české PHP scény. Při práci v Nette jsem narazil na několik úskalí, kde mi chyběla dokumentace a musel jsem improvizovat a zkoušet, což zabralo dost času. Právě dokumentace je největší slabinou tohoto frameworku. Jako svou velkou výhodu uvádí Nette možnost práce s jmennými prostory (v prezentacích je uvedeno, že se jedná o první PHP framework s podporou jmenných prostorů, ale stále čeká na uvolnění PHP 5.3, ve kterém je možnost práce s namespaces). Jako další přednost uvádí používání routování, které se stará o převod URL adres. Příklad nastavení routování:

1 $router[] = new Route('<presenter>/<view>/<id>', array(
2   'presenter' => 'Members',
3   'view' => 'Show',
4   'id' => NULL,
5 )); 

Jako plus bych viděl přehledné zpracování chybových hlášení, i když v některých případech jsem měl stále problémy s nalezením oznamované chyby.Příklad webu postaveného na tomto frameworku: www.bomba.cz nebo www.oh24.cz

Čisté PHP

Pro srovnání byla naprogramována testovací aplikace také s použitím čistého PHP. Časy u verzí s eAcceleratorem i bez něj byly téměř totožné, proto zde budou uvedeny pouze testy s vypnutým eAcceleratorem.

Výsledky testů pro čisté PHP
Akce Vzorky Průměr [ms] Median [ms] Min [ms] Max [ms] Sm. Odch. [ms] Modus [ms]
První test
Zobrazení členů 30 4 0 0 16 6,91 0
Zobrazení uživatelů 30 5 0 0 16 7,58 0
Editace uživatele 30 2 0 0 16 5,74 0
Upravení dat 30 44 31 15 453 78,40 31
Celkem 120 14 0 0 453
Druhý test
Zobrazení členů 30 6 0 0 16 7,60 0
Zobrazení uživatelů 30 1 0 0 50 4,50 0
Editace uživatele 30 4 0 0 16 7,13 0
Upravení dat 30 37 16 15 484 83,25 16
Celkem 120 12 0 0 484
Třetí test
Zobrazení členů 30 6 0 0 31 8,65 0
Zobrazení uživatelů 30 1 0 0 16 4,70 0
Editace uživatele 30 4 0 0 15 6,63 0
Upravení dat 30 36 16 15 469 80,62 16
Celkem 120 12 0 0 469
Graf 5

Obr. 26. Průměrné časy zpracovávaných akcí při použití čistého PHP

Rychlosti práce s databází – čisté PHP
Akce Průměrný čas [ms]
Výpis všech členů 0,20
Jméno člena 0,20
Všichni uživatelé člena 0,38
Načtení jednoho uživatele 0,40
Update dotaz 1,41
Celkem 0,45

Zhodnocení

Čisté PHP využívá 55,57 kB paměti. Výše uvedené výsledky můžeme považovat za minimální dosažitelné na daném testovacím zařízení.

Ruby On Rails

Na závěr jsem stejnou aplikaci napsal v populárním frameworku Ruby On Rails, který ovšem není pro PHP, ale jak již název napovídá, běží pod jazykem Ruby. Pro tento srovnávací test jsem se rozhodl zejména díky stále větší popularitě tohoto programovacího jazyka, a také jsem se s ním chtěl konečně seznámit.

Ukázka zdrojových kódů

Ukázka pohledu:

1 <h1><%= @title %></h1>
2 <p style="color: green"><%= flash[:notice] %></p>
3 <table border="1" cellspacing="5">
4   <tr>
5       <th>Id</th>
6       <th>Jmeno</th>
7       <th>Email</th>
8
9       <th>Telefon</th>
10 <th>Akce</th>
11  </tr>
12
13 <% for users in @users %>
14  <tr>
15    <td><%= users.id %></td>
16    <td><%=h users.name+' '+users.surname %></td>
17    <td><%=h users.email %></td>
18    <td><%=h users.phone %></td>
19    <td><%= link_to 'Edit', '/users/edit/'+users.id.to_s %></td>
20  </tr>
21 <% end %>
22 </table> 

Ukázka kontroleru:

1 class UsersController < ApplicationController
2
3  def index
4    @users = Users.find(:all, :conditions => [ "id_member = ?", params[:id]])
5    @member_name = Members.find(params[:id]).name
6    @title = 'Uživatelé člena ' + @member_name
7    end
8
9  def edit
10    @users = Users.find(params[:id])
11    @member_name = Members.find(@users.id_member).name
12    @title = 'Editace uživatele ' + @users.name + ' ' + @users.surname
13  end
14
15  def update
16    @users = Users.find(params[:id])
17
18      if @users.update_attributes(params[:users])
19        flash[:notice] = 'Users was successfully updated.'
20        redirect_to('/users/index/'+@users.id_member.to_s)
21      else
22        render :action => "edit"
23      end
24  end
25 End 

Ukázka modelu:

1 class Users < ActiveRecord::Base 2 end

Výsledky testů pro Ruby On Rails
Akce Vzorky Průměr [ms] Median [ms] Min [ms] Max [ms] Sm. Odch. [ms] Modus [ms]
První test
Zobrazení členů 30 327 328 188 453 77,21 297
Zobrazení uživatelů 30 345 312 203 500 72,19 297
Editace uživatele 30 189 188 94 297 42,68 172
Upravení dat 30 539 546 235 906 126,69 500
Celkem 120 350 313 94 906
Druhý test
Zobrazení členů 30 331 328 203 453 80,61 297
Zobrazení uživatelů 30 380 406 296 500 65,99 406
Editace uživatele 30 187 187 78 422 66,77 187
Upravení dat 30 520 547 218 813 148,46 500
Celkem 120 355 360 78 813
Třetí test
Zobrazení členů 30 340 312 203 500 74,02 297
Zobrazení uživatelů 30 343 390 188 500 71,22 297
Editace uživatele 30 177 187 47 282 59,34 203
Upravení dat 30 539 532 297 813 132,22 532
Celkem 120 350 312 47 813
Graf 6

Obr. 27. Průměrné časy zpracovávaných akcí při použití Ruby On Rails

Zhodnocení

Programování v Ruby je jednoduché, avšak někdy mi chyběly funkce, na které jsem zvyklý z PHP. Rychlost RoR bych označil za průměrnou. Díky tomu, že je teď o Ruby obecně veliký zájem, je na internetu možno nalézt spoustu materiálů a návodů, které se hojně vyskytují i v českém znění. Tento test byl přidán opravdu jen jako letmé srovnání s jinou, poměrně novou technologií.

Příklad webu postaveného na tomto frameworku: www.shopify.com

Srovnání naměřených výsledků

V této kapitole budou, na základě výše uvedených testů, srovnány jednotlivé frameworky mezi sebou.

Srovnání rychlostí

Hodnoty uváděné v této kapitole byly dosaženy zprůměrňováním výsledků všech tří prováděných testů. Při pohledu na níže uvedený graf (obr. 28) vidíme, že výraznější problémy s rychlostí má hned několik frameworků, jejichž průměrný čas překračuje jednu vteřinu. Patří mezi ně Akelos, Fuse, Prado a překvapivě také Zend. Frameworku Fuse přitom nepomohl ani zapnutý eAccelerator. Ostatní testované frameworky si v tomto testu vedly výborně, a proto bych se pro reálnou aplikaci nebál nasazení kteréhokoliv z nich. Pro srovnání můžeme opět vidět, jak jsou na tom oproti čistému PHP či RoR.

Graf 7

Obr. 28. Celkové srovnání rychlostí jednotlivých frameworků

Při pohledu na graf je zřejmé, že v testu bez zapnutého eAcceleratoru dominuje Jelix s časem 68 ms. Ten je těsně následován frameworkem Nette, CodeIgniterem, Kohanou a Qcodem. Při zapnutí eAcceleratoru můžeme sledovat výrazné snížení časů u všech frameworků. Toto snížení je nejvíce znatelné u pomalejších frameworků. Při zapnutém eAcceleratoru se na první místo v našem rychlostním testu dostává Qcodo. O několik milisekund za ním se umisťuje CakePHP a Nette.

Průběh rychlostí v jednotlivých krocích testu

Při testování byly zaznamenávány dosažené časy v jednotlivých krocích. Díky tomu můžeme pozorovat, jak se měnila rychlost jednotlivých frameworků při připojení více uživatelů a tím způsobené hromadění některých požadavků. Zobrazená data jsou opět vypočítána jako průměr ze tří provedených měření.

Graf 8

Obr. 29. Průběh rychlostí v jednotlivých krocích – vypnutý eAccelerátor

Na uvedeném grafu můžeme zřetelně pozorovat vývojovou křivku Fuse, Zendu a Akelosu. V určitých momentech se tyto frameworky dostávají do svého maxima, které se blíží sedmi vteřinám. Po prozkoumání této abnormální odchylky bylo zjištěno, že v kritických krocích rapidně narostl čas potřebný ke zpracování a dosahoval až hodnot blížících se k 18 sekundám. To mohlo být způsobeno nějakým neidentifikova­telným zatížením počítače, na kterém běžely testované stránky, nebo se jednalo o prosté přetížení daného frameworku. Z grafu můžeme vidět, že s rostoucím počtem požadavků klesala rychlost většiny frameworků, což je pochopitelné. Největší vliv na rychlost mělo nahromadění požadavků na úpravu uživatele.

Graf 9

Obr. 30. Průběh rychlostí v jednotlivých krocích – bez pomalejších frameworků

Rozhodl jsem se znovu vložit graf, který jste mohli vidět na obr. 29 z důvodu, že pomalejší frameworky dosahovaly výrazně vyšších hodnot než jiné, a proto nebyly dostatečně vidět jejich průběhy. Pokud se podíváme na výkon ostatních frameworků zobrazený na obr. 30, vidíme, že nejhůře z tohoto výběru je na tom CakePHP. Naproti tomu ostatní se drží pod hranicí 200 ms a nevykazují žádné větší odchylky z normálu (až na několik hodnot u začátku). U CakePHP můžeme pozorovat kolísání při různém počtu požadavků. Při zkoumání příčiny výkyvů bylo zjištěno, že se ve většině případů jedná o UPDATE dotazy, které jsou slabinou každého ze zkoumaných objektů.

Na grafu níže (obr. 31) je zobrazeno porovnání rychlostí v jednotlivých krocích, tentokrát však se zapnutým eAcceleratorem (v grafu byl vynechán framework Fuse, který se pohyboval ve vysokých hodnotách a znemožňoval čitelnost zbytku grafu). Téměř pravidelné odchylky jsou způsobeny UPDATE dotazy. Ostatní data se prakticky v převážné míře načítají z cache paměti akcelerátoru, tudíž je jejich vykreslovací čas nízký. Na začátku hodnoty dosahují vyšších časů, protože ještě nejsou načteny do cache paměti.

Graf 10

Obr. 31. Průběh rychlostí v jednotlivých krocích – zapnutý eAccelerator

Srovnání paměťových nároků

Kromě rychlosti jednotlivých frameworků hraje důležitou roli také jejich paměťová náročnost. Jednotlivé paměťové nároky jsme mohli vidět v předchozích kapitolách u každého s frameworků. Zde bude uvedeno jejich vzájemné porovnání. Měření probíhalo v druhém kroku testu (více v kapitole 1.1.1).

V případě zapnutého eAcceleratoru byla výsledná velikost alokované paměti vypočítána jako součet paměti alokované frameworkem a paměti, kterou využíval samotný eAccelerator.

Jak můžeme vidět, samotné zapnutí eAcceleratoru nemá žádný podstatný negativní vliv na celkové paměťové nároky. Z grafu je vidět, že několik frameworků se dostává nad hranici 5 MB, ostatní se drží v přijatelných mezích. U CodeIgniteru, Jelixu a Kohany dokonce vidíme využití paměti jen něco okolo 1 MB. Musíme však pamatovat, že toto využití paměti je měřeno při standardní konfiguraci frameworků a nejsou zde používány žádné speciální moduly. Například při použití forge modulu v Kohaně využití paměti vzroste o několik stovek kilobajtů.

Graf 11

Obr. 32. Využití paměti u jednotlivých frameworků

Závěr

Ucelený test PHP frameworků je dosti vyhledávanou a unikátní věcí mezi PHP komunitou. Často kolují i určité mýty o tom, jak který framework vytěžuje systém a jak je rychlý. Z toho důvodu byl učiněn tento test.

Bylo vybráno několik frameworků, které jsou známé mezi PHP komunitou. Kvůli časové náročnosti, která je zapříčiněna hlavně nutností alespoň základního nastudování každého z frameworků, jich není otestováno více. V průběhu testování vycházely nové verze vybraných frameworků, či frameworky úplně nové. U testů může člověk pracující s daným frameworkem a znalý jeho detailů namítat, že některé z uvedených skutečností nejsou pravdivé. Pokud daný framework zná a pracuje s ním třeba několik let, je samozřejmé, že o něm ví více informací, než které byly zjištěny za několik týdnů testování. Informace zde uvedené jsou čerpány z krátkodobých zkušeností s danými frameworky, jejich testů, údajů nalezených na jejich oficiálních stránkách a částečně také z nejrůznějších diskusních fór.

bitcoin_skoleni

Tento test vznikl také proto, že jsme sami hledali vhodný framework pro realizaci složitější aplikace pro správu a evidenci uživatelů rozsáhlých sítí a jejich zařízení. Pro realizaci tohoto projektu jsme osobně zvolili framework Kohana. Tato volba byla uskutečněna zejména díky jeho jednoduchosti, která je vhodná pro naučení se práce s frameworkem. Také jeho vysoká rychlost, nízké paměťové nároky a přehledná dokumentace byly jedním z hlavních argumentů pro jeho zvolení. Důležité bylo, že se v Kohaně dalo bez problému realizovat kompletní zadání se všemi požadavky.

Do budoucna jistě vyjdou nové verze testovaných frameworků, které budou opravovat jejich stávající nedostatky, kterými ve většině případů není ani framework samotný, ale spíše jeho dokumentace. Příkladem toho může být v Čechách hodně diskutovaný framework Nette. Ten dosahuje slušných rychlostí, ale kvůli jeho zatím nedostatečné dokumentaci je rozsáhlejší práce s ním takřka nemožná. Nezbývá nám, než se nechat překvapit, co nového nám přinese budoucnost vývoje frameworků, či zda vývojáři nepřejdou na úplně jiné technologie, než je PHP.

Autor článku