Hi, kaverit, tässä artikkelissa vertailemme Node.js:ää vs. Ruby on Railsia web-kehitykseen. Tärkein syy, miksi kirjoitin tämän artikkelin, on se, että tiimiltämme kysytään jatkuvasti, mikä kieli tai mikä kehys on paras oppia. Emme kuitenkaan koskaan anna yksinkertaista vastausta, koska ne eivät ole yksiselitteinen vastaus. Joten mielestäni seuraavaksi parasta on tarkastella kaikkia faktoja ja tilastoja. Tarkastelemme sekä Node.js:n että Ruby on Railsin etuja ja haittoja palvelinpuolen teknologioiden osalta. Ennen kuin aloitamme, haluaisin tehdä pari huomautusta. Voimme jo kuulla kriitikoiden sanovan, miten voitte verrata Node.js:ää, joka on suoritusaika, Ruby on Railsiin, joka on kehys? Ymmärrän väitteen, mutta aion verrata näitä kahta palvelinpuolen teknologiaa ja verkkopinoa. Tehdään nyt selväksi, mitä on parempi oppia juuri nyt ja mitä on parempi toteuttaa yrityksessä. En sano, että Ruby on Railsin suoranaisia ominaisuuksia pitäisi verrata Node.js:ään, jos se saa sinut tuntemaan olosi paremmaksi korvata Node.js jollain Expressillä tai jollain muulla Node-pohjaisella kehyksellä. Joka tapauksessa vertailemme backend-rakenteita ja pinoja, emme yksittäisiä teknologioita. Tiimimme on työskennellyt molempien teknologioiden kanssa, ja jotkut meistä pitävät molemmista teknologioista. En suosittele jompaakumpaa toista. On myös tärkeää ymmärtää, että se, mikä toimii meillä, ei välttämättä toimi sinulla ja päinvastoin. Kannattaa myös muistaa, että kaikkien aivot ovat erilaiset. Tähän kysymykseen ei ole olemassa mitään keksimätöntä vastausta.

Aloitetaanpa tarkastelemalla aluksi joitakin yhtäläisyyksiä molempien tekniikoiden välillä.

  • Suosittuja palvelinpuolen tekniikoita.
  • Melko helppo oppia.
  • Hyvä suorituskyky.
  • Käytössä huippusivustoilla/sovelluksissa.
  • Vahva yhteisö.
  • Samankaltainen MVC-pohjainen rakenne.
  • Nopea kehitys.

Kumpikin Node.js ja Rails ovat arvostettuja ja suosittuja palvelinpuolen teknologioita, jotka pystyvät moniin eri asioihin. Ne voivat toimia monien eri pinojen ja tietokantojen kanssa ja niin edelleen. Molemmat ovat melko helppoja oppia. Node käyttää JavaScriptiä ja Rails Rubya. Ruby ja JavaScript ovat kuitenkin helpompia oppia kuin esimerkiksi Java, C# tai muut korkeamman tason kielet. Ne ovat molemmat melko anteeksiantavia kieliä, ja niiden oppimiseen on tarjolla valtavasti resursseja. Node.js ja Ruby on Rails toimivat todella hyvin, ja puhumme suorituskyvyn tasosta. On monia esimerkkejä suosituista verkkosivustoista, joissa käytetään molempia tekniikoita. Node- ja Rails-ohjelmilla on erittäin vahvat ja mielipiteitä jakavat yhteisöt.

Rails on ollut käytössä hieman kauemmin, ja sillä on enemmän vanhoja tekijöitä. Mutta Node on tulossa päivä päivältä suositummaksi. Nyt MVC eli Model-View-Controller on suunniteltu malli. Ja Ruby on Railsissa on kova MVC. Sinulla on kansio malleillesi, ohjaimille ja näkymille. MVC on mahdollista tietyillä Node-kehyksillä, kuten Expressillä. Express on kuitenkin rakenteeltaan paljon joustavampi kuin Rails. Voit vain ottaa MVC:stä tiettyjä näkökohtia. Se ei ole ainoa mahdollinen rakenne. Nodea ja Railsia käytetään nopeaan kehitykseen ja prototyyppien luomiseen. Railsissa on mahtava taitto-ominaisuus ja Expressissä on myös generaattorit ja komentorivityökalut.

Railsin edut

  • Johdonmukainen rakenne.
  • Erittäin mielipidekeskeinen.
  • Tietokantojen migraatiot.
  • Kehityksen nopeus.
  • Ruby on loistava kieli.
  • Ruby gems.
  • Kypsyys ja arvostettu yhteisö.

