Hvordan bestemme når Node.js skal brukes?

Jeg er ny på denne typen ting, men i det siste har jeg hørt mye om hvor bra Node.js er. Med tanke på hvor mye jeg elsker å jobbe med jQuery og JavaScript generelt, kan jeg ikke la være å lure på hvordan jeg skal bestemme når jeg skal bruke Node.js. Webapplikasjonen jeg har i tankene er noe sånt som Bitly - tar litt innhold, arkiverer det.

Fra alle leksene jeg har gjort de siste dagene, fikk jeg følgende informasjon. Node.js

  • er et kommandolinjeverktøy som kan kjøres som en vanlig webserver og lar en kjøre JavaScript-programmer.
  • utnytter den flotte V8 JavaScript-motoren
  • er veldig bra når du trenger å gjøre flere ting samtidig
  • er hendelsesbasert, slik at alle de fantastiske Ajax-lignende tingene kan gjøres på serversiden
  • lar oss dele kode mellom nettleseren og bakenden
  • lar oss snakke med MySQL

Noen av kildene jeg har kommet over er:

Tatt i betraktning at Node.js kan kjøres nesten out-of-the-box på Amazon&# 39s EC2 forekomster, prøver jeg å forstå hvilken type problemer som krever Node.js i motsetning til noen av de mektige kongene der ute som PHP, Python og Ruby. Jeg forstår at det virkelig avhenger av ekspertisen man har på et språk, men spørsmålet mitt faller mer inn i den generelle kategorien av: Når skal man bruke et bestemt rammeverk, og hvilken type problemer er det spesielt egnet for?

Løsning

Du gjorde en god jobb med å oppsummere hva som er fantastisk med Node.js. Min følelse er at Node.js er spesielt egnet for applikasjoner der du' ønsker å opprettholde en vedvarende forbindelse fra nettleseren tilbake til serveren. Ved hjelp av en teknikk kjent som "long-polling", kan du skrive en applikasjon som sender oppdateringer til brukeren i sanntid. Å gjøre lang polling på mange av nettets giganter, som Ruby on Rails eller Django, vil skape enorm belastning på serveren, fordi hver aktive klient spiser opp en serverprosess. Denne situasjonen utgjør et tarpit angrep. Når du bruker noe som Node.js, har serveren ikke behov for å opprettholde separate tråder for hver åpne tilkobling.

Dette betyr at du kan opprette en nettleserbasert chat-applikasjon i Node.js som tar nesten ingen systemressurser for å betjene mange klienter. Når som helst du ønsker å gjøre denne typen lang polling, er Node.js et flott alternativ.

Det er verdt å nevne at Ruby og Python begge har verktøy for å gjøre denne typen ting (eventmachine og twisted, henholdsvis), men at Node.js gjør det eksepsjonelt bra, og fra grunnen av. JavaScript er eksepsjonelt godt plassert til en callback-basert samtidighet modell, og det utmerker seg her. Også, å være i stand til å serialize og deserialize med JSON native til både klienten og serveren er ganske kjekk.

Jeg ser frem til å lese andre svar her, dette er et fantastisk spørsmål.

Det er verdt å påpeke at Node.js er også flott for situasjoner der du vil gjenbruke mye kode på tvers av klient / server-gapet. Meteor-rammeverket]8 gjør dette veldig enkelt, og mange antyder at dette kan være fremtiden for webutvikling. Jeg kan si av erfaring at det er veldig gøy å skrive kode i Meteor, og en stor del av dette er å bruke mindre tid på å tenke på hvordan du skal omstrukturere dataene dine, slik at koden som kjører i nettleseren enkelt kan manipulere den og sende den tilbake.

Her er en artikkel om Pyramid og long-polling, som viser seg å være veldig enkelt å sette opp med litt hjelp fra gevent: TicTacToe and Long Polling with Pyramid.

Kommentarer (4)

Jeg tror Node.js er best egnet for sanntidsapplikasjoner: nettspill, samarbeidsverktøy, chatterom eller noe annet der det en bruker (eller robot? eller sensor?) gjør med applikasjonen må sees av andre brukere umiddelbart, uten en sideoppdatering.

Jeg bør også nevne at Socket.IO i kombinasjon med Node.js vil redusere sanntidsforsinkelsen enda lenger enn det som er mulig med lang polling. Socket.IO vil falle tilbake til lang polling som et worst case-scenario, og i stedet bruke webkontakter eller til og med Flash hvis de er tilgjengelige.

Men jeg bør også nevne at omtrent alle situasjoner der koden kan blokkere på grunn av tråder kan løses bedre med Node.js. Eller enhver situasjon der du trenger at applikasjonen skal være hendelsesdrevet.

Ryan Dahl sa også i et foredrag som jeg en gang deltok på at Node.js-benchmarkene konkurrerer tett med Nginx for vanlige gamle HTTP-forespørsler. Så hvis vi bygger med Node.js, kan vi betjene våre normale ressurser ganske effektivt, og når vi trenger hendelsesdrevne ting, er den klar til å håndtere det.

Pluss det' s alle JavaScript hele tiden. Lingua Franca på hele stabelen.

Kommentarer (3)

For å gjøre det kort:

Node.js er godt egnet for applikasjoner som har mange samtidige tilkoblinger, og hver forespørsel trenger bare veldig få CPU-sykluser, fordi hendelsessløyfen (med alle de andre klientene) er blokkert under utførelsen av en funksjon.

En god artikkel om hendelsessløyfen i Node.js er Mixu&# 39s tech blog: Understanding the node.js event loop.

Kommentarer (0)