Srácok, ebben a cikkben a Node.js-t és a Ruby on Rails-t fogjuk összehasonlítani a webfejlesztéshez. Ezt a cikket elsősorban azért írtam, mert a csapatunkat folyamatosan kérdezik, hogy melyik nyelvet vagy melyik keretrendszert érdemes megtanulni. Egyébként sosem adunk egyszerű választ, mert nem egyértelműek a válaszok. Ezért azt hiszem, a következő legjobb, ha megnézzük az összes tényt és statisztikát. Megnézzük mind a Node.js, mind a Ruby on Rails néhány előnyét és néhány hátrányát a szerveroldali technológiák közül. Mielőtt elkezdenénk, szeretnék néhány dolgot tisztázni. Már halljuk is a kritikusokat, hogy hogyan fogjuk összehasonlítani a Node.js-t, ami egy futtatási idő, és a Ruby on Rails-t, ami egy keretrendszer? Értem az érvet, de amit én össze fogok hasonlítani, az a két szerveroldali technológia és webes stack. Most pedig tisztázzuk, hogy mit érdemes most azonnal megtanulni, és mit érdemes megvalósítani egy vállalkozás számára. Nem azt mondom, hogy egyenesen a Ruby on Rails és a Node.js jellemzőit hasonlítsuk össze, ha ettől jobban érzi magát, ha a Node.js-t valami olyasmivel helyettesíti, mint az Express vagy más Node-alapú keretrendszerek. Egyébként is, a backend struktúrákat és stackeket hasonlítjuk össze, nem az egyes technológiákat. A mi csapatunk mindkét technológiával dolgozott már, és néhányan közülünk mindkét technológiát kedvelik. Nem támogatom egyiket sem a másikkal szemben. Azt is fontos megérteni, hogy ami nekünk bevált, nem biztos, hogy neked is beválik, és fordítva. Azt sem szabad elfelejteni, hogy mindenkinek más az agya. Erre a kérdésre nincs sütire szabott válasz.
Lássunk hozzá, és nézzünk meg néhány hasonlóságot a két technológia között.
- Népszerű szerveroldali technológiák.
- Meglehetősen könnyen tanulható.
- Nagy teljesítmény.
- Top weboldalak/alkalmazások által használt.
- Erős közösség.
- Hasonló MVC alapú struktúra.
- Gyors fejlesztés.
A Node.js és a Rails is elismert és népszerű szerveroldali technológiák, amelyek sok mindenre képesek. Sokféle stackkel és adatbázissal stb. tudnak együttműködni. Mindkettő viszonylag könnyen megtanulható. A Node JavaScriptet, a Rails pedig Rubyt használ. A Ruby és a JavaScript azonban könnyebben tanulható, mint például a Java, a C# vagy más magasabb szintű nyelvek. Mindkettő elég elnéző nyelv, és rengeteg forrás áll rendelkezésre a tanulásukhoz. A Node.js és a Ruby on Rails nagyon jól teljesít, és beszélni fogunk a teljesítményszintről. Sok példa van népszerű weboldalakra, amelyek mindkét technológiát használják. A Node és a Rails nagyon erős és véleményes közösségekkel rendelkezik.
A Rails már egy kicsit régebb óta létezik, és több a régi motoros. De a Node napról napra népszerűbb. Most az MVC vagy Model-View-Controller egy tervezett minta. A Ruby on Rails pedig kemény MVC-vel rendelkezik. Van egy mappád a modelleknek, a vezérlőknek és a nézeteknek. Az MVC lehetséges bizonyos keretrendszerekkel a Node-ban, mint például az Express. Az Express azonban sokkal rugalmasabb felépítésű, mint a Rails. Csak bizonyos aspektusait veheted az MVC-nek. Nem ez az egyetlen lehetséges struktúra. A Node és a Rails gyors fejlesztésre és prototípusok készítésére szolgál. A Railsnek van egy fantasztikus hajtogatási funkciója, az Express pedig generátorokkal és parancssori eszközökkel is rendelkezik.
Rails előnyei
- Konzisztens struktúra.
- Nagyon véleményes.
- Adatbázis migrációk.
- A fejlesztés sebessége.
- A Ruby egy nagyszerű nyelv.
- Ruby gems.
- Érettség és elismert közösség.
Először is megnézzük a Ruby on Rails előnyeit, majd a hátrányait. Mint említettem, a Rails nagyon erős MVC struktúrával rendelkezik. A legtöbb Rails alkalmazás nagyon hasonlóan fog kinézni az alapvető fájlok és mappák tekintetében. Megvan ez az erős alap, majd erre építhetünk drágakövekkel, egyéni csomagokkal és könyvtárakkal. Ráadásul a Rails nagyon véleményvezérelt, ami azt jelenti, hogy arra kényszerít, hogy ragaszkodj a saját módszeréhez. A Rails feltételezi, hogy egy bizonyos módon fogsz kódot írni, és néhányan azt mondhatják, hogy ez egy kicsit korlátozó. De ez könnyebbé, sokkal tisztábbá teszi a kódot, és nehezebbé teszi a hibák és problémák létrehozását is. Nem abban az értelemben korlátozó, hogy nem hozhatod létre azt, amit szeretnél, hanem csak a mód, ahogyan eljutsz oda. Ha helyesen csinálod, akkor valószínűleg az lesz a legegyszerűbb út.
A Railsnek van egy nagyon jó adatbázis-migrációs funkciója is. Lehetővé teszik számunkra, hogy olyan dolgokat tegyünk, mint például táblák és oszlopok létrehozása és szerkesztése az adatbázisunkban anélkül, hogy kézzel kellene bemennünk és hozzáadnunk vagy megváltoztatnunk dolgokat. Emellett egy szép kis naplót vagy útvonalat is ad, amelyet követve pontosan láthatjuk, hogy mit csináltunk az adatbázisunk szerkezetével.
Most a Node. Van néhány csomag vagy modul a migrációhoz, mint például a DB-migrate, amely nagyon jól tud működni, de nem olyan mélyreható és könnyen használható, mint a Rails akkord migrációs rendszere. Ha prototípus készítésről és gyors fejlesztésről van szó, nem túl sok olyan technológia van, ami meg tudja verni a Rails-t. Tehát néhány alapvető konfigurációval és néhány állványparanccsal máris van egy teljesen működő CRUD-alkalmazásod. Az adatbázis-migrációk hozzáadódnak ehhez a sebességhez. A Node.js és az Express meglehetősen jó a gyors fejlesztéshez, ha harmadik féltől származó eszközöket és modulokat használsz. De a Railsben mindezek a dolgok már a dobozból is megvannak.
A Ruby nyelvnek vannak előnyei és hátrányai, de a legtöbbször jól megbecsült és nagyon tiszta. A Ruby egy többparadigmás nyelv, lehet procedurális kódot funkcionális, de a legtöbbször objektumorientált. Mindent objektumként lehet tekinteni. A RubyGems a Ruby on Rails csomagkezelője, és a keretrendszer alapvető funkcionalitásának bővítésére szolgál. Hasonló az npm-hez a Node.js esetében. Minden Rails alkalmazásnak van egy gem fájlja, ahol meg lehet adni a gemeket. Ezután egy bundler parancsot futtathatsz az összes telepítéséhez, hasonlóan az npm install-hoz a Node.js esetében.
A Ruby on Rails másik nagyszerű tulajdonsága, hogy már jó ideje létezik, és nagyon elismert és intelligens közösséggel rendelkezik. A Ruby on Rails-t karbantartó fejlesztők rendkívül okosak és nagyon szenvedélyesek a keretrendszer iránt. Rengeteg forrás áll rendelkezésre az alapvető keretrendszerrel kapcsolatban, beleértve a fórumokat, blogbejegyzéseket és dokumentációt, amelyek segítenek, ha elakadnál. Ezek a Ruby on Rails néhány nagy előnye.
Rails hátrányai
- Teljesítmény
- Túl egyszerű
- Népszerűség
- Dokumentáció hiánya
Beszéljünk néhány hátrányról. Az egyik legnagyobb panasz, amit a Ruby on Rails-szel kapcsolatban hallottunk, hogy viszonylag lassú. A Rails egy nagy keretrendszer, rengeteg funkcióval a magjában. A könnyebb keretrendszerek némelyikéhez hasonlóan a gem- és alkalmazásfájl-függőségeket is figyelembe kell venni. Annyi automatizálás és állványzat van, hogy a fejlesztő nem nagyon tanulja meg, hogyan működik a Rails keretrendszer. Lehet, hogy tud a Ruby nyelvről, a szintaxisról vagy az alkalmazásuk felépítéséről, de annak, aki tényleg érti, hogyan működik a Rails, ez a gyors fejlesztés miatt nagyszerű. Másrészt néhány fejlesztőnek tényleg extra mérföldet kell megtennie, hogy valóban megértsen bizonyos dolgokat. A Rails emellett sokkal nehezebb a nagy projektekhez, mint a kis alkalmazásokhoz. A skálázódással is lehetnek problémái.
A másik hátránya tehát, hogy a Rails nem olyan népszerű, mint a Node.js. Jelenleg a Node.js van a webfejlesztés élvonalában, és a Rails iránti izgalom nagyon lecsökkent. Véleményünk szerint, ha munkát keresel, mindenképpen azt mondanánk, hogy tanulj Node-ot és valószínűleg Express-t. Több cég vesz fel JS fejlesztőket, mint bármely más nyelven. Ha ez öt évvel ezelőtt lett volna, a Rails vagy a Ruby lenne a három legjobban megtanulandó nyelv között. De manapság már nem olyan népszerű. Ezért korábban röviden említettem, hogy az alapvető Rails keretrendszer nagyon jó dokumentációval és példákkal rendelkezik, amelyek lehetővé teszik az egyszerű scaffolding parancsok és az adatbázis-migráció megtanulását. Ez mind rendben van. Amikor azonban haladóbb programozást próbálsz tanulni, és konkrét drágaköveket próbálsz megismerni, néha olyan érzés, mintha egy Newton-tűt keresnél a szénakazalban.
Néhány elég nagy név használta vagy használja a Ruby on Rails-t a platformjában. Nem hiszem, hogy a Twitternél sokkal nagyobbat lehet. Emellett ők is sok backend szolgáltatásukat Scalára és Javára helyezték át bizonyos skálázási problémák miatt. De sokáig használták a Rails-t, és biztos vagyok benne, hogy még mindig használják a platformjuk más aspektusaiban, például a Shopify-jal való partnerségükben. Emellett a Basecamp, ami egy projektmenedzsment megoldás, azt mondta, hogy a Rails a projektjük szíve és lelke. A GitHubot működtető szoftvert Railsre építették. A Soundcloud és a Hulu, amely egy népszerű streaming szolgáltatás, Railsre épült. A Groupon és a LivingSocial, a SlideShare és az Urban Dictionary a kezdetektől fogva Rails-t használtak a fejlesztéseikhez.
Node.js Előnyök
- Extrémen népszerű.
- Nagy teljesítmény.
- Aszinkron.
- Nagyon skálázható.
- JavaScript front és backend.
- Flexibilis fájlszerkezet.
- npm és modulok.
Most, hogy megnéztük a Rails-t, kezdjük el megnézni a Node.js-t. Kezdjük az előnyökkel. A Node.js egyik hatalmas előnye a rendkívüli népszerűsége. Alapvetően ez az új csúcstechnológia a webfejlesztésben. Nagyon nagy a piaci kereslet. Rendkívül népszerű a startupok körében. A Node és az Express keretrendszer körül virágzó nyílt forráskódú közösség van. Sok jól kidolgozott modul található az npm-en, és ha a sebességről és a teljesítményről van szó, a Node kiüti a Rails-t a vízből. Tulajdonképpen nagyjából mindent kiüt a vízből. A Google JavaScript motorján fut, ami villámgyors. A Node-ot valós idejű webes alkalmazások készítésére használják, amelyek szinte olyanok, mint az asztali alkalmazások.
A Node.js emellett aszinkron is. Ez azt jelenti, hogy amikor egy program kérést küld a szervernek, nem kell megvárnia a választ. Folytathatja a végrehajtást. A Node egyetlen szálon fut, ellentétben más nyelvekkel, amelyek elküldik a kérést. Megvárják, amíg az a kérés elkészül, majd elküldik a következőt, és így tovább. A Node.js tehát nagyon jól skálázható, és ebben nagy szerepe van annak, hogy egyetlen szálon fut. A Node nagyon jól működik az olyan NoSQL adatbázisokkal is, mint a MongoDB, amely sokkal jobban skálázható, mint a hagyományos relációs adatbázisok, például a MySQL. Szinte minden nagyvállalat, amelyről olvastam, áttért a Node.js-re, és legalább tisztességes termelékenységnövekedésről számoltak be.
A másik nagy előnye a Node-nak, hogy JavaScriptet használ, amelyet sok webes stackben széles körben használnak. Sokszor előfordul, hogy a front-end nyelve eltér a backendétől, de a Node.js használatakor ez nem így van. A front-enden és a backenden is JavaScriptet használunk. Rengeteg kliensoldali keretrendszer uralja az iparágat – React, Angular, Vue.js. Ez tehát hatalmas előny a Node.js számára. Nyilvánvaló, hogy a JavaScript jól működik a JSON API-kkal is, amelyek nagyon népszerűek.
Node.js, Express vagy Happy.js, bármelyik ilyen keretrendszer nagyon rugalmas fájlstruktúrával rendelkezik. Lehetővé teszik, hogy úgy építsd fel az alkalmazásaidat, ahogyan csak akarod. Mindent belezsúfolhatsz egyetlen app JS fájlba. Ha inkább hagyományos MVC struktúrát szeretnél, szerintem ennek is vannak jó és rossz oldalai. De a legtöbb esetben, ha tudod mit csinálsz és jó programozó vagy, akkor a rugalmasság jó dolog. A Ruby gemshez hasonlóan a Node-nak is van saját csomagkezelője, az npm, vagyis a Node package manager. A legnagyobb különbség az npm és a Ruby gems között a függőségek kezelésének módja. A Ruby esetében a függőségek globálisan települnek. Tehát egy bundlert kell használnod, és valahogy magadnak kell kezelned őket. npm tulajdonképpen mindezt elintézi a moduljaid számára. A Node modulok mappába kerülnek. Ezután ezeknek a moduloknak is lehet saját Node modul mappájuk a saját függőségeikkel. Az npm modulok jobb dokumentációval is rendelkeznek, legalábbis az én tapasztalatom szerint.
Node.js hátrányai
- Szar a CPU-intenzív feladatokhoz.
- Inkonzisztencia.
- Újabb technológia.
- Callback-pokol.
- Túl moduláris.
Megnéztük tehát a Node.js pozitívumait és előnyeit. Most nézzünk meg néhány hátrányt. Bármennyire is jó a Node sok CRUD stílusú alkalmazáshoz, abszolút szívás a CPU-intenzív alkalmazásokhoz. Ennek az az oka, hogy valahányszor olyasmit csinál, ami sokáig tart, mint például a CPU művelet, az összes bejövő kérést sorba állítja, mert egyetlen szálon fut. Az olyanok, mint az Apache, amelyiknek több szál áll rendelkezésre, felosztják egymás között a CPU-időt. És csak az IO műveletek párhuzamosak, mert aszinkron módon kerülnek végrehajtásra. A CPU-intenzív feladatra példa az olyanok, mint a 3d renderelés, videokódolás, tudományos modellezés stb.
A másik panasz a Node-dal kapcsolatban az, hogy egy kicsit következetlen lehet. Egyesek úgy érzik, hogy az API gyakori időközönként folyamatosan változik. Ez néha nem túlságosan kompatibilis a visszafelé haladókkal. Nem csak ez, de egy Express alkalmazás felépítése általában nagyon szabad és rugalmas. Néha ez elég kötelet adhat a fejlesztőknek ahhoz, hogy felakasszák magukat.
A Rails nagyon szigorú, így nehezebb rossz kódot írni. Mivel a Node aszinkron, sok callback függvénnyel fogsz foglalkozni, és ezek gyakran felbuborékolhatnak, és az úgynevezett callback pokolba kerülhetnek. Erre vannak megoldások, például aszinkron segédprogramok és ígéretek használata. Van néhány dolog, amit tehetsz, hogy ezt megelőzd. Engem személy szerint ez nem zavar, de tudom, hogy néhány fejlesztőnek, aki nincs hozzászokva az aszinkron programozáshoz, gondot okoz a sok visszahívás.
Amint látja, mindkét backend opciónak megvannak az előnyei és hátrányai, de mindkettő fantasztikus technológia. Mindig mindent eseti alapon kell értékelni, ahelyett, hogy minden helyzetben csak azt mondjuk, hogy az egyik jobb, mint a másik.