Jump to content
Geekforum.cz
Sign in to follow this  
Hookyns

[Node.js] Jumbo - web framework

Recommended Posts

Čaute,

 

nedávno jsem se pustil do Node.js a jak už to u mě bývá, tak znovu vynalézám kolo a píšu na něj framework. :D Chci vytvořit framework, který bude umožňovat vytvoření plně dynamické responzivní stránky na pár kliknutí, neboť je to dnes IN.

 

Chci se vás zeptat, jaké máte vy zkušenosti a názory na Node.js, popř. jestli jste o něm vůbec slyšeli a víte co to je. :)

 

Dle mého je Node.js suprová a hodně výkonná věc, ale ve světě plného hotových PHP řešení těžko hledá své místo. To je důvod proč chci vytvořit takový framework, aby lidi měli důvod k Node.js přejít, aby se to vyplatilo, aby opuštění hromady hotových frameworků, CMS, aj. mělo smysl. Tak jak v ČR udělalo bum Nette (protože je české,.. češi mají rádi české věci, komunita, podpora,..), tak by mohl udělat bum i můj framework, ale to už si moc fandím. :D Každopádně je to teoreticky možné. :)

 

Tak do mě,.. Ukamenujte mě.

 

EDIT: Upravil jsem název topicku.

Share this post


Link to post
Share on other sites

NodeJS je hrozně super, ale aktuálně se na nějaké profesionální projekty nehodí. Kde se to vyplatí jsou možné velké softwarové korporace a giganti, kteří tím mohou ušetřit významné množství serverových prostředků a zrychlit/zlepšit aplikaci.

 

Nicméně tady u nás v tuzemsku ještě na příchod NodeJS nejsme připraveni. Viděl bych to až tak za 2-3 roky. Jinak pokud chceš psal jsem dříve něco na NodeJS.cz (http://nodejs.cz) tak se můžeš mrknout.

Share this post


Link to post
Share on other sites

Určo se mrknu. ;)

Můj odhad na Node.js v ČR je tak 3-5 let. Tak či tak mám dost času na to postavit pořádný český framework, který by se mohl chytit. :)

 

Jsem rád alespoň za jednoho nadšence Node.js a doufám, že se potom někdy připojíš ke komunitě frameworku, pokud ho tedy dodělám, bude za něco stát a nebude na ostudu. :D A pokud mi to tedy někdo nerozmluví. :D

Share this post


Link to post
Share on other sites

Určitě se rád připojím.

 

Ale myslím, že vyvinout třeba obdobu Expressu bude velmi složité (odkaz sem). Dále taky nevím jak moc a kde se NodeJS chceš učit. Když se podíváš v zahraničí tak těch zdrojů moc není, a když jsou tak většinou placené a to v docela vysokých částkách. Určitě jsou nějaké bezplatné zdroje, ale většinou jsou v tragickém stavu a jejich úroveň není moc na profesionální úrovni.

 

NodeJS se dnes běžně používá. I v redakčních systémech nebo složitějších aplikací. Používá ho Facebook, Google. Z Česka na něm stavěl třeba svoji aplikaci i SmartSupp. Ale to jsou jen první vlaštovky. Node aktuálně není na takové úrovni, aby mohl konkurovat PHP nebo jiným jazykům. Je to fajn věc, do budoucna určitě ano, ale dnes rozhodně ne. Možná pro střední a velké společnosti.

 

Mimo to, kdo Ti z hosterů zahostuje NodeJS? Tuším, že Rošti.cz, ale jinak nikdo. A vlastní VPS je pro začátečníka drahé.

Share this post


Link to post
Share on other sites

Jo, na hostingy jsem se díval. Našel jsem právě Roští a jeden solidní zahraniční absolutně free hosting, který na vlastní počáteční aplikace bohatě stačí. Těžko říct, jestli by komerční aplikace neporušovala pravidla, ty jsem si bohužel nečetl.

 

Ale jo, Node.js chce čas. Pomalu se to vyvíjí a až tak za ty 2 až 3 roky to bude použitelné, budou na to hostingy, aj.

 

Info čerpám z https://nodejs.org/api/, případně google no. Ale jelikož jsem IMHO zkušený JavaScripter, tak pro mě ty konstrukce nejsou nové. Nové jsou jen ty přidané věci, práce se soubory, aj.

Share this post


Link to post
Share on other sites

Framework bude MVC, možná s nějakou úpravou, protože bude dělaný na RIA, takže něco bude asi i u klienta, ale to bude záležet zase na aplikaci.

 

Chci dělat templatovací systém á la Latte, aby bylo kradení české komunity od Nette jednodušší. :D

 

Pak chci směřovat stylování na LESS. Už jsem tam udělal automatickou kompilaci LESS na CSS při spuštění serveru (+ se rovnou minifikuje), takže nikdo nic nemusí dělat, jen bude psát LESS a nemusí se starat o kompilaci, přeukládání, atd.. Samozřejmě není problém přidat třeba SASS, který se bude taky automaticky kompilovat. A kdo chce CSS, tak může psát jen CSS, je to šumák.

 

