Ahoj lidi, v tomto článku porovnáme Node.js versus Ruby on Rails pro vývoj webových aplikací. Tento článek jsem napsal hlavně proto, že se našeho týmu neustále někdo ptá, který jazyk nebo který framework je nejlepší se naučit. Každopádně nikdy nedáváme jednoduchou odpověď, protože nejsou jednoznačné. Takže si myslím, že další nejlepší věc je podívat se na všechna fakta a statistiky. Podíváme se na některé výhody a některé nevýhody Node.js i Ruby on Rails pro technologie na straně serveru. Než začneme, rád bych uvedl několik bodů. Už slyšíme kritiky, jak chcete srovnávat Node.js, který je runtime, s Ruby on Rails, což je framework? Chápu tento argument, ale to, co budu porovnávat, jsou dvě technologie na straně serveru a webové zásobníky. Nyní si ujasníme, co je lepší se právě teď naučit a co je lepší implementovat pro firmu. Neříkám, abyste porovnávali rovnou vlastnosti Ruby on Rails a Node.js, jestli je pro vás lepší nahradit Node.js něčím jako Express nebo jiným frameworkem založeným na Node. Každopádně porovnáváme backendové struktury a stacky, ne jednotlivé technologie. Náš tým pracoval s oběma technologiemi a někteří z nás mají rádi obě technologie. Nepropaguji jednu nad druhou. Je také důležité pochopit, že co funguje pro nás, nemusí fungovat pro vás a naopak. Také byste si měli uvědomit, že mozek každého z nás je jiný. Na tuto otázku neexistuje žádná šablonovitá odpověď.
Pokračujme a začněme tím, že se podíváme na některé podobnosti mezi oběma technologiemi.
- Oblíbené technologie na straně serveru.
- Dost snadno se učí.
- Vysoký výkon.
- Používají je špičkové webové stránky/aplikace.
- Silná komunita.
- Podobná struktura založená na MVC.
- Rychlý vývoj.
Node.js i Rails jsou uznávané a oblíbené technologie na straně serveru, které umí mnoho různých věcí. Mohou pracovat s mnoha různými stacky a databázemi atd. Obě se dají poměrně snadno naučit. Node používá JavaScript a Rails používá Ruby. Ale Ruby a JavaScript je snazší se naučit než něco jako Java, C# nebo některé z těch vyšších jazyků. Oba jazyky jsou docela shovívavé a existuje spousta zdrojů, jak se je naučit. Node.js a Ruby on Rails jsou opravdu výkonné a o úrovni výkonu ještě budeme mluvit. Existuje mnoho příkladů populárních webových stránek, které využívají obě technologie. Node i Rails mají velmi silné a názorově vyhraněné komunity.
Rails je na světě o něco déle a má více pamětníků. Ale Node je každým dnem populárnější. Nyní je navržen vzor MVC neboli Model-View-Controller. A Ruby on Rails má MVC natvrdo. Máte složku pro své modely, kontroléry a pohledy. MVC je možné s některými frameworky v Node, jako je Express. Express je však ve své struktuře mnohem flexibilnější než Rails. Můžete prostě převzít určité aspekty MVC. Není to jediná možná struktura. Node a Rails se používají pro rychlý vývoj a prototypování. Rails má úžasnou funkci skládání a Express má také generátory a nástroje příkazového řádku.
Výhody Rails
- Konzistentní struktura.
- Velmi názorově vyhraněný.
- Migrace databází.
- Rychlost vývoje.
- Ruby je skvělý jazyk.
- Ruby gems.
- Vyzrálost a respektovaná komunita.
Nejprve se podíváme na výhody Ruby on Rails a poté na nevýhody. Jak jsem již řekl, Rails má velmi silnou strukturu MVC. Většina aplikací Rails bude vypadat velmi podobně, pokud jde o základní soubory a složky. Máte tento silný základ a pak na něm stavíte pomocí drahokamů a vlastních balíčků a knihoven. Kromě toho je Rails velmi názorově vyhraněný, což znamená, že vás nutí dodržovat jeho způsob provádění věcí. Rails předpokládá, že budete psát kód určitým způsobem, a někteří lidé mohou říct, že je to trochu omezující. Díky tomu je ale kód jednodušší, mnohem čistší a je také těžší vytvářet chyby a problémy. Není to omezující v tom smyslu, že byste nemohli vytvořit to, co chcete, ale jen způsob, jakým se k tomu dostanete. Pokud to uděláte správně, bude to s největší pravděpodobností ta nejjednodušší cesta.
Rails má také opravdu dobrou funkci pro migraci databází. Umožňují nám dělat takové věci, jako je vytváření a úprava tabulek a sloupců v databázi, aniž bychom museli ručně vstupovat do databáze a něco přidávat nebo měnit. Také vám poskytne pěkný malý protokol nebo cestu, kterou můžete sledovat, abyste přesně viděli, co bylo provedeno se strukturou vaší databáze.
Nyní k Node. Existují některé balíčky nebo moduly pro migraci, například DB-migrate, které mohou fungovat opravdu dobře, ale nejsou tak hluboké a snadno použitelné jako migrační systém Rails chord. Pokud jde o prototypování a rychlý vývoj, není příliš mnoho technologií, které by Rails překonaly. Takže s několika základními konfiguracemi a několika lešenářskými příkazy máte k dispozici plně funkční CRUD aplikaci. K této rychlosti se přidávají i migrace databází. Node.js a Express jsou na tom s rychlým vývojem poměrně dobře, pokud používáte nástroje a moduly třetích stran. Ale Rails má všechny tyto věci hned po vybalení z krabice.
Je zde několik kladů a záporů jazyka Ruby, ale většinou je dobře respektován a je velmi čistý. Ruby je multiparadigmatický jazyk, můžete v něm dělat procedurální funkční kód, ale z větší části je objektově orientovaný. Na všechno se dá dívat jako na objekt. RubyGems je správce balíčků pro Ruby on Rails a používá se k rozšíření základní funkčnosti frameworku. Je podobný jako npm pro Node.js. Všechny aplikace Rails mají soubor gem, ve kterém můžete zadat své gemy. Pak můžete spustit příkaz bundler a nainstalovat je všechny, podobně jako npm install u Node.js.
Další skvělou věcí na Ruby on Rails je, že je tu už nějakou dobu a má velmi respektovanou a inteligentní komunitu. Vývojáři udržující Ruby on Rails jsou nesmírně chytří a velmi zapálení pro tento framework. K dispozici je spousta zdrojů o jádru frameworku včetně fór, příspěvků na blogu a dokumentace, které vám pomohou, pokud se zaseknete. To jsou některé z velkých výhod frameworku Ruby on Rails.
Nevýhody frameworku Ruby on Rails
- Výkon
- Příliš jednoduchý
- Popularita
- Nedostatek dokumentace
Pojďme si říct něco o některých nevýhodách. Mezi největší stížnosti, které jsme slyšeli na Ruby on Rails, patří to, že je relativně pomalý. Rails je velký framework se spoustou funkcí v jádře. Stejně jako u některých lehčích frameworků je třeba vzít v úvahu také faktor závislostí gemů a aplikačních souborů. Je zde tolik automatizace a lešení, že se toho vývojář o fungování frameworku Rails příliš nenaučí. Může vědět něco o jazyce Ruby, o syntaxi nebo struktuře své aplikace, ale pro někoho, kdo opravdu rozumí tomu, jak Rails funguje, je to skvělé díky rychlému vývoji. Na druhou stranu, někteří z vývojářů si musí dát opravdu záležet, aby určitým věcem opravdu porozuměli. Rails je také mnohem náročnější pro velké projekty než pro malé aplikace. Může mít také určité problémy se škálováním.
Další nevýhodou je, že Rails není tak populární jako Node.js. V současné době je Node.js na špici webového vývoje a nadšení pro Rails opravdu opadlo. Podle našeho názoru, pokud hledáte práci, rozhodně bychom řekli, že se naučíte Node a pravděpodobně i Express. Vývojáře JS najímá více firem než kterýkoli jiný jazyk. Kdyby to bylo před pěti lety, Rails nebo Ruby by patřily mezi tři nejlepší jazyky, které se musíte naučit. Ale v dnešní době prostě není tak populární. Proto jsem se dříve krátce zmínil, že jádro frameworku Rails má opravdu dobrou dokumentaci a příklady, které vám umožní naučit se jednoduché příkazy scaffoldingu a migraci databází. To je všechno v pořádku. Když se však snažíte naučit pokročilejší programování a snažíte se dozvědět něco o konkrétních drahokamech, někdy vám to připadá jako hledání Newtonovy jehly v kupce sena.
Několik docela velkých jmen používalo nebo používá Ruby on Rails ve své platformě. Nemyslím si, že můžete být o moc větší než Twitter. Také oni přesunuli spoustu svých backendových služeb do Scaly a Javy kvůli některým problémům se škálováním. Ale Rails používali dlouho a jsem si docela jistý, že ho stále používají v jiných aspektech své platformy, například v partnerství se společností Shopify. Navíc Basecamp, což je řešení pro správu projektů, uvedl, že Rails je srdcem a duší jejich projektu. Software, na kterém běží GitHub, byl postaven na Rails. Soundcloud a Hulu, což je populární streamovací služba, byly postaveny na Rails. Groupon a LivingSocial, SlideShare a Urban Dictionary od počátku používají Rails ve svém vývojemtnu.
Výhody Node.js
- Mimořádně populární.
- Vysoký výkon.
- Asynchronní.
- Velmi škálovatelný.
- JavaScriptový front a backend.
- Pružná struktura souborů.
- npm a moduly.
Když jsme se podívali na Rails, začneme se zabývat Node.js. Začneme výhodami. Jedním z obrovských kladů Node.js je jeho mimořádná popularita. Je to v podstatě nová nejmodernější technologie ve vývoji webových stránek. Na trhu je po ní velmi vysoká poptávka. Je nesmírně populární pro začínající podniky. Kolem Node a frameworku Express existuje prosperující open-source komunita. Existuje mnoho dobře vyvinutých modulů na npm, a pokud jde o rychlost a výkon, Node sráží Rails přímo na kolena. Vlastně v podstatě překonává cokoli. Běží na enginu Google JavaScript, který je bleskově rychlý. Node se používá k vytváření webových aplikací v reálném čase, které se téměř podobají desktopovým aplikacím.
Dále je Node.js také asynchronní. To znamená, že když program odešle požadavek na server, nemusí čekat na odpověď. Může pokračovat ve vykonávání. Node běží v jednom vlákně na rozdíl od jiných jazyků, které požadavek odesílají. Ty čekají, až bude tento požadavek vyřízen, pak odešlou další a tak dále. Node.js je tedy také velmi škálovatelný a to, že běží na jednom vlákně, v tom hraje velkou roli. Node také velmi dobře spolupracuje s databázemi NoSQL, jako je MongoDB, která je mnohem škálovatelnější než tradiční relační databáze jako MySQL. Téměř všechny velké společnosti, o kterých jsem četl, přešly na Node.js a hlásí přinejmenším slušný nárůst produktivity.
Další velkou výhodou Node je, že používá JavaScript, který je široce používán u mnoha webových stohů. Mnohokrát se jazyk na front-endu liší od jazyka na backendu, ale to není případ použití Node.js. JavaScript používáme na front-endu i backendu. Existuje spousta frameworků na straně klienta, které v tomto odvětví dominují – React, Angular, Vue.js. Takže to je pro Node.js obrovské plus. JavaScript samozřejmě také dobře pracuje s rozhraním JSON API, které je velmi populární.
Node.js, Express nebo Happy.js, kterýkoli z těchto frameworků má opravdu flexibilní strukturu souborů. Umožňují vám konstruovat aplikace podle vašich představ. Vše můžete vtěsnat do jediného souboru JS aplikace. Pokud byste chtěli mít spíše tradiční strukturu MVC, myslím, že to má své dobré i špatné stránky. Ale většinou, pokud víte, co děláte, a jste dobrý programátor, pak je flexibilita dobrá věc. Stejně jako gemy Ruby má i Node svého vlastního správce balíčků s názvem npm neboli Node package manager. Největší rozdíl mezi npm a Ruby gems je ve způsobu správy závislostí. V případě Ruby se závislosti instalují globálně. Takže musíte použít balíčkovací program a musíte je tak nějak spravovat sami. npm se o to všechno pro vaše moduly vlastně postará. Umístí je do složky Node modules. Tyto moduly pak mohou mít také vlastní složku Node modules s vlastními závislostmi. npm modules také zřejmě mají lepší dokumentaci, alespoň podle mých zkušeností.
Node.js Nevýhody
- Není vhodný pro úlohy náročné na procesor.
- Nekonzistence.
- Novější technologie.
- Peklo zpětných vazeb.
- Příliš modulární.
Takže jsme se podívali na pozitiva a výhody Node.js. Nyní se podíváme na některé nevýhody. Jakkoli je Node dobrý pro mnoho aplikací ve stylu CRUD, je naprosto na nic pro aplikace, které jsou náročné na procesor. Důvodem je to, že kdykoli dělá něco, co chvíli trvá, například operace CPU, zařadí všechny příchozí požadavky do fronty, protože běží na jednom vlákně. Něco jako Apache, který má k dispozici více vláken, mezi ně tento čas procesoru rozdělí. A pouze operace IO jsou paralelní, protože se provádějí asynchronně. Příkladem úlohy náročné na CPU je něco jako 3D vykreslování, kódování videa, vědecké modelování atd.
Další stížnost na Node je, že může být trochu nekonzistentní. Někteří mají pocit, že se API neustále mění v častých intervalech. Někdy není příliš zpětně kompatibilní. Nejen to, ale struktura aplikace Express je obecně velmi volná a flexibilní. Někdy to může dát vývojářům dostatek provazu, aby se mohli oběsit.
Rails je velmi přísný, takže je těžší napsat špatný kód. Protože je Node asynchronní, budete mít co do činění se spoustou zpětných volání funkcí a ty často mohou probublat a dostat se do takzvaného callback pekla. Existují na to řešení, například asynchronní nástroje a používání slibů. Existuje několik věcí, které můžete udělat, abyste tomu zabránili. Mně osobně to nevadí, ale vím, že někteří vývojáři, kteří nejsou zvyklí na asynchronní programování, mají s množstvím zpětných volání problém.
Jak vidíte, obě tyto možnosti backendu mají svá pro a proti, ale obě jsou to fantastické technologie. Vše by se mělo vždy posuzovat případ od případu, a ne jen říkat, že jedna je lepší než druhá ve všech situacích.