Katsomme ensin Ruby on Railsin edut ja sen jälkeen haitat. Kuten sanoin, Railsissa on erittäin vahva MVC-rakenne. Useimmat Rails-sovellukset tulevat näyttämään hyvin samankaltaisilta ydintiedostojen ja kansioiden osalta. Sinulla on vahva perusta, jonka päälle rakennat helmiä, mukautettuja paketteja ja kirjastoja. Lisäksi Rails on hyvin omapäinen, mikä tarkoittaa, että se pakottaa sinut noudattamaan sen tapaa tehdä asioita. Rails olettaa, että kirjoitat koodia tietyllä tavalla, ja joidenkin mielestä se on hieman rajoittavaa. Mutta se tekee myös koodista helpompaa, paljon siistimpää ja vaikeuttaa virheiden ja ongelmien syntymistä. Se ei rajoita siinä mielessä, ettetkö voisi luoda sitä, mitä haluat, vaan vain tavan, jolla pääset siihen. Jos teet sen oikein, se on todennäköisesti helpoin polku.

Railsissa on myös todella hyvä tietokantojen siirtotoiminto. Niiden avulla voimme tehdä asioita, kuten luoda ja muokata taulukoita ja sarakkeita tietokannassamme ilman, että meidän tarvitsee mennä manuaalisesti sisään ja lisätä tai muuttaa asioita. Se antaa myös mukavan pienen lokin tai polun, jota seuraamalla voit nähdä tarkalleen, mitä tietokantasi rakenteelle on tehty.

Nyt Node. On olemassa joitakin paketteja tai moduuleja migraatioita varten, kuten DB-migrate, joka voi toimia todella hyvin, mutta se ei ole yhtä syvällinen ja helppokäyttöinen kuin Railsin akordimigraatiojärjestelmä. Kun kyse on prototyyppien luomisesta ja nopeasta kehittämisestä, ei ole kovin montaa teknologiaa, joka päihittäisi Railsin. Joidenkin peruskonfiguraatioiden ja parin telinekomennon avulla sinulla on siis täysin toimiva CRUD-sovellus. Nopeutta lisäävät tietokantojen migraatiot. Node.js ja Express ovat melko hyviä nopean kehityksen kanssa, jos käytät kolmannen osapuolen työkaluja ja moduuleja. Mutta Railsissa on kaikki nämä jutut suoraan laatikosta.

Ruby-kielessä on joitain hyviä ja huonoja puolia, mutta suurimmaksi osaksi se on hyvin arvostettu ja se on hyvin puhdas. Ruby on moniparadigmainen kieli, voit tehdä proseduraalista koodia funktionaalisesti, mutta suurimmaksi osaksi se on olio-orientoitunut. Kaikkea voidaan tarkastella objektina. RubyGems on Ruby on Railsin pakettihallinta, ja sitä käytetään kehyksen ydintoimintojen laajentamiseen. Se on samanlainen kuin npm Node.js:lle. Kaikissa Rails-sovelluksissa on gem-tiedosto, jossa voit määrittää gemit. Sitten voit ajaa bundler-komennon asentaaksesi ne kaikki, samaan tapaan kuin npm install Node.js:n kanssa.

Toinen hieno asia Ruby on Railsissa on se, että se on ollut olemassa jo jonkin aikaa, ja sillä on erittäin arvostettu ja älykäs yhteisö. Ruby on Railsia ylläpitävät kehittäjät ovat erittäin älykkäitä ja hyvin intohimoisia kehystä kohtaan. Ydinkehykseen liittyy valtavasti resursseja, kuten foorumeita, blogikirjoituksia ja dokumentaatiota, jotka auttavat sinua, jos jäät jumiin. Nämä ovat soem Ruby on Railsin suurista eduista.

Railsin haitat

  • Suorituskyky
  • Ylihelppo
  • Suosio
  • Dokumentaation puute

Puhutaanpa muutamista haitoista. Suurimpia valituksia, joita olemme kuulleet Ruby on Railsista, on se, että se on suhteellisen hidas. Rails on iso kehys, jonka ytimessä on paljon ominaisuuksia. Kuten joissakin kevyemmissä kehyksissä, on myös otettava huomioon gem- ja sovellustiedostoriippuvuudet. Automaatiota ja telineitä on niin paljon, että kehittäjä ei oikeastaan opi kovinkaan paljon siitä, miten Rails-kehys toimii. Hän saattaa tietää Ruby-kielestä, syntaksista tai sovelluksensa rakenteesta, mutta jollekin, joka todella ymmärtää, miten Rails toimii, tämä on loistava sen nopean kehityksen vuoksi. Toisaalta joidenkin kehittäjien on todella tehtävä ylimääräistä työtä ymmärtääkseen todella tiettyjä asioita. Rails on myös paljon vaikeampi isoille projekteille kuin pienille sovelluksille. Sillä voi olla ongelmia myös skaalautumisen kanssa.