Pak se u Node.js celkem řeší stahování/posílání statických souborů. Používám pro to node-static modul, který je v configu možné vypnout, aby si člověk mohl nastavit třeba nginx a statické soubory posílat přes něj, je minimálně 2x rychlejší než řešení v Node.js.

 

Dále jsem přidal do configu možnost omezení počtu dotazů za sekundu, pokud se překročí, server bude vracet err 503 po zbytek sekundy. Společně s tím je tam "obrana" proti (D)DOS. Zase možnost nastavení počtu dotazů za sekundu, ale vzhledem k IP s tím, že pokud bude překročen, IP bude blokována po určenou dobu.

 

Samozřejmě tam mám logování, statistiku (ještě nevím co v ní všechno bude, ale už ji mám v configu :D) a cachování s tím, že cache půjde vypnout nebo logicky zapnout :D a na výběr je jestli se má cachovat do RAMky nebo na disk.

 

Pak chci apelovat na testování. Zase nastavitelné v configu, ale defaultně bude testování zapnuté. To znamená, že server při zapnutí bude hledat testovací třídu pro každou třídu v aplikaci. Pokud budou nějaké testy chybět nebo nebude vše správně, server se nezapne.

 

Pokud máte nějaké tipy či přání, klidně říkejte. :)

 

EDIT:

Do týdne bych mohl mít alespoň nějaký základ, který můžu hodit na git k nahlédnutí.

Ocenil bych, kdyby to pak nějací "návrháři" projeli a řekli svůj názor co se návrhu týká.

Share this post


Link to post
Share on other sites

Node.js se normálně používá ale díky svojí architektuře se na plno věcí nehodí, proto to není tolik rozšířený a nikdy ani nebude. Reálně se to používá třeba na microservices a obecně na nějaký ty API. Ale na klasickej web bych node nevzal, protože psaní CRUDů v event-driven prostředí je na hlavu, jelikož tam to potřeba ani není... To je možná důvod, proč vlastně neexistuje žádnej plnohodnotnej webovej framework (tedy žádnej neznám). Express je jen takový hezčí API pro nodí HTTP modul, ale nic to v podstatě neumí a rozhodně to má do webovýho frameworku daleko (neexistuje tam nic jako komponenty, formuláře, ...).

 

Využití node v CLI je asi to nejčastější, jak mluvíš o kompilování lessu, kombinování resources, jejich minifikace, či dokonce správce závislostí, tak to všechno už existuje. Dneska se používaj hlavně dva buildovací nástroje (gulp a grunt), který tohle všecko umí, resp. umí spouštět tesky, dokážou řešit jejich návaznost a existuje bžilion pluginů, co třeba řeší kompilování less, live update či minifikaci. Já osobně používám gulp jako buildovací nástroj (vše kombinuje, minifikuje, popřípadě kompiluje less/sass a taky hlídá přes live update), bower jako správce závislosti/knihoven (eg jquery, bootstrap, ...) a tohle všechno je napsaný v node.

Share this post


Link to post
Share on other sites

Na kompilaci a minifikaci LESSu používám přímo npm package od LESSu. Pak používám ještě node-static package na defaultní posílání statických souborů s tím, že v configu je to možné vypnout, aby si člověk mohl sám nakonfigurovat třeba nginx, který je na to rozhodně lepší. Zbytek věcí už si píšu sám, už jen kvůli tomu, abych se to pořádně naučil.

Včera jsem napsal třeba pěkný lazy autoloader, kvůli require hell.

 

Celkově už mám cca vytvořený základ frameworku a teď dělám na části aplikace, tzn. zpracování příchozích dotazů, načtení příslušného kontroléru a zavolání akce.

Úplně konkrétně mám teď rozepsaný Locator, taková obdoba routů v Nette, samozřejmě i s podporou subdomén, protože u Node.js to za nás nezpracuje Apache, což je dle mého výhoda, to samé URL, které si člověk může nadefinovat úplně vlastní a zase není třeba řešit .htaccess. Subdomény budou sub-aplikace/moduly, něco jako má Nette, ale bude to víc stand-alone. Bude to mít i vlastní modely s tím, že klidně bude možné využít i ty z hlavní app.

 

Sám jsem na to zvědavý co z toho vznikne. Jak si řekl, tak na to tedy asi žádný webový framework neexistuje (já jsem se tedy po žádném nedíval, tak spoléhám na tvou informaci), takže to může být taky ta příčina, proč se to na weby nepoužívá, protože aby si někdo napsal něco svého kvůli jednomu webu,.. to asi nemá cenu. Proto si myslím, že má cenu to alespoň zkusit, dát tomu šanci. Já si s tím celkem fandím, takže doufám, že se to pak uchytí. Pokud se mi to tedy povede. :D Každý chce po sobě přece zanechat nějaký odkaz ne? :)

Share this post


Link to post
Share on other sites

Vytvořil jsem repo viz https://bitbucket.or...kCZ/jumbo-node. Můžete to prolézt a kritizovat.

 

Mám zatím hotový jen nějaký základ. Zatím jsem se vůbec nedostal k modelům ani DB.

