Co to jest Node.js i jak działa ?

readTime

9 min

Co to jest Node.js i jak działa ?

Node.js to środowisko uruchomieniowe języka JavaScript, które zrewolucjonizowało sposób, w jaki programiści tworzą aplikacje po stronie serwera.

Pozwala programistom na korzystanie z JavaScriptu zarówno na frontendzie, jak i backendzie, co czyni go idealnym wyborem do tworzenia skalowalnych i wydajnych aplikacji.

Na podstawie odpowiedzi udzielonych w ankiecie Stack Overflow Developer Survey 2022, Node.js był najczęściej używaną technologią internetową wśród programistów i osiągnął ponad 46% głosów.

Dodatkowo zajął 8 miejsce na liście najbardziej lubianych technologii. Dlatego też Node.js można uznać za przyszłościową technologię, z którą każdy programista obcujący z JavaScriptem powinien przynajmniej się zapoznać.

Czym jest Node.js?

Node.js to jedno z najpopularniejszych środowisk uruchomieniowych języka JavaScript, serwerów internetowych i innych aplikacji webowych.

Jest to środowisko open-source, wieloplatformowe i znane z jednowątkowego, asynchronicznego modelu współbieżności sterowanego zdarzeniami.

Node.js działa w oparciu o sterowany zdarzeniami, nieblokujący model I/O. Oznacza to, że działa na jednowątkowej pętli zdarzeń, która obsługuje wszystkie przychodzące żądania asynchronicznie. Takie podejście pomaga aplikacji obsługiwać dużą liczbę współbieżnych połączeń bez spowolnienia.

Aplikacje Node.js są napisane w języku JavaScript, co ułatwia Frontend developerom naukę backendu przy użyciu tego samego języka programowania.

Runtime Node.js zapewnia dużą liczbę wbudowanych modułów i API do różnych zadań, w tym obsługi żądań HTTP, odczytu i zapisu plików w systemie oraz łączenia się z bazami danych.

Został wprowadzony w 2009 roku i zrewolucjonizował świat programowania, ponieważ umożliwił programistom uruchamianie kodu JavaScript poza przeglądarkami internetowymi.

Node.js jest napisany w językach C, C++ i JavaScript. Podstawowe komponenty Node.js – silnik V8 i biblioteka libuv – są napisane odpowiednio w C++ i C, ponieważ języki te zapewniają niskopoziomowy dostęp do zasobów systemowych, dzięki czemu dobrze nadają się do tworzenia wysokowydajnych aplikacji.

Jak działa Node.js?

Po uruchomieniu programu JavaScript w Node.js, silnik V8 najpierw analizuje kod, aby zbudować Abstract Syntax Trees (AST) czyli abstrakcyjne drzewo składni.

AST jest wynikiem parsowania kodu. W przypadku JavaScript, AST jest obiektem JavaScript zawierającym drzewiastą reprezentację źródła. Zanim go użyjemy, musimy go utworzyć. W zależności od kodu, który analizujemy, wybieramy odpowiedni parser.

Interpreter pobiera AST wygenerowane przez parser silnika V8 i generuje z niego kod bajtowy. Na koniec kompilator kompiluje kod bajtowy do binarnego kodu maszynowego, który pasuje do architektury procesora.

źródło: https://dev.to/amplication/nodejs-development-all-you-need-to-know-3e78

Chociaż Node.js jest jednowątkowy, wykorzystuje sterowany zdarzeniami, nieblokujący model I/O do obsługi wielu żądań jednocześnie bez blokowania innych.

Zachowanie to jest osiągane poprzez pętlę zdarzeń czyli event loop.

Jak sama nazwa wskazuje, pętla zdarzeń to pętla, która działa w sposób ciągły i czeka na wystąpienie zdarzeń. Gdy wystąpi zdarzenie, pętla zdarzeń doda je do kolejki zdarzeń. Jeśli w kolejce nie ma innych oczekujących zdarzeń, pętla zdarzeń wykona zdarzenie i usunie je z kolejki zdarzeń. Jeśli w kolejce znajdują się inne zdarzenia, będą one przetwarzane pojedynczo w sposób nieblokujący.

Rozważmy na przykład poniższy przykład z dwiema funkcjami setTimeout:

js
console.log('Starting');

setTimeout( function() {
   console.log('Timer1 finished')
  ;}, 3000);
 
setTimeout(function() {
  console.log('Timer2 finished');
  }, 2000);
  
console.log('Stopping');



Podzielmy wykonanie powyższego przykładu na kroki, aby lepiej zrozumieć, jak działa pętla zdarzeń.

  • Skrypt uruchomi się i wyświetli komunikat „Starting” w konsoli.
  • Wywoływana jest pierwsza funkcja setTimeout, która zaplanuje wykonanie przekazanej jej funkcji po upływie 3 sekund.
  • Druga funkcja setTimeout zostanie następnie wywołana i zaplanuje wykonanie przekazanej jej funkcji po upływie 2 sekund.
  • Skrypt wyświetli komunikat „Stopping” w konsoli.
  • Po zakończeniu wykonywania głównego wątku, Node.js rozpoczyna przetwarzanie pętli zdarzeń i sprawdza, czy w kolejce zdarzeń znajdują się oczekujące wywołania zwrotne. W tym przypadku dwa wywołania zwrotne oczekują w kolejce ze zdarzeniami timera.
  • Pętla zdarzeń uruchamia wywołanie zwrotne drugiej funkcji setTimeout, zapisuje w konsoli komunikat „Timer 2 finished” i usuwa zdarzenie z kolejki.
  • Pętla zdarzeń uruchamia następnie wywołanie zwrotne dla pierwszej funkcji setTimeout, zapisuje w konsoli komunikat „Timer 1 finished” i usuwa zdarzenie z kolejki.
  • Gdy kolejka zdarzeń jest pusta, pętla zdarzeń ponownie zacznie oczekiwać na nowe zdarzenia do dodania do kolejki zdarzeń.

Pętla zdarzeń będzie stale sprawdzać kolejkę zdarzeń pod kątem zakończonych zdarzeń.

Po upływie czasu opóźnienia zdarzenia jest ono przenoszone z kolejki zdarzeń do stosu wywołań w celu wykonania.

W tym przypadku druga funkcja setTimeout ma krótszy czas opóźnienia niż pierwsza. Zostanie więc przeniesiona z kolejki zdarzeń na stos wywołań przed pierwszą funkcją setTimeout. Dlatego wynik przykładu będzie wyglądał jak poniżej:

js
// Starting
// Stopping
// Timer2 finished
// Timer1 finished

Czym wyróżnia się Node.js?

  • Asynchroniczny model Input/Output – Node.js wykorzystuje sterowany zdarzeniami, nieblokujący model I/O do obsługi wielu żądań jednocześnie bez blokowania wykonywania innych żądań.
  • Wieloplatformowość – obsługa systemów operacyjnych Windows, macOS i Linux.
  • Szybki czas uruchamiania – w przeciwieństwie do innych środowisk uruchomieniowych, Node.js ma szybki czas uruchamiania. Dzięki temu deweloperzy mogą szybko testować i iterować swój kod. Obsługa Websocketów – Wbudowana obsługa websocketów, umożliwiająca dwukierunkową komunikację.
  • Duży ekosystem – w NPM możesz znaleźć wiele modułów i pakietów z licencją open-source. Praktycznie każdego dnia powstają jakieś nowe paczki i jeśli masz jakiś problem to na 80% ktoś już napisał paczkę, która go rozwiązuje.
  • Brak buforowania – Node.js nie buforuje danych. Dane są przetwarzane natychmiast po ich otrzymaniu, co skutkuje krótszym czasem reakcji i mniejszymi opóźnieniami.

Do czego służy Node.js?

Node.js to wielofunkcyjne środowisko uruchomieniowe, z którego programiści mogą korzystać na wiele sposobów:

  • Interfejsy API – W Node.js możesz tworzyć skalowalne i zorientowane na wydajność API dla aplikacji internetowych i mobilnych.
  • Aplikacje działające w czasie rzeczywistym – Node.js idealnie nadaje się do aplikacji działających w czasie rzeczywistym, takich jak aplikacje do czatowania i platformy do gier online.
  • Mikroserwisy – programiści mogą z łatwością projektować architektury mikroserwisów za pomocą Node.js. Co więcej, mogą używać Node.js z popularnymi technologiami, takimi jak (ale nie tylko) , Prisma, PostgreSQL, GraphQL i MongoDB.
  • Tworzenie aplikacji multiplatformowych – Node.js może być używany do tworzenia aplikacji desktopowych z Electronem ale nie tylko.
  • IoT -Dodatkowo Node.js idealne sprawdzi się w przypadku aplikacji i rozwiązań z ekosystemu IoT, ze względu na olbrzymie możliwości i funkcjonalności, które wymieniłem wcześniej.
  • Aplikacje typu SPA – Node.js bardzo dobrze współpracuje z frameworkami frontendowymi, takimi jak Angular, React i Vue.js. Za pomocą Frameworka Node.js do tworzenia web serwerów czyli Expressa, możesz Tworzyć full stackowe aplikacje, które potocznie nazywa się MERN od MongoDB, Express, React i Node.js i inne takie jak np. MEAN czyli MongoDB, Express, Angular i Node.js

Zalety programowania w Node.js

  • Node.js doskonale nadaje się do aplikacji o wysokiej wydajności, ponieważ jest zbudowany na silniku JavaScript V8.
  • Wysoka skalowalność, ponieważ mechanizm pętli zdarzeń pomaga przetwarzać żądania bez blokowania i czekania na wykonanie poprzednich.
  • Upraszcza tworzenie stron internetowych, umożliwiając programistom korzystanie z JavaScript zarówno do tworzenia front-endu, jak i back-endu.
  • Ogromna społeczność, która cały czas się powiększa.
  • Brak kosztów, ponieważ Node.js jest oprogramowaniem typu open-source.
  • Łatwa integracja z innymi narzędziami i technologiami programistycznymi, takimi jak Express, AWS, Socket IO, MongoDB itp.

Wady programowania w Node.js

  • Używanie zbyt wielu wywołań zwrotnych do pisania kodu asynchronicznego może skutkować tzw. Callback Hell.
  • Node.js nie został zaprojektowany do obsługi zadań wymagających dużej mocy obliczeniowej procesora, takich jak kodowanie wideo, szyfrowanie danych lub data science.
  • Programiści posługujący się Node.js muszą mieć na uwadze dbałość o bezpieczeństwo swoich aplikacji i często poświęcić na to dodatkowy czas.
  • Debugowanie nie zawsze jest jasne i klarowne z powodu asynchroniczności.
  • Dependencje czyli Zależności NPM -a są trudne do zarządzania, zwłaszcza wraz z rozwojem projektu. Chodzi o to, że niektóre pakiety nie są w 100% stabilne, nie są dobrze udokumentowane lub mogą mieć problemy z bezpieczeństwem. Ponadto rozmiar projektu rośnie wykładniczo wraz z doinstalowywaniem kolejnych paczek.

Jak zainstalować Node.js?

Instalacja Node.js jest prosta i stanowi pierwszy krok do rozpoczęcia nauki Node.js-a lub ogólnie pracy jako programista JavaScript bo na co dzień będziesz używał NPM praktycznie w każdym projekcie opartym o biblioteki i paczki JavaScriptowe

Krok 1 Pobierz najnowszą wersję LTS Node.js z ich strony internetowej. Domyślnie przeglądarka podpowie Ci na jakim obecnie jesteś systemie i taką wersję Node-a zaproponuje.

Krok 2 Uruchom plik instalatora i postępuj zgodnie z instrukcjami kreatora instalacji.

Krok 3 – Po zakończeniu kreatora otwórz wiersz poleceń i wpisz node -v, aby zweryfikować instalację. Zostanie wyświetlona zainstalowana wersja Node.js. (np. v18.15.0)

Krok 4 – Jeśli wszystko jest w porządku, możesz już uczyć się Node.js.

Dlaczego Node.js jest popularny?

Node.js to jedna z najpopularniejszych technologii webowych wśród deweloperów. Wykorzystanie JavaScript do programowania po stronie serwera, obsługa wysokiej współbieżności, wsparcie dla budowania wysoce skalowalnych i wydajnych aplikacji oraz nieblokujące I / O to tylko niektóre z kluczowych powodów popularności Node.js.

Czy Node.js jest językiem programowania?

Nie, Node.js nie jest językiem programowania. Jest to środowisko uruchomieniowe umożliwiające programistom uruchamianie kodu JavaScript poza przeglądarką internetową.

Czy Node.js jest frameworkiem?

Nie, Node.js nie jest frameworkiem. Jest to środowisko uruchomieniowe, które służy do uruchamiania kodu JavaScript poza przeglądarką internetową. Node.js jest często mylony jako framework, ponieważ zawiera kilka podstawowych bibliotek i interfejsów API, które pomagają programistom tworzyć aplikacje internetowe.

Podsumowanie

Node.js stał się jedną z najpopularniejszych technologii webowych ze względu na swoje extra funkcje, nieblokujący model I/O, który jest sterowany zdarzeniami, skalowalność, wsparcie międzyplatformowe i wydajność. Posiada również jedną z największych społeczności programistów i szeroką gamę bibliotek, które jeszcze bardziej nakręcają jego rozwój.

Jak wiadomo, wszystko ma plusy i minusy, dlatego Node.js, również posiada swoje wady i nie jest idealny do wszystkiego.

Na przykład, Node.js nie nadaje się do zadań wymagających dużej mocy obliczeniowej procesora i wymaga znajomości programowania asynchronicznego. Deweloperzy muszą więc określić swoje wymagania przed wybraniem Node.js jako środowiska uruchomieniowego.

Mam nadzieję, że ten materiał był dla Ciebie przydatny i zapraszam po więcej materiałów.

źródło: https://dev.to/amplication/nodejs-development-all-you-need-to-know-3e78

authorImg

Witek Pruchnicki

Z pasją dzielę się wiedzą o programowaniu i nie tylko na różne sposoby