29.4.2014

Před Vánoci jsem se dostal k zajímavému projektu s ještě zajímavějším problémem. SvětBot, česká jednička mezi eshopy s obuví, který od nuly vybudoval můj kamarád a bývalý spolužák Honza Kalianko, se potýkal s vysokou návštěvností. Honzu samozřejmě těšila stoupající popularita jeho eshopu, jenže server šel často ve špičkách do kolen a i při běžném provozu se web načítal jenom velmi pomalu.

Po krátké analýze bylo jasné, že problém je v architektuře celého systému. Web byl postavený na vlastním frameworku programátora, který už z projektu vystoupil, chyběla dokumentace, načtení stránky často znamenalo tisíce dotazů do databáze. S Honzou jsme se poměrně rychle shodli na potřebě přepsat celý eshop do nějakého robustního frameworku, který uleví serveru a usnadní další rozvoj. Níže se pokusím popsat jak jsem nový framework vybíral.

Komunita

Frameworky sice tvoří jejich autoři, ale užitečné nástroje z nich dělá až silná komunita. Můžete mít sebelepší framework, ale stejně nakonec narazíte na problémy, které budete muset řešit. Pokud jste první kdo na problém narazil, Google nic neporadí a vy můžete tak akorát založit nový topic na support fóru, napsat autorovi a pak čekat možná i několik dní, než se někdo bude problémem zabývat.

Za druhé pokud framework používá málo lidí je tu vždy zvýšené riziko, že to autora/autory přestane bavit a ukončí vývoj ve kterém pak už nebude nikdo pokračovat. Pokud za projektem stojí silná komunita autoři mají mnohem větší motivaci pokračovat a v krajním případě ukončení vývoje je mnohem pravděpodobnější, že se vývoje ujme někdo další.

Tím nechci říct, aby jste zanevřeli na nové začínající projekty, každý jednou někde začínal. Nestavte na nich ale velké projekty, které budete chtít ještě několik let udržovat a dále rozvíjet. Riziko je příliš velké.

Dokumentace

Část programátorů razí názor, že nejlepší dokumentací je dobře napsaný kód. Jenže to většinou není pravda, ano dobře napsaný kód je nejpřesnější dokumentací, ale pokud chci vědět co mi nějaká metoda vrací, nehodlám kvůli tomu luštit IFy v ní obsažené, od toho máme dokumentaci. Studování kódu je až nouzová varianta, která nám pomůže ve chvíli kdy potřebujeme přesně znát co zavolání metody udělá, nebo jaké to bude mít výkonové dopady.

Rychlost

Hlavním pohnutkem k přepsání celého eshopu byly právě problémy s výkonem, takže bylo žádoucí hned na začátku vyřadit frameworky, které by nám v tomto směru příliš nepomáhali. Na rozdíl od předchozích dvou parametrů pro posouzení výkonu potřebujete tvrdá data. Na internetu najdete spoustu benchmarků od nezávisle se tvářících subjektů i od autorů frameworků samotných. U těch druhých je jasné, že vždy vyhraje ten „správný“, ale pořadí na druhém a další místě už má solidní vypovídací hodnotu a alespoň vidíte jak si stojí konkurenti v testovaném use-case.

Určitě by bylo špatně tady hledat jednoho favorita, který je nejrychlejší. Benchmarky obvykle testují jednoduché situace, které se v reálném webu nevyskytují. Pokud jich ale projdeme více, je zřejmé že některé frameworky se do top 5 dostávají výrazně častěji než jiné.

Cachování

Dobré cachování méně často se měnících bloků, nebo dokonce celých stránek dokáže severu výrazně ulevit a zrychlit načítání stránek o stovky procent. Eshop je ideální pro cachování všeho co jde, velké množství návštěvníků po stránkách jenom tak brouzdá, bez příhlášení, nebo produktů v košíku a tedy bez potřeby customizace obsahu webu.

Dobrý framework by měl umět cachovat jak celé stránky, což je vhodné primárně pro nepřihlášené uživatele, tak pouze bloky webu, které se nemění.

Přívětivost frameworku

Zcela subjektivní kritérium, které je odvozené od stylu jakým je programátor zvyklý psát kód. Zkuste si projít Hello word a nějaký složitější příklad a pokud Vám styl frameworku nesedne, velmi pravděpodobně to není ten pravý pro Vás. Na druhou stranu, pokud jinak framework vyhovuje, člověk si zvykne na ledacos.

Zpětná kompatibilita

Podívejte se jak často autoři rozbíjejí zpětnou kompatibilitu. Čas od času k potřebě výraznějšího překopání části API dospěje každý framework, nicméně pokud zjistíte nekompatibilitu i mezi minor verzemi, pravděpodobně jste narazili na komunitní bastl a čekají Vás dlouhé hodiny při migrování na každou novou verzi frameworku.

Reference

Tady mohu doporučit jediné: naslouchejte, ale nenechte se strhnout proudem, to že všichni používají Nette, jej ještě nepasuje do role jediného a optimálního řešení pro Váš zcela jedinečný projekt!

Kromě výše uvedeného to chce i šťastnou ruku 😉

Vladislav Skoumal
SKOUMAL CEO