Ale presentery a templaty jsou funkční. Samozřejmě templaty mají zatím jen základní funkce jako výpis proměnné z presenteru, if/else na proměnné, bloky a includy, linky a definice ({define nazev}obsah{/define}), což je vlastně block, ale obsah se zobrazí i na místě kde byl definován. Takto vytvořený block jde pak použít pomocí {use nazev} a jde ověřit existence definice pomocí {defined nazev}lorem ipsum {use nazev}...{/defined}.

 

Pokud by to někdo zkoušel, tak jak je napsané v README v repu, tak je třeba potom nainstaloval moduly less a node-static (npm install less a npm install node-static). Pak to bude hlásit chybějící adresáře, protože je bitbucket nebere, tak je třeba je vytvořit ručně.

 

BTW jeden požadavek je zpracovaný za 20ms a méně a to se zpracovávají templaty. ;)

Share this post


Link to post
Share on other sites

Tak základ frameworku prošel větším refaktoringem a jelikož jsem si totálně dosral repo, tak jsem byl nucen vytvořit nové. Teď už si snad udržím pořádek. https://bitbucket.or...Z/jumbo-node.js

 

EDIT: A dokončil jsem linkování. FW už parsuje všechny možné URL adresy, které jsou povolené Locatorem. Zároveň jdou taky vytvořit všechny možné URL v template pomocí {link Presenter::action::parametrKteryBudeVURLOddelenyLomitkem::dalsiOddelenyLomitkem tohleUzJeQueryParametr,dalsi,5,6}

Share this post


Link to post
Share on other sites

Po delší odezvě jsem zase něco málo udělal na frameworku. :)

 

Vylepšil jsem formuláře, Locator, přidal jsem RAM cache pro templaty, podporu cookie, db, aj.

Jako testovací app v repu je teď chat se správou místností.

 

Do Jumba (btw název toho frameworku) se teď opřu, protože jsem s jedním člověkem dohodnutý, že mu na tom postavím e-shop.

Samozřejmě jsem ho obeznámil s tím, co je Node.js zač a nabídl jsem mu za to podstatnou slevu, protože to budu brát i jako vlastní projekt.

 

Tím pádem vlastně i zvýším potencionální zájem o Node.js - konkrétně o Jumba - protože už bude existovat i CMS a eshop systém, takže už by to mohlo mít i nějaké využití.

 

Jinak s přidanou cache je jeden dotaz zpracovaný za cca 4ms v průměru. ;)

Share this post


Link to post
Share on other sites

Zase pár úprav. :)

 

Jelikož už na tom frameworku něco stavím, tak budou úpravy asi častější a jak v tomto případě, budou to praktické věci.

 

Přidal jsem možnost live editace kódu. Na node.js je na prd, že když člověk něco upraví, musí restartovat aplikaci, aby se změny projevily. Dvakrát tak otravné to je, když člověk kóduje šablonu. Pro každý pixel restartovat aplikaci,.. To je prostě na prd.

Já jsem Jumba upravil tak, aby si hlídal změny v souborech a mazal require.cache z Node.js - případ úpravy JS kódu - presentery, modely aj.

Do Jumbovi template cache jsem přidal detekci no-cache požadavku (ctrl+F5 na stránce), takže při změně template stačí na webu dát ctrl+F5 a aktualizuje se template cache.

Další věc je LESS. Jumbo primárně podporuje stylování v LESS, které automaticky při startu kompiloval na CSS. Zde byl problém při stylování template. Člověk upraví LESS, ale musí restartovat aplikaci, aby se LESS zkompiloval. Tomu je už konec. Přidal jsem i detekci změn u .less souborů, které se po změně automaticky zkompilují.

 

Další věc byla úprava u posílání statických souborů. Aby se zrychlila odpověď serveru, jestli soubor existuje nebo ne, jestli má požadavek zpracovávat node-static nebo normálně server, tak byl v Jumbovi při startu vytvářen seznam statických souboru na jehož základě se poté rozhodovalo, jestli bude požadavek zpracovávat node-static nebo Jumbo. Pokud jsem však do složky public přidal obrázek až po startu serveru, tak nebyl v seznamu a požadavek šel na Jumba, který však pod adresou nic nenašel. Takže opět byla přidána detekce změn na složku public a každý nově přidaný soubor se přidá i do seznamu statických souborů.

 

 

A jedna z hlavních věcí co jsem potřeboval na projekt bylo zprovoznění modulů/sub-applikací. Tak jak Nette podporuje moduly, tak má jumbo sub-apps. Jenže Nette to bere z url domena.tld/modul/presenter/akce a Jumbo je frajer, protože si s URL může dělat co chce, tak podporuje sub-app.domena.tld/presenter/akce.

 

 

Shrnuto.

Lze vytvářet sub-apps - můžu mít normálně web a na subdoméně např. admin můžu mít CMS.

Lze editovat kódy LIVE - automatická live kompilace LESS souborů za běru, ctrl+F5 pro reload template cache, mazání require.cache při změně JS.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...