Programmering

Node.js vs. Java: En episk kamp for mindshare for utviklere

I datahistorien var 1995 en gal tid. Først dukket Java opp, så på JavaScript kom JavaScript. Navnene fikk dem til å virke som sammenhengende tvillinger som nylig var løsrevet, men de kunne ikke være mer forskjellige. En av dem er samlet og statisk skrevet; den andre tolket og dynamisk skrevet. Det er bare begynnelsen på de tekniske forskjellene mellom disse to veldig forskjellige språkene som siden har skiftet til et slags kollisjonskurs, takket være Node.js.

Hvis du er gammel nok til å ha vært rundt den gang, husker du kanskje Java sin tidlige, episke topp. Den forlot laboratoriene, og hype-måleren festet seg. Alle så det som en revolusjon som ville stoppe ved intet mindre enn en total overtakelse av databehandling. Denne spådommen endte opp med å være bare delvis korrekt. I dag dominerer Java Android-telefoner, bedriftens databehandling og noen innebygde verdener som Blu-ray-disker.

For all sin suksess, skjønte Java imidlertid aldri mye trekkraft på skrivebordet eller i nettleseren. Folk spionerte kraften til applikasjoner og Java-baserte verktøy, men gunk glitched alltid opp disse kombinasjonene. Servere ble Java's sweet spot.

I mellomtiden, hva programmører opprinnelig misforstått som den dumme tvillingen har kommet til sin rett. Jo, JavaScript ble merket i noen år som HTML og nettet trakk en Borg på verden. Men det endret seg med AJAX. Plutselig hadde den stumme tvillingen makt.

Da ble Node.js gyte, og snudde utviklerens hoder med sin hastighet. Ikke bare var JavaScript raskere på serveren enn noen hadde forventet, men det var ofte raskere enn Java og andre alternativer. Det jevne kostholdet med små, raske, endeløse forespørsler om data har siden gjort Node.js mer vanlig, ettersom nettsider har blitt mer dynamiske.

Selv om det kan ha vært utenkelig for 20 år siden, er kvasi-tvillingene nå låst i en kamp om kontroll over programmeringsverdenen. På den ene siden er det dype grunnlaget for solid engineering og arkitektur. På den andre siden er enkelhet og allestedsnærværende. Vil den gamle skolens kompilerdrevne verden av Java holde sitt, eller vil hastigheten og fleksibiliteten til Node.js hjelpe JavaScript til å fortsette å sluke opp alt i veien?

Hvor Java vinner: Bunnsolid foundation

Jeg kan høre utviklerne le. Noen kan til og med dø av hjertesvikt. Ja, Java har feil og feil, men relativt sett er det Gibraltar-klippen. Den samme troen på Node.js er mange år fri. Det kan faktisk gå tiår før JavaScript-mannskapet skriver nesten like mange regresjonstester som Sun / Oracle utviklet for å teste Java Virtual Machine. Når du starter opp en JVM, får du 20 års erfaring fra en solid kurator som er fast bestemt på å dominere enterprise-serveren.

JavaScript-verdenen tar raskt igjen. Når mye av hele nettet er avhengig av JavaScript-utførelsesmotoren, går en bazillion utviklertime i å polere alle kantene. Men all innovasjonen har en ulempe fordi de nye funksjonene kan spre seg raskere enn utviklerbasen kan absorbere dem. Gamle skoleutviklere blir ofte forvirret av kode fylt med de nyere forbedringene av syntaksen til ECMAScript - og den samme nye koden vil stille krasje noen eldre nettlesere. Den endeløse tilførselen av innovative forprosessorer som CoffeeScript og JSX kan være bra for utviklere som ønsker disse funksjonene, men de gjør det vanskeligere for oss andre å åpne en tilfeldig fil og forstå den umiddelbart.

Java har sin andel av nye funksjoner og alternativer, men for det meste er det en stabil plattform. Det gjør livet mye lettere for utviklere som bygger noe for å vare.

Hvor Node.js vinner: Ubiquity

Takket være Node.js finner JavaScript et hjem på serveren og i nettleseren. Koden du skriver for en vil mer enn sannsynlig kjøre på samme måte på begge. Ingenting er garantert i livet, men dette er så nært som det kommer i datamaskinbransjen. Det er mye lettere å holde fast ved JavaScript for begge sider av klienten / serveren enn det er å skrive noe en gang i Java og igjen i JavaScript, noe du sannsynligvis vil trenge å gjøre hvis du bestemmer deg for å flytte forretningslogikken du skrev i Java for serveren til nettleseren. Eller kanskje sjefen vil insistere på at logikken du bygde for nettleseren flyttes til serveren. I begge retninger gjør Node.js og JavaScript det mye enklere å overføre kode.

