Jest szczególnie skuteczny w obsłudze ton plików we / wy i spodziewałbym się, że dobrze poradzi sobie również z masą komunikacji sieciowej. Wydaje się szczególnie popularny w aplikacjach opartych na gniazdach. Ważną rzeczą do zapamiętania jest to, że jeśli twoje potrzeby nie są zaspokojone przez istniejące biblioteki (jest ich wiele), być może będziesz musiał zanurzyć się w jakimś C, które może być powiązane z poleceniami JS. Możesz także odrodzić dodatkowe procesy Węzłów, ale podejrzewam, że zrobienie wielu z nich może wymagać opodatkowania (zakładam - może się mylić - dla każdego z nich pojawia się instancja V8).
JS jest jednowątkowy i blokuje, co oznacza, że nic innego nie może zostać wykonane do czasu zakończenia wywołania funkcji. To była pożądana cecha JS, polegająca na usunięciu wszystkich problemów związanych z wątkami i kolejkami z twoich rąk. JS nie powstrzymuje działania C / C ++ przed uruchomieniem w bardziej wielowątkowy sposób pod maską, więc rolą JS jest naprawdę większa architektura / komunikator. Jeśli przetwarzasz obraz, nie będziesz chciał obsługiwać go za pomocą synchronicznych poleceń JavaScript, ponieważ wszystko inne w Twojej aplikacji lub serwerze będzie blokowane, dopóki nie zostanie wykonane. Chodzi o to, że wywołujesz przetwarzanie obrazu przez powiązaną funkcjonalność C / C ++, a następnie reagujesz na zdarzenie „gotowe”, gdy obraz jest gotowy do przetworzenia.
Wymaga to, aby JS w dowolnej aplikacji Node.js był silnie sterowany zdarzeniami i wywołaniami zwrotnymi, lub prawdopodobnie będzie działał bardzo słabo. Więc nie zobaczysz wielu wywołań metod w Węźle, które nie otrzymają funkcji do późniejszego użycia. Jedną z rzeczy, która bardzo szybko staje się bardzo wyraźna w Node, jest to, że czeka cię świat brzydki, jeśli nie znajdziesz sposobu na obsłużenie piramidy zwrotnej. na przykład
//event CBs are more DOM-style than Node style and this isn't built-in Node file I/O
//keeping it simple and quick since I'll just get Node stuff wrong from memory
file.get('someFile.txt', function(e){
e.fileObj.find('some snippet', function(e){
someFinalCallBackHandler( e.snippetLocations );
} );
} );
Na szczęście istnieje wiele narzędzi i przykładów pozwalających lepiej sobie z tym poradzić. Większość z nich obraca się wokół mechanizmów obiecujących i po prostu łączy szereg funkcji, które mają reagować na wzajemne stany zwrotne w tablicy, która robi dla ciebie brzydkie piramidy.
Osobiście, do cholery, uwielbiam, że mamy JS na wysokim poziomie i C / C ++ bliżej chrome. To najlepsza kombinacja, która zainspirowała mnie do rozpoczęcia nauki C. I nie pozwól, aby brak potencjału biblioteki Cię przeraził, dopóki nie przeprowadzisz badań. Biblioteki węzłów są tworzone w bardzo szybkim tempie i dojrzewają bardzo szybko. Jeśli nie robisz nic niezwykłego, szanse są dobre, ktoś ma to na uwadze.
Największa różnica w stosunku do Rails polega na tym, że JS nigdy nie będzie na szynach. Mamy tendencję do kodowania tego, aby móc go mieć tak szybko, jak chcesz, więc jest lina do powieszenia się z czynnikiem, a architektura była całkiem zrób to sam w JS do ostatnich lat. Nazywam tę wolność, ale zdaję sobie sprawę, że dla wielu deweloperów nie jest to idealne.
Ponadto nigdy nie będziesz mieć problemu z „klejnotem” w Node.js, ponieważ próbowałeś zainstalować na czymś innym niż Mac. Deweloperzy sieci Web po stronie klienta gardzą problemami związanymi z zależnościami i stąd pochodzi wiele rdzeni Node. Jeśli nie działa od razu po wyjęciu z pudełka w ciągu 5 minut lub krócej na każdej popularnej platformie, generalnie zgniatamy go i podrzucamy. Nie spotkałem się jeszcze z popularnym modułem, który wymagał, żebym zrobił coś specjalnego, aby go uruchomić. System pakietów jest doskonały.
Ale aby odpowiedzieć na podstawowe pytanie w sposób bardziej bezpośredni / zwięzły: czy jest to dobre w przypadku procesów w tle?
Tak, Węzeł jest po prostu procesem działającym w tle, umożliwiającym sterowanie aplikacją poprzez zdarzenia i wywołania zwrotne.