Toinen haittapuoli on siis se, että Rails ei ole yhtä suosittu kuin Node.js. Tällä hetkellä Node.js on web-kehityksen kärjessä ja Railsin innostus on todella laskenut. Meidän mielestämme, jos etsit työtä, sanoisimme ehdottomasti, että opettele Node ja luultavasti Express. Yritykset palkkaavat JS-kehittäjiä enemmän kuin mitään muuta kieltä. Jos tämä olisi ollut viisi vuotta sitten, Rails tai Ruby olisi yksi kolmesta tärkeimmästä opittavasta kielestä. Mutta nykyään se ei vain ole yhtä suosittu. Niinpä mainitsin aiemmin lyhyesti, että Rails-kehyksen ytimessä on todella hyvä dokumentaatio ja esimerkkejä, joiden avulla voi oppia yksinkertaisia scaffolding-komentoja ja tietokannan siirtämistä. Tämä kaikki on hienoa. Kun kuitenkin yrittää oppia edistyneempää ohjelmointia ja yrittää oppia tiettyjä helmiä, joskus tuntuu kuin etsisi Newtonin neulaa heinäsuovasta.

Jotkut melko suuret nimet ovat käyttäneet tai käyttävät Ruby on Railsia alustassaan. En usko, että Twitteriä suuremmaksi voi mennä. Lisäksi he ovat siirtäneet paljon backend-palveluitaan Scalaan ja Javaan joidenkin skaalautumisongelmien takia. He käyttivät kuitenkin Railsia pitkään, ja olen melko varma, että he käyttävät sitä edelleen alustansa muissa osissa, kuten yhteistyössään Shopifyn kanssa. Lisäksi Basecamp, joka on projektinhallintaratkaisu, on sanonut, että Rails on heidän projektinsa sydän ja sielu. GitHubia pyörittävä ohjelmisto on rakennettu Railsin varaan. Soundcloud ja Hulu, joka on suosittu suoratoistopalvelu, on rakennettu Railsille. Groupon ja LivingSocial, SlideShare ja Urban Dictionary ovat alusta asti käyttäneet Railsia kehitystyössään.

Node.js Edut

  • Erittäin suosittu.
  • Suuri suorituskyky.
  • Asynkroninen.
  • Erittäin skaalautuva.
  • JavaScript front- ja backend.
  • Joustava tiedostorakenne.
  • npm ja moduulit.

Nyt kun katsoimme Railsia, aletaan tarkastella Node.js:ää. Aloitamme eduista. Yksi Node.js:n valtava plussa on sen äärimmäinen suosio. Se on periaatteessa web-kehityksen uusi huipputeknologia. Markkinoilla on erittäin suuri kysyntä. Se on erittäin suosittu startup-yrityksissä. Noden ja Express-kehyksen ympärillä on kukoistava avoimen lähdekoodin yhteisö. Npm:ssä on monia hyvin kehitettyjä moduuleja, ja nopeudessa ja suorituskyvyssä Node päihittää Railsin. Itse asiassa se lyö melkeinpä minkä tahansa. Se toimii Googlen JavaScript-moottorilla, joka on salamannopea. Nodea käytetään reaaliaikaisten verkkosovellusten rakentamiseen, jotka tuntuvat melkein työpöytäsovelluksilta.

Node.js on myös asynkroninen. Tämä tarkoittaa, että kun ohjelma lähettää pyynnön palvelimelle, sen ei tarvitse odottaa vastausta. Se voi jatkaa suoritusta. Node toimii yhdessä säikeessä toisin kuin muut kielet, jotka lähettävät pyynnön. Ne odottavat, kunnes pyyntö on valmis, ja lähettävät sitten seuraavan ja niin edelleen. Node.js on siis myös hyvin skaalautuva, ja sillä, että se toimii yhdessä säikeessä, on siinä suuri merkitys. Node toimii myös erittäin hyvin MongoDB:n kaltaisten NoSQL-tietokantojen kanssa, jotka ovat paljon skaalautuvampia kuin perinteiset relaatiotietokannat kuten MySQL. Lähes kaikki isot yritykset, joista olen lukenut, ovat siirtyneet käyttämään Node.js:ää, ja ne ovat raportoineet ainakin kunnon tuottavuuden noususta.