Nodeens ledelse i denne verden ser bare ut til å utvide seg. De mest sofistikerte nettrammene, som React, bestemmer i siste sekund om de skal kjøre koden på serveren eller klienten. En dag vil den kjøre på klienten og på en annen dag vil den kjøre på serveren. Noe smart logikk vil ta avgjørelsen i farta basert på last eller ekstra RAM eller noe annet. Noen rammer vil sende JavaScript til databasen som et spørsmål der den kjøres. Koden din kan kjøre hvor som helst, og det blir vanskeligere å følge med fordi den ikke sender et postkort hjem. Bare vær glad fordi du ikke trenger å tenke på detaljene.

Hvor Java vinner: Bedre IDEer

Java-utviklere har Eclipse, NetBeans eller IntelliJ, tre førsteklasses verktøy som er godt integrert med debuggere, dekompilatorer og servere. Hver har mange års utvikling, dedikerte brukere og solide økosystemer fylt med plugin-moduler.

I mellomtiden skriver de fleste Node.js-utviklerne ord i kommandolinjen og koder inn deres favoritt teksteditor. Ja, noen av de beste tekstredigererne som Atom har forseggjorte samlinger av plugin-moduler som gjør nesten hva som helst, men selv da føles det som Node.js er mer old school enn Eclipse. Snart erstatter vi musen vår med en Atari joystick.

Noen utviklere bruker Eclipse eller Visual Studio, som begge støtter Node.js. Selvfølgelig betyr økningen av interesse for Node.js at det kommer nye verktøy, hvorav noen, som IBMs Node-RED, gir spennende tilnærminger, men de er fortsatt langt fra å være like komplette eller så dominerende som Eclipse eller IntelliJ.

Det rare er at utviklerne ikke ser ut til å bruke disse verktøyene. Kommandolinjen skulle forsvinne for 35 år siden med Mac-ankomsten, men ingen fortalte Node.js-utviklerne. Alternativene er der. WebStorm, for eksempel, er et solid kommersielt verktøy fra JetBrains som inneholder mange kommandolinjeverktøy.

Selvfølgelig, hvis du leter etter en IDE som redigerer og sjonglerer kode, er de nye verktøyene som støtter Node.js gode nok. Men hvis du ber IDE om å la deg redigere mens du opererer på den løpende kildekoden som en hjertekirurg skiver et bryst, vel, Java-verktøy er mye kraftigere. Det hele er der, og alt er lokalt.

Hvor Node.js vinner: Databasespørsmål

Forespørsler om noen av de nyere databasene, som CouchDB og MongoDB, er skrevet i JavaScript. Å blande Node.js og en samtale til databasen krever ingen girskift, enn si noe behov for å huske syntaksforskjeller.

I mellomtiden bruker mange Java-utviklere SQL. Selv når de bruker Java DB - tidligere Derby, en database skrevet i Java for Java-utviklere - skriver de spørsmålene sine i SQL. Du tror de bare ville kalt Java-metoder, men du tar feil. Du må skrive databasekoden din i SQL, og la Derby analysere SQL. SQL er et hyggelig språk, men det er helt annerledes enn Java, og mange utviklingsteam trenger forskjellige personer for å skrive SQL og Java.

For å gjøre saken verre, bruker mange Java-kodere forseggjorte biblioteker og skjemaer for å konvertere dataene fra SQL-spørringen til Java-objekter bare slik at de kan omarbeide dem til maler. Det er en gal prosess, og til slutt ganske sløsing.

Hvor Java vinner: Typer

Mange av de innledende programmeringskursene fortsetter å bruke Java fordi mange seriøse programmerere pleier å like statisk skrevet kode både for enkelhet og sikkerhet. Koden føles bare strengere etter at kompilatoren har fanget de åpenbare feilene.

JavaScript er imidlertid i ferd med å ta igjen, og noen utviklere bytter til TypeScript, et statisk skrevet supersett av JavaScript som bruker all typekontrollmagi før de spytter ut noe som kjører i JavaScript-stakken til nettleseren din. Hvis du elsker typer, kan dette være nok for deg å omfavne JavaScript. Eller du kan bare gjenkjenne etterligningen som den oppriktigste form for smiger og holde fast ved Java, som omfavnet statisk skriving fra begynnelsen.

Hvor Node.js vinner: Syntaktisk fleksibilitet

JavaScript pleide å være et enkelt språk for å dukke opp uønskede varslingsbokser og dobbeltsjekke skjemainput. Deretter opprettet utviklermiljøet mange forskjellige versjoner av språket som kunne sendes til noe for nettleseren. Det er CoffeeScript-publikummet som tilbyr en håndfull forskjellige syntakser designet for å tilfredsstille en smak for renere tegnsetting. Det er React / Vue-publikummet som blander sammen HTML og JavaScript bare fordi det er renere. Det er TypeScript for typen elskere og LiveScript for funksjonelle språkbrukere.

