Jak czuję twój ból!
Podobnie jak wielu, trudno mi było dotrzeć do istoty Node.js, ponieważ większość ludzi pisze / mówi tylko o tej części Node, którą uważają za przydatną - a część, którą uważają za interesującą, jest zwykle drugorzędną zaletą Node, a nie jej główną cel, powód. Muszę powiedzieć, że uważam, że to szaleństwo, gdy ludzie mówią, że Node to tylko środowisko wykonawcze JavaScript. Wykorzystanie przez Node JavaScript - i jego wybór środowiska wykonawczego V8 - to po prostu sposób na zakończenie , najlepsze narzędzia do rozwiązania problemu, który programiści Node chcieli rozwiązać.
Głównym celem Node było usprawnienie zarządzania zdarzeniami użytkowników w aplikacji internetowej. Więc Node jest w przeważającej mierzeużywane na zapleczu aplikacji internetowej. Zarządzanie zdarzeniami wymaga, aby coś nasłuchiwało na serwerze pod kątem tych zdarzeń użytkownika. Dlatego należy skonfigurować serwer http, aby kierował każde zdarzenie do odpowiedniego skryptu obsługi. Węzeł zapewnia strukturę do szybkiego konfigurowania serwera do nasłuchiwania żądań użytkowników na dedykowanym porcie. Węzeł używa JavaScript do obsługi zdarzeń, ponieważ JavaScript ma funkcje zwrotne: pozwala to na zawieszenie jednego zadania do czasu zwrócenia wyniku zadania zależnego. Niewiele innych języków ma tę funkcję, a te, które ją mają, mogą nie mieć tak wydajnego interpretera jak środowisko wykonawcze Google V8. Większość programistów internetowych zna JavaScript, więc nie ma dodatkowej nauki języka z Node. Co więcej, posiadanie funkcji zwrotnych pozwala na umieszczenie wszystkich zadań użytkownika w jednym wątkubez jawnego blokowania zadań wymagających dostępu do bazy danych lub systemu plików. I to właśnie prowadzi do doskonałej wydajności wykonawczej Node przy intensywnym, równoczesnym użyciu - jest to główny cel jego rozwoju.
Aby pomóc użytkownikom Node w szybkim pisaniu kodu zaplecza, programiści Node zorganizowali również wbudowaną bibliotekę JS do rutynowych zadań (np. Spraw związanych z żądaniami HTTP, kodowaniem ciągów znaków, strumieniami itp.) Oraz repozytorium NPM (Node Package Manager) : jest to otwarty, obsługiwany przez użytkownika zestaw pakietów skryptów dla różnych funkcji standardowych i niestandardowych. Wszystkie projekty Node umożliwiają importowanie pakietów NPM do projektu za pomocą ustalonego polecenia instalacji npm .
Żądania użytkowników obsługiwane przez Node będą wymagały aplikacji sieciowej, takich jak uwierzytelnianie, zapytania do bazy danych, zarządzanie treścią (Strapi CMS) itp. Wszystko to zostanie wysłane do portu Node. (Tam, gdzie analiza danych pobranych z bazy danych zajmuje dużo czasu procesora, ten typ procesu najlepiej umieścić w osobnym wątku, aby nie spowalniał prostszych żądań użytkownika). Inne typy żądań użytkownika, np. W celu załadowania innej strony internetowej , pobieranie plików CSS / JS / obrazów itp. będzie nadal wysyłane przez przeglądarkę do domyślnych portów na serwerze, na którym będzie je obsługiwał program serwera WWW (Apache, NGinx itp.).
Tak więc w praktyce Node jest zasadniczo strukturą do szybkiego tworzenia serwera i obsługi zdarzeń, ale zastępuje tylko niektóre funkcje programu serwera WWW.
Inne zastosowania Node niezwiązane z zapleczem po prostu wykorzystują jedną lub drugą z jego funkcji, np. Silnik V8. Na przykład, narzędzia do budowania frontendu Grunt i Gulp używają Node.js do przetwarzania skryptu kompilacji, który można zakodować w celu konwersji SASS do CSS, minimalizacji plików CSS / JS, optymalizacji rozmiaru / ładowania obrazu itp. Ale ten rodzaj pracy jest naprawdę tylko uboczne wykorzystanie Node, a nie jego główne zastosowanie, które polega na tworzeniu wydajnych procesów zaplecza dla aplikacji internetowych.