Toinen suuri Noden etu on myös se, että se käyttää JavaScriptiä, jota käytetään laajasti monissa web-pinoissa. Usein front-endin kieli on eri kuin backendin, mutta näin ei ole Node.js:ää käytettäessä. Käytämme JavaScriptiä front-endissä ja back-endissä. Alaa hallitsevat lukuisat asiakaspuolen kehykset – React, Angular ja Vue.js. Se on siis valtava etu Node.js:lle. On selvää, että JavaScript toimii hyvin myös JSON-API:iden kanssa, jotka ovat hyvin suosittuja.

Node.js, Express tai Happy.js, missä tahansa näistä kehyksistä on todella joustava tiedostorakenne. Niiden avulla voit rakentaa sovelluksesi haluamallasi tavalla. Voit tunkea kaiken yhteen sovelluksen JS-tiedostoon. Jos haluat enemmän perinteistä MVC-rakennetta, siinä on mielestäni sekä hyviä että huonoja puolia. Mutta suurimmaksi osaksi, jos tiedät mitä teet ja olet hyvä ohjelmoija, joustavuus on hyvä asia. Kuten Ruby gemsillä, myös Nodella on oma paketinhallinta nimeltä npm eli Node package manager. Suurin ero npm:n ja Ruby gemsin välillä on tapa, jolla riippuvuuksia hallitaan. Rubyn kanssa riippuvuudet asennetaan globaalisti. Sinun on siis käytettävä bundleria ja tavallaan hallittava niitä itse. npm itse asiassa hoitaa kaiken tämän moduulien osalta. Ne laitetaan Node modules -kansioon. Sitten näillä moduuleilla voi olla myös oma Node modules -kansio omine riippuvuuksineen. npm-moduuleilla näyttää myös olevan parempi dokumentaatio, ainakin minun kokemukseni mukaan.

Node.js:n haitat

  • Paskat CPU-intensiivisille tehtäville.
  • Epäjohdonmukaisuus.
  • Uusi tekniikka.
  • Callback-helvetti.
  • Liian modulaarinen.

Katsoimme siis Node.js:n positiivisia puolia ja etuja. Katsotaan nyt joitakin haittoja. Niin hyvä kuin Node onkin monille CRUD-tyylisille sovelluksille, se on aivan surkea CPU-intensiivisille sovelluksille. Syynä tähän on se, että aina kun se tekee jotakin, joka vie aikaa, kuten CPU-operaatio, se asettaa kaikki saapuvat pyynnöt jonoon, koska se toimii yhdessä säikeessä. Apachen kaltainen järjestelmä, jossa on enemmän käytettävissä olevia säikeitä, jakaa prosessoriajan niiden kesken. Vain IO-operaatiot ovat rinnakkaisia, koska ne suoritetaan asynkronisesti. Esimerkki CPU-intensiivisestä tehtävästä on esimerkiksi 3d-renderöinti, videokoodaus, tieteellinen mallinnus jne.

Toinen valitus Nodesta on, että se voi olla hieman epäjohdonmukainen. Joidenkin mielestä API muuttuu jatkuvasti tihein väliajoin. Se ei ole joskus kovinkaan taaksepäin yhteensopiva. Sen lisäksi Express-sovelluksen rakenne on yleisesti ottaen hyvin vapaa ja joustava. Joskus se voi antaa kehittäjille tarpeeksi köyttä hirttää itsensä.

Rails on hyvin tiukka, joten huonon koodin kirjoittaminen on vaikeampaa. Koska Node on asynkroninen, joudut käsittelemään paljon callback-funktioita ja ne voivat usein kuplia ja joutua niin sanottuun callback-helvettiin. Tähän on olemassa ratkaisuja, kuten asynkroniset apuohjelmat ja lupausten käyttäminen. On muutamia asioita, joita voit tehdä tämän estämiseksi. Henkilökohtaisesti tämä ei häiritse minua, mutta tiedän, että joillakin kehittäjillä, jotka eivät ole tottuneet asynkroniseen ohjelmointiin, on ongelmia monien callbackien kanssa.

Kuten näet, molemmissa näissä backend-vaihtoehdoissa on hyvät ja huonot puolensa, mutta ne ovat molemmat fantastisia teknologioita. Kaikkea pitäisi aina arvioida tapauskohtaisesti eikä vain sanoa, että yksi on parempi kuin toinen kaikissa tilanteissa.

Articles

Vastaa

Sähköpostiosoitettasi ei julkaista.