Stačí PHP na dnešní aplikace? NE.
Posted on: Neděle, Říj 2, 2011
Vzpomínáte, kdy jste naposledy v PHP napsali jednoduchý standalone skript? Já ne. Pominu-li index.php, který volá bootstrap aplikace, začínají všechny soubory v mých projektech klíčovým slovem class, ty novější řeší na prvních řádcích namespaces. (Pozn. pro rýpaly: komentáře neinterpretuju.) Poslední dobou ale zároveň řeším to, že musím mít testy, abych odhalil jednoduché chyby, které v ostatních jazycích kontroluje překladač a říká se tomu typová kontrola. A především pak to, že když se aplikace v PHP napíše pořádně, je tak trochu líná a pomalá.
Internetem nedávno proběhla taková malá série flame o PHP dirigovaná Jakubem Vránou. Už tam jsem začal přemýšlet o tom, jestli to PHP nepoužíváme trochu zvrhle a pokud tento tweet nelže, vyjádřil se v tom smyslu na letoším Webexpo také tvůrce PHP.
Nedělám sice Facebook, abych musel řešit výkon do velkých detailů, ale poslední dobou jsem taková PHP Popelka. Vždycky někdo přiletí a na disk mi nasype nějaký PHP humus, který je pomalý a je fakt potřeba s tím něco udělat (čti loadtime na localhostu v rozmezí 80-360 sekund). A ve všech případech za tím vždy bylo to, že programátor něco okoukal ze světa kompilovaných a volně to přepsal do PHP. Jenže si neuvědomil třeba to, že v PHP data s každým requestem nejen vznikají, ale taky umírají.
Chceme mít čistý čistší ne tak ošklivý kód, a proto navrhujeme vrstvy, používáme ORM a vůbec nemyslíme na to, že už ten koncept samotný je v PHP vlastně zvrhlý. Pak slavnostně na (skoro) všechno zavedeme APC cache nebo Memcached, aby bylo vidět, že jsme něco udělali pro výkon a jede se dál, ohackovali jsme to, naše milované PHP vyřešilo další task.
Kdysi jsem si dělal takový malý benchmark frameworků pro PHP, ve kterém mi vyšlo, že nette s promazanou template cache vyrobí welcome page asi za 120ms. U Zend Framework to bylo kolem 200ms. Zkusil jsem si teď něco podobného udělat u Symfony2, které podle dokumentace vypadalo, že myslí na výkon a má fakt pěkné API. 14781ms, 64MB trace, 15kB v cache. Vždycky jsem testoval tak, že jsem vypnul framework-specific debuggery a měřil opakovaně pomocí xdebug_start_trace.
A teď co s tím? Bez těch frameworků to moc nejde a člověku se nechce ani vzdát se ORM. Učit se nový jazyk může být trochu overhead. Jasně, Facebook si napsal PHPHipHop, hurá vyřešeno. Tedy když používáte MySQL a máte tu kliku, že váš framework neobsahuje použití funkce eval. Škrtněte si ZF, Symfony, nette a pro jistotu z řady ORM nástrojů taky Doctrine. Zbylo nám alespoň NotORM, které ale není ORM :-).
Když aplikace nerenderuje jen welcome page, ale dělá něco reálného na základě dat z DB a trochu si zaroutuje, rázem je z toho na silném dedikovaném serveru (DB a Apache zvlášť, ZF, Doctrine) kolem 600ms. O tom už uživatel webu začíná vědět. Přitom u spaghetti code aplikace se obvykle vejdeme do 100ms i na sdíleném hostingu.
“Stačí PHP na dnešní aplikace? NE.”
- Tags: Doctrine, nette, PHP, Symfony, výkon, Zend Framework
- No Comments
Latest Comments