Du vil også finne en enorm mengde kreativitet i Java-verdenen, men av en eller annen grunn uttrykkes det ikke med mange forprosessorer. Det er en rekke språk som Kotlin, Scala og Clojure som blir omgjort til bytekode for JVM, men på en eller annen måte føler de seg forskjellige nok til å skille seg ut som separate språk. Alle forprosessorer gjør livet morsommere for JavaScript-programmerere som elsker forskjellige måter å formulere eller tegne koden på.

Hvor Java vinner: Enkel byggeprosess

Kompliserte byggeverktøy som Ant og Maven har revolusjonert Java-programmering. Men det er bare ett problem. Du skriver spesifikasjonen i XML, et dataformat som ikke var designet for å støtte programmeringslogikk. Visst, det er relativt enkelt å uttrykke forgrening med nestede koder, men det er noe irriterende ved å bytte gir fra Java til XML bare for å bygge noe. Med JavaScript er det ingen veksling.

Node.js pleide å være enklere å bygge. Du ville bare redigere koden og deretter trykke "løp". Det var da. Ettersom Node-utviklerne har “forbedret” prosessen, har de lagt til forhåndsprosessorer som tar favorittunderdialekten din til JavaScript og gjør den til noe kjørbar. Deretter må Node-pakkebehandling finne riktig bibliotek. Mesteparten av tiden fungerer dette bare, men noen ganger virker det ikke, og da bruker du tid på å lete etter riktig versjonsnummer på noe gjenstand som du bygger deg selv i et eget trinn. Og hvis du begår en feil i artefaktregisteret, vel, det versjonsnummeret er skutt, og du må snu kilometertellerhjulene igjen.

Java har også en kompleks byggeprosess som er ganske lik Node.js-metoden, men det føles ikke som om den har blitt noe mer kompleks. På en eller annen måte virker Maven og Ant som en del av Java-stiftelsen nå. Mange av de grove kantene er for lengst borte, og byggene fungerer bare oftere. Hvis det var noe absolutt mål å bygge problemer, kan de to språkene være like, men den raske eksplosjonen av JavaScript-kompleksitet betyr at Java vinner.

Relatert video: Node.js tips og triks

I denne forklaringsvideoen kan du lære deg flere teknikker som kan forbedre din Node-utviklingsopplevelse.

Hvor Node.js vinner: JSON

Når databaser spytter ut svar, går Java ut på omfattende detaljer for å gjøre resultatene til Java-objekter. Utviklere vil krangle i timevis om POJO-kartlegginger, dvalemodus og andre verktøy. Å konfigurere dem kan ta timer eller til og med dager. Til slutt får Java-koden Java-objekter etter all konverteringen. Og når det gjelder konfigurasjon, klamrer Java-verden seg fortsatt til XML og tilbyr til og med to store parsere for å gi utviklere flere grunner til å bekymre seg.

I dag returnerer mange nettjenester og databaser data i JSON, en naturlig del av JavaScript. JSON er nå så vanlig og nyttig at mange Java-utviklere bruker formatet, og en rekke gode JSON-parsere er også tilgjengelige som Java-biblioteker. Men JSON er en del av grunnlaget for JavaScript. Du trenger ikke biblioteker. Alt er der og klart til å gå.

Hvor Java vinner: Fjern feilsøking

Java har utrolige verktøy for å overvåke klynger av maskiner. Det er dype kroker i JVM og forseggjorte profileringsverktøy for å identifisere flaskehalser og feil. Java enterprise stack driver noen av de mest sofistikerte serverne på planeten, og selskapene som bruker disse serverne har krevd det aller beste innen telemetri. Alle disse overvåkings- og feilsøkingsverktøyene er ganske modne og klare for bruk.

Hvor Node.js vinner: Desktop

Det kan være noen Java-appletter som kjører der ute, og jeg vedlikeholder fremdeles noen Java JAR-filer som jeg kan klikke på for å kjøre, men for det meste er skrivebordsverdenen stort sett Java-fri. JavaScript, derimot, fortsetter å fange mer og mer av handlingen ettersom nettleseren spiser opp de fleste rollene til skrivebordet vårt. Da Microsoft omskrev Office til å fungere i nettleseren, ble støpegodset kastet. Hvis du fortsatt lurer på, er det interessante alternativer som Electron som tar webkoden din og gjør den til en frittstående desktop-app.

Hvor Java vinner: håndholdte

Android-apper er ofte skrevet i Java, og 90 prosent av de nye telefonene kjører noen versjoner av Android. Mange bruker ikke engang skrivebord lenger fordi telefonene er gode nok til alt.

Selvfølgelig er det litt forvirring. Mange utviklere skriver Node.js-nettapper som er målrettet mot mobile nettlesere på både iPhone og Androids. Hvis dette gjøres bra, er ytelsen ofte god nok.

$config[zx-auto] not found$config[zx-overlay] not found