Esu naujokas, bet pastaruoju metu daug girdėjau apie tai, koks geras yra Node.js. Atsižvelgdamas į tai, kaip mėgstu dirbti su jQuery ir apskritai su JavaScript, negaliu nesusimąstyti, kaip nuspręsti, kada naudoti Node.js. Mano galvoje turima žiniatinklio programa yra kažkas panašaus į Bitly - paima tam tikrą turinį, jį archyvuoja.
Iš visų namų darbų, kuriuos atlikau per pastarąsias kelias dienas, gavau tokią informaciją. Node.js
Keletas šaltinių, su kuriais susidūriau, yra šie:
Atsižvelgdamas į tai, kad Node.js galima beveik iškart paleisti Amazon's EC2 instancijose, bandau suprasti, kokioms problemoms spręsti reikalingas Node.js, o ne kuris nors iš galingųjų karalių, pavyzdžiui, PHP, Python ir Ruby. Suprantu, kad tai iš tikrųjų priklauso nuo turimų kalbos žinių, bet mano klausimas labiau priklauso bendrai kategorijai: Kada naudoti tam tikrą sistemą ir kokio tipo problemoms spręsti ji ypač tinka?
Jūs padarėte puikų darbą apibendrinant tai, kas's awesome apie Node.js. Mano nuomone, Node.js ypač tinka programoms, kuriose norėtumėte palaikyti nuolatinį ryšį iš naršyklės atgal į serverį. Naudodami "long-polling" techniką, galite parašyti programą, kuri realiuoju laiku siunčia atnaujinimus naudotojui. Daugelyje interneto gigantų, pavyzdžiui, Ruby on Rails arba Django, naudojant ilgąją apklausą, serveris būtų labai apkrautas, nes kiekvienas aktyvus klientas suvalgytų vieną serverio procesą. Tokia situacija prilygsta tarpeklio atakai. Kai naudojate ką nors panašaus į Node.js, serveriui nereikia palaikyti atskirų gijų kiekvienam atidarytam ryšiui.
Tai reiškia, kad "Node.js" galite sukurti naršyklinę pokalbių programą, kuri, aptarnaudama daugybę klientų, nenaudoja beveik jokių sistemos išteklių. Bet kada, kai norite atlikti tokį ilgą apklausą, "Node.js" yra puikus pasirinkimas.
Verta paminėti, kad ir "Ruby", ir "Python" turi įrankių tokiems dalykams atlikti (eventmachine ir twisted atitinkamai), tačiau "Node.js" tai daro itin gerai ir nuo pat pradžių. "JavaScript" itin gerai tinka grįžtamaisiais skambučiais grindžiamam lygiagretumo modeliui, ir čia jis puikiai tinka. Be to, galimybė serializuoti ir deserializuoti naudojant JSON ir klientui, ir serveriui yra labai puiki.
Nekantriai laukiu kitų atsakymų, tai fantastiškas klausimas.
Verta pabrėžti, kad Node.js taip pat puikiai tinka tais atvejais, kai reikia pakartotinai naudoti daug kodo per kliento ir serverio atotrūkį. Meteor Meteor framework leidžia tai padaryti labai lengvai, ir daug žmonių teigia, kad tai gali būti interneto svetainių kūrimo ateitis. Iš patirties galiu pasakyti, kad rašyti kodą "Meteor" sistemoje yra labai smagu, o didelė to dalis yra ta, kad mažiau laiko praleidžiama galvojant, kaip pertvarkyti duomenis, kad naršyklėje veikiantis kodas galėtų lengvai jais manipuliuoti ir perduoti juos atgal.
Štai straipsnis apie piramidę ir long-pollingą, kurį, pasirodo, labai lengva sukurti, šiek tiek padedant geventui: TicTacToe and Long Polling with Pyramid.
Manau, kad "Node.js" geriausiai tinka realaus laiko programoms: internetiniams žaidimams, bendradarbiavimo priemonėms, pokalbių kambariams ar bet kam kitam, kur tai, ką vienas naudotojas (arba robotas? arba jutiklis?) daro su programa, kiti naudotojai turi matyti iš karto, neatnaujinant puslapio.
Taip pat turėčiau paminėti, kad "Socket.IO" kartu su "Node.js" dar labiau sumažins jūsų realaus laiko vėlavimą, nei tai įmanoma naudojant ilgą apklausą. Blogiausiu atveju Socket.IO grįš prie ilgos apklausos, o vietoj to naudos žiniatinklio lizdus arba net "Flash", jei jie yra prieinami.
Tačiau taip pat turėčiau paminėti, kad beveik bet kokią situaciją, kai kodas gali užsiblokuoti dėl gijų, galima geriau išspręsti naudojant "Node.js". Arba bet kokią situaciją, kai reikia, kad programa būtų valdoma įvykių.
Be to, Ryanas Dahlas per vieną paskaitą, kurioje dalyvavau, sakė, kad "Node.js" lyginamieji rodikliai labai prilygsta "Nginx" įprastoms senoms HTTP užklausoms. Taigi, jei sukursime su "Node.js", galėsime gana efektyviai aptarnauti įprastus išteklius, o kai prireiks įvykių valdomų dalykų, jis bus pasiruošęs juos apdoroti.
Be to, visą laiką veikia tik "JavaScript". Lingua Franca visame steke.
Trumpai tariant:
Node.js puikiai tinka programoms, kuriose vienu metu yra daug prisijungimų, o kiekvienai užklausai reikia tik labai nedaug procesoriaus ciklų, nes funkcijos vykdymo metu blokuojamas įvykių ciklas (su visais kitais klientais).
Geras straipsnis apie įvykių ciklą Node.js yra Mixu's tech blog: Understanding the node.js event loop.