Jestem nowy w tego typu rzeczach, ale ostatnio dużo słyszałem o tym, jak dobry jest Node.js. Biorąc pod uwagę, jak bardzo lubię pracować z jQuery i JavaScript w ogóle, nie mogę przestać się zastanawiać, jak zdecydować, kiedy użyć Node.js. Aplikacja internetowa, o której myślę, przypomina Bitly - pobiera trochę zawartości, archiwizuje ją.
Z całej pracy domowej, którą wykonałem w ciągu ostatnich kilku dni, uzyskałem następujące informacje. Node.js
- to narzędzie wiersza polecenia, które może być uruchomione jako zwykły serwer WWW i umożliwia uruchamianie programów JavaScript
- wykorzystuje świetny silnik JavaScript V8
- jest bardzo dobry, gdy musisz zrobić kilka rzeczy jednocześnie
- jest oparty na zdarzeniach, więc wszystkie wspaniałe rzeczy podobne do Ajaxa można wykonać po stronie serwera
- pozwala nam współdzielić kod między przeglądarką a backendem
- pozwala nam rozmawiać z MySQL
Niektóre źródła, z którymi się spotkałem to:
- Nurkowanie w Node.js - wprowadzenie i instalacja
- Zrozumienie NodeJS
- Węzeł według przykładu ( Archive.is )
- Stwórzmy aplikację internetową: NodePad
Biorąc pod uwagę, że Node.js może być uruchamiany niemal natychmiast po wyjęciu z pudełka w instancjach EC2 Amazon , staram się zrozumieć, jakiego rodzaju problemy wymagają Node.js, a nie jakikolwiek z potężnych królów, takich jak PHP , Python i Ruby . Rozumiem, że tak naprawdę zależy to od specjalistycznej znajomości języka, ale moje pytanie należy bardziej do ogólnej kategorii: Kiedy stosować określone ramy i do jakiego rodzaju problemów jest szczególnie odpowiedni?
źródło
Odpowiedzi:
Świetnie się spisałeś, podsumowując, co jest niesamowite w Node.js. Mam wrażenie, że Node.js jest szczególnie odpowiedni dla aplikacji, w których chcesz utrzymywać stałe połączenie z przeglądarki z powrotem do serwera. Korzystanie z techniki znanej jako „długie odpytywanie” , możesz napisać aplikację, która wysyła aktualizacje do użytkownika w czasie rzeczywistym. Długie sondowanie wielu gigantów internetowych, takich jak Ruby on Rails lub Django , spowodowałoby ogromne obciążenie serwera, ponieważ każdy aktywny klient zjada jeden proces serwera. Ta sytuacja stanowi atak tarpitowy . Gdy używasz czegoś takiego jak Node.js, serwer nie musi utrzymywać osobnych wątków dla każdego otwartego połączenia.
Oznacza to, że w Node.js możesz utworzyć opartą na przeglądarce aplikację czatu, która prawie nie potrzebuje zasobów systemowych do obsługi wielu klientów. Za każdym razem, gdy chcesz przeprowadzić tego rodzaju długie odpytywanie, Node.js jest świetną opcją.
Warto wspomnieć, że zarówno Ruby, jak i Python mają narzędzia do tego typu rzeczy ( eventmachine i twisted ), ale Node.js robi to wyjątkowo dobrze i od podstaw. JavaScript jest wyjątkowo dobrze dostosowany do modelu współbieżności opartego na wywołaniu zwrotnym i wyróżnia się tutaj. Również możliwość serializacji i deserializacji z JSON rodzimym zarówno dla klienta, jak i serwera jest całkiem sprytna.
Z niecierpliwością czekam na przeczytanie innych odpowiedzi tutaj. To fantastyczne pytanie.
Warto zauważyć, że Node.js jest również świetny w sytuacjach, w których będziesz ponownie wykorzystywać dużo kodu w przerwie między klientem a serwerem. Ramy Meteor sprawiają, że jest to naprawdę łatwe, a wielu ludzi sugeruje, że może to być przyszłość tworzenia stron internetowych. Mogę powiedzieć z doświadczenia, że pisanie kodu w Meteor jest świetną zabawą, a duża część tego poświęca mniej czasu na zastanawianie się, jak zrestrukturyzować swoje dane, więc kod działający w przeglądarce może łatwo manipuluj nim i przekaż go z powrotem.
Oto artykuł na temat piramidy i długiego odpytywania, który okazuje się bardzo łatwy do skonfigurowania z niewielką pomocą gevent: Kolko_i_Krzyzyk i Długie odpytywanie z piramidą .
źródło
Wierzę, że Node.js najlepiej nadaje się do aplikacji w czasie rzeczywistym: gry online, narzędzia do współpracy, pokoje czatu lub cokolwiek, w czym to, co robi użytkownik (lub robot? Lub czujnik?), Musi być natychmiast zauważony przez innych użytkowników, bez odświeżania strony.
Powinienem również wspomnieć, że Socket.IO w połączeniu z Node.js zmniejszy twoje opóźnienie w czasie rzeczywistym jeszcze bardziej niż jest to możliwe przy długim odpytywaniu. Socket.IO powróci do długiego odpytywania jako najgorszego scenariusza i zamiast tego użyje gniazd sieciowych, a nawet Flasha, jeśli są dostępne.
Ale powinienem również wspomnieć, że prawie każdą sytuację, w której kod może blokować z powodu wątków, można lepiej rozwiązać za pomocą Node.js. Lub każda sytuacja, w której potrzebujesz aplikacji sterowanej zdarzeniami.
Ryan Dahl powiedział także w jednym z wystąpień, że testy porównawcze Node.js ściśle rywalizują z Nginx o regularne stare żądania HTTP. Więc jeśli zbudujemy przy pomocy Node.js, możemy dość skutecznie służyć naszym normalnym zasobom, a kiedy potrzebujemy rzeczy sterowanych zdarzeniami, jesteśmy gotowi to obsłużyć.
Plus cały czas JavaScript. Lingua Franca na całym stosie.
źródło
.js
jakiś sposób przypisać różne kolory do moich różnych plików. Zielony po stronie klienta, niebieski po stronie serwera. Gubię się sam.Powody korzystania z NodeJS:
Działa w Javascript, więc możesz używać tego samego języka na serwerze i kliencie, a nawet współdzielić między nimi kod (np. W celu weryfikacji formularza lub renderowania widoków na obu końcach).
System jednowątkowy sterowany zdarzeniami to szybki, nawet przy obsłudze wielu żądań jednocześnie, a także prosty w porównaniu z tradycyjnymi wielowątkowymistrukturami Java lub ROR.
Ciągle rosnąca pula pakietów dostępnych za pośrednictwem NPM , w tym biblioteki / moduły po stronie klienta i serwera, a także narzędzia wiersza polecenia do tworzenia stron internetowych. Większość z nich jest dogodnie hostowana na github, gdzie czasami możesz zgłosić problem i znaleźć go w ciągu kilku godzin! Miło jest mieć wszystko pod jednym dachem, ze standardowym raportowaniem problemów i łatwym rozwidlaniem.
Stało się standardowym środowiskiem defacto do uruchamiania defacto, narzędzia związane JavaScript i inne narzędzia internetowe , w tym narzędzia zadań, minizatory, urządzenia upiększające, lintery, preprocesory, programy pakujące i procesory analityczne.
Wydaje się całkiem odpowiedni do prototypowania, zwinnego rozwoju i szybkiej iteracji produktu .
Powody nie należy używać NodeJS:
Uruchamia Javascript, który nie ma sprawdzania typu kompilacji. W przypadku dużych, złożonych systemów lub projektów o kluczowym znaczeniu dla bezpieczeństwa , w tym współpracy między różnymi organizacjami, język, który zachęca do kontraktowych interfejsów i zapewnia statyczne sprawdzanie typu, może na dłuższą metę zaoszczędzić trochę czasu na debugowanie (i wybuchy ). (Chociaż JVM utknęła
null
, więc proszę użyć Haskell do reaktorów jądrowych.)Co więcej, wiele pakietów w NPM jest trochę surowych i wciąż jest w fazie szybkiego rozwoju. Niektóre biblioteki dla starszych frameworków przeszły dekadę testów i naprawiania błędów i są bardzo stabilne . Npmjs.org nie ma mechanizmu oceniania pakietów , co doprowadziło do rozprzestrzeniania się pakietów, które robią mniej więcej to samo, z czego duży procent nie jest już utrzymywany.
Zagnieżdżone piekło zwrotne. (Oczywiście, że są 20 różnych rozwiązań tego ...)
Ciągle rosnąca pula pakietów może sprawić, że jeden projekt NodeJS będzie wyglądał zupełnie inaczej niż następny. Ze względu na ogromną liczbę dostępnych opcji (np. Express / Sails.js / Meteor / Derby ) istnieje duża różnorodność wdrożeń . Czasami może to utrudnić nowemu deweloperowi włączenie się do projektu Węzła. Porównaj to z dołączeniem programisty Rails do istniejącego projektu: powinien być w stanie dość szybko zapoznać się z aplikacją, ponieważ wszystkie aplikacje Rails są zachęcane do podobnej struktury .
Radzenie sobie z plikami może być trochę uciążliwe. Rzeczy, które są trywialne w innych językach, takie jak czytanie wiersza z pliku tekstowego, są na tyle dziwne, że w Node.js jest pytanie StackOverflow na ponad 80 głosów. Nie ma prostego sposobu na odczytanie jednego rekordu na raz z pliku CSV . Itp.
Uwielbiam NodeJS, jest szybki, dziki i zabawny, ale martwię się, że mało interesuje go poprawność. Miejmy nadzieję, że w końcu uda nam się połączyć to, co najlepsze z obu światów. Zależy mi na tym, co w przyszłości zastąpi Węzeł ... :)
źródło
npm search
inpm show
pokaże datę ostatniej wersji pakietu.Krótko mówiąc:
Node.js jest dobrze dostosowany do aplikacji, które mają wiele równoczesnych połączeń, a każde żądanie wymaga tylko kilku cykli procesora, ponieważ pętla zdarzeń (z wszystkimi innymi klientami) jest blokowana podczas wykonywania funkcji.
Dobry artykuł o pętli zdarzeń w node.js jest Mixu za tech blog: Zrozumienie node.js pętlę zdarzeń .
źródło
Mam jeden przykład z rzeczywistego świata, w którym użyłem Node.js. Firma, w której pracuję, ma jednego klienta, który chciał mieć prostą statyczną stronę HTML. Ta strona internetowa służy do sprzedaży jednego przedmiotu za pomocą PayPal, a klient chciał również mieć licznik, który pokazuje liczbę sprzedanych przedmiotów. Klient spodziewa się dużej liczby odwiedzających tę stronę. Postanowiłem zrobić licznik za pomocą Node.js i Express.js frameworku .
Aplikacja Node.js była prosta. Uzyskaj kwotę sprzedanych przedmiotów z bazy danych Redis , zwiększ licznik przy sprzedaży przedmiotu i podaj wartość licznika użytkownikom za pośrednictwem interfejsu API .
Kilka powodów, dla których zdecydowałem się użyć Node.js w tym przypadku
W tym przypadku Node.js był świetnym wyborem.
źródło
Najważniejsze powody, aby rozpocząć kolejny projekt za pomocą Node ...
Czego oczekiwać ...
Kto tego używa?
źródło
async
/await
teraz możemy wprowadzić znacznie czystszy kod węzła asynchronicznego, który obsługuje również tradycyjnytry
/catch
. W 2016/17 kodery JS przechodzą na ES6.Nie ma to jak Silver Bullet. Wszystko wiąże się z pewnymi kosztami. To tak, jakby jeść tłuste potrawy, narażasz swoje zdrowie, a zdrowa żywność nie pochodzi z przyprawami takimi jak tłuste potrawy. To jest indywidualny wybór, czy chcą zdrowia lub przypraw, jak w ich jedzeniu. Taki sam sposób, w jaki Node.js uważa się za używany w konkretnym scenariuszu. Jeśli Twoja aplikacja nie pasuje do tego scenariusza, nie należy jej brać pod uwagę przy tworzeniu aplikacji. Po prostu myślę o tym samym:
Kiedy używać Node.JS
Kiedy NIE należy używać Node.JS
Uwzględnienie skalowalności za pomocą Node.JS
Node.JS Alternatywy
Istnieją inne opcje do użycia zamiast Node.JS, jednak Vert.x wydaje się dość obiecujący i ma wiele dodatkowych funkcji, takich jak polygot i lepszą skalowalność.
źródło
fork
. Zobacz stackoverflow.com/questions/9546225/… . Węzeł bardzo dobrze obsługuje wiele rdzeni zcluster
modułem. nodejs.org/api/cluster.htmlInną wspaniałą rzeczą, o której myślę, że nikt nie wspominał o Node.js, jest niesamowita społeczność, system zarządzania pakietami (npm) i ilość istniejących modułów, które można dołączyć, po prostu włączając je do pliku package.json.
źródło
Mój kawałek: nodejs jest świetny do tworzenia systemów czasu rzeczywistego, takich jak analityka, aplikacje czatowe, api, serwery reklam itp. Do diabła, swoją pierwszą aplikację do czatu zrobiłem używając nodejs i socket.io w czasie krótszym niż 2 godziny, i to także podczas tygodnia egzaminacyjnego!
Edytować
Minęło kilka lat, odkąd zacząłem używać nodejs i wykorzystałem go do tworzenia wielu różnych rzeczy, w tym statycznych serwerów plików, prostych analiz, aplikacji do czatowania i wielu innych. To jest moje zdanie na temat używania nodejs
Kiedy użyć
Przy tworzeniu systemu, który kładzie nacisk na współbieżność i szybkość.
Kiedy nie należy używać
Jest to bardzo wszechstronny serwer WWW, więc możesz go używać gdziekolwiek chcesz, ale prawdopodobnie nie w tych miejscach.
Pamiętaj, że po prostu robię dupki. W przypadku statycznych serwerów plików apache jest lepszy głównie dlatego, że jest powszechnie dostępny. Społeczność nodejs z biegiem lat powiększyła się i stała się bardziej dojrzała i można śmiało powiedzieć, że z nodejs można korzystać niemal wszędzie, jeśli masz własny wybór hostingu.
źródło
Można go użyć gdzie
Na froncie mobilnym firmy działające w czasie największej oglądalności korzystały z Node.js w zakresie rozwiązań mobilnych. Sprawdź dlaczego?
LinkedIn jest wybitnym użytkownikiem. Cały ich stos mobilny jest oparty na Node.js. Przeszli z 15 serwerów z 15 instancjami na każdej maszynie fizycznej do zaledwie 4 instancji - które mogą podwoić ruch!
eBay uruchomił ql.io, język zapytań internetowych dla interfejsów API HTTP, który używa Node.js jako stosu środowiska wykonawczego. Udało im się dostroić zwykłą stację roboczą Ubuntu o jakości deweloperskiej do obsługi ponad 120 000 aktywnych połączeń na proces node.js, przy czym każde połączenie zajmuje około 2kB pamięci!
Walmart przeprojektował swoją aplikację mobilną do korzystania z Node.js i przekazał swoje przetwarzanie JavaScript na serwer.
Czytaj więcej na: http://www.pixelatingbits.com/a-closer-look-at-mobile-app-development-with-node-js/
źródło
Węzeł najlepszy do równoczesnej obsługi żądań -
Zacznijmy od historii. Od 2 lat pracuję nad JavaScript i rozwijam front-end i bardzo mi się to podoba. Faceci z zaplecza dostarczają nam API napisane w Javie, python (nie dbamy o to) i po prostu piszemy wywołanie AJAX, zdobywamy nasze dane i zgadnijcie co! skończyliśmy. Ale w rzeczywistości nie jest to takie proste. Jeśli dane, które otrzymujemy, są nieprawidłowe lub wystąpił błąd serwera, wówczas utknęliśmy i musimy skontaktować się z naszymi facetami zaplecza za pośrednictwem poczty lub czatu (czasami również za pośrednictwem WhatsApp :).) nie jest fajne. Co jeśli napisaliśmy nasze API w JavaScript i wywołaliśmy te API z naszego interfejsu? Tak, to całkiem fajne, ponieważ jeśli napotkamy jakiś problem w interfejsie API, możemy to sprawdzić. Zgadnij co ! możesz to zrobić teraz, jak? - Węzeł jest dla ciebie.
Ok zgodził się, że możesz napisać swój interfejs API w JavaScript, ale co, jeśli nie przeszkadza mi powyższy problem. Czy masz jakiś inny powód, aby używać węzła do reszty interfejsu API?
więc tutaj zaczyna się magia. Tak, mam inne powody, aby używać węzła dla naszych interfejsów API.
Wróćmy do naszego tradycyjnego systemu API odpoczynku, który opiera się na operacji blokowania lub wątków. Załóżmy, że wystąpią dwa równoczesne żądania (r1 i r2), każde z nich wymaga działania bazy danych. Więc w tradycyjnym systemie co się stanie:
1. Waiting Way: Nasz serwer zaczyna obsługiwać
r1
żądania i czeka na odpowiedź na zapytanie. po zakończeniur1
serwer zaczyna obsługiwaćr2
i robi to w ten sam sposób. Czekanie nie jest dobrym pomysłem, ponieważ nie mamy zbyt wiele czasu.2. Sposób wątkowania: Nasz serwer utworzy dwa wątki dla obu żądań
r1
i spełnir2
swoje zadanie po zapytaniu do bazy danych, więc szybko się ochłodzi, ale zajmuje dużo pamięci, ponieważ widzimy, że uruchomiliśmy dwa wątki, a problem rośnie, gdy oba żądania pytają o te same dane wtedy musicie poradzić sobie z problemami zakleszczonymi. To lepsze niż oczekiwanie, ale nadal występują problemy.Oto, jak zrobi to węzeł:
3. Węzeł: kiedy to samo współbieżne żądanie pojawi się w węźle, wówczas zarejestruje zdarzenie za pomocą wywołania zwrotnego i przejdzie do przodu, nie będzie czekać na odpowiedź zapytania na konkretne
r1
żądanie, więc gdy nadejdzie żądanie, wówczas pętla zdarzeń węzła (tak, istnieje pętla zdarzeń w węźle, który służy temu celowi.) zarejestrować zdarzenie za pomocą funkcji wywołania zwrotnego i przejść do przodu w celu wyświetleniar2
żądania i podobnie zarejestrować zdarzenie za pomocą wywołania zwrotnego. Za każdym razem, gdy jakiekolwiek zapytanie zakończy się, wyzwala odpowiednie zdarzenie i wykonuje wywołanie zwrotne do zakończenia bez przerywania.Więc nie czekaj, nie wątkuj, nie zużywaj pamięci - tak, to jest węzeł do obsługi resztowego API.
źródło
Jeszcze jednym powodem, dla którego wybrałem Node.js dla nowego projektu, jest:
Być w stanie tworzyć wyłącznie w chmurze
Od jakiegoś czasu korzystam z Cloud9 IDE i teraz nie wyobrażam sobie bez niego, obejmuje wszystkie cykle rozwojowe. Wszystko czego potrzebujesz to przeglądarka i możesz kodować w dowolnym miejscu i na dowolnym urządzeniu. Nie musisz wpisywać kodu do jednego komputera (jak w domu), a następnie do kasy na innym komputerze (jak w miejscu pracy).
Oczywiście może być oparte na chmurze IDE dla innych języków lub platform (Cloud 9 IDE dodaje także obsługę innych języków), ale korzystanie z Cloud 9 do programowania Node.js jest dla mnie naprawdę świetnym doświadczeniem.
źródło
Kolejną rzeczą, którą zapewnia węzeł, jest możliwość tworzenia wielu instancji v8 węzła przy użyciu procesu potomnego węzła ( childProcess.fork (), z których każdy wymaga pamięci 10 MB zgodnie z dokumentami) w locie, nie wpływając w ten sposób na główny proces uruchamiania serwera. Odciążanie zadania w tle, które wymaga ogromnego obciążenia serwera, staje się dziecinnie proste i możemy łatwo zabijać je w razie potrzeby.
Często korzystam z węzła i większość tworzonych przez nas aplikacji wymaga jednoczesnych połączeń z serwerem, co powoduje duży ruch sieciowy. Frameworki takie jak Express.js i nowe Koajs (które usunęły piekło zwrotne) jeszcze bardziej ułatwiły pracę na węźle.
źródło
Zakładanie legowisk azbestowych ...
Wczoraj mój tytuł w Packt Publications, Reactive Programming with JavaScript . To tak naprawdę nie jest tytuł skoncentrowany na Node.js; wczesne rozdziały mają na celu omówienie teorii, a później obszerne rozdziały kodu obejmują praktykę. Ponieważ tak naprawdę nie uważałem za stosowne nie dać czytelnikom serwera WWW, Node.js wydawał się zdecydowanie oczywistym wyborem. Sprawa została zamknięta, zanim jeszcze została otwarta.
Mógłbym bardzo pozytywnie ocenić moje doświadczenia z Node.js. Zamiast tego byłem szczery, jeśli chodzi o dobre i złe punkty, które napotkałem.
Pozwól mi podać kilka istotnych cytatów:
Dodatek, którego tak naprawdę nie chciałem po rosnącym crescendo w ostatnich rozdziałach i wnioskach, mówi o tym, co udało mi się znaleźć w ekosystemie i dostarczył obejścia dla kretyńskiego dosłowności:
Zamiana dwóch komentarzy w kolejności:
źródło
Jeśli twoja aplikacja głównie tethering api WWW lub innych kanałów io, daje lub bierze interfejs użytkownika, node.js może być dla ciebie dobrym wyborem, szczególnie jeśli chcesz wycisnąć jak najwięcej skalowalności lub, jeśli twój główny język w życiu jest javascript (lub swego rodzaju transpilatory javascript). Jeśli zbudujesz mikrousługi, node.js jest również w porządku. Node.js nadaje się również do każdego małego lub prostego projektu.
Jego główną zaletą jest to, że pozwala front-endom brać odpowiedzialność za zaplecze zamiast typowego podziału. Kolejnym uzasadnionym punktem sprzedaży jest to, że twoja siła robocza jest zorientowana na JavaScript.
Poza pewnym punktem nie można jednak skalować kodu bez strasznych hacków wymuszających modułowość, czytelność i kontrolę przepływu. Jednak niektórzy ludzie lubią te hacki, zwłaszcza pochodzące z kontekstu javascript opartego na zdarzeniach, wydają się znajome lub wybaczalne.
W szczególności, gdy twoja aplikacja musi wykonywać synchroniczne przepływy, zaczynasz krwawić z częściowo wypalonych rozwiązań, które znacznie spowalniają twój proces rozwoju. Jeśli w aplikacji masz części wymagające intensywnych obliczeń, postępuj ostrożnie, wybierając (tylko) node.js. Może http://koajs.com/ lub inne nowości łagodzą te pierwotnie drażliwe aspekty, w porównaniu do tego, kiedy pierwotnie użyłem node.js lub to napisałem.
źródło
Mogę podzielić się kilkoma punktami, gdzie i dlaczego używać węzła js.
Wady: -
Wniosek: - Nodejs najlepiej używać do prostych aplikacji w czasie rzeczywistym .. jeśli masz bardzo dużą logikę biznesową i złożoną funkcjonalność lepiej nie należy używać nodejs. Jeśli chcesz zbudować aplikację wraz z czatem i dowolną funkcją współpracy. Węzeł może być używany w określonych częściach i powinien pozostać zgodny z technologią wygody.
źródło
Węzeł jest świetny do szybkich prototypów, ale nigdy więcej nie użyję go do niczego skomplikowanego. Spędziłem 20 lat na rozwijaniu relacji z kompilatorem i na pewno mi tego brakuje.
Węzeł jest szczególnie bolesny dla utrzymywania kodu, którego nie odwiedziłeś przez jakiś czas. Informacje o typie i wykrywanie błędów czasu kompilacji to DOBRE RZECZY. Po co to wszystko wyrzucać? Po co? I do cholery, kiedy coś idzie na południe, stosy śladów są często zupełnie bezużyteczne.
źródło