Niedawno pojawiło się wiele pochwał dla Node.js. Nie jestem programistą, który miał duży kontakt z aplikacjami sieciowymi. Z mojego własnego zrozumienia Nodes.js wynika, że jego siła: mamy tylko jeden wątek obsługujący wiele połączeń, zapewniając architekturę opartą na zdarzeniach.
Jednak na przykład w Javie mogę utworzyć tylko jeden wątek za pomocą NIO / AIO (który nie jest blokującym interfejsem API z mojego własnego zrozumienia) i obsłużyć wiele połączeń za pomocą tego wątku, a także zapewniam architekturę opartą na zdarzeniach w celu zaimplementowania danych obsługa logiki (nie powinno to być trudne przez zapewnienie oddzwonienia itp.)?
Biorąc pod uwagę, że JVM jest jeszcze bardziej dojrzałą maszyną wirtualną niż V8 (spodziewam się, że będzie również działać szybciej), a architektura obsługi oparta na zdarzeniach wydaje się być czymś trudnym do stworzenia, nie jestem pewien, dlaczego Node.js przyciąga tak wiele uwagi. Czy przegapiłem kilka ważnych punktów?
źródło
Odpowiedzi:
Chociaż koncepcja ta może być rzeczywiście zaimplementowana w wielu językach (i jak wspomniano dodgy_coder , została zaimplementowana przynajmniej w Ruby i Pythonie), nie jest tak trywialna, jak twierdzisz.
To prawda, że Java ma nieblokujące interfejsy API we / wy. Możesz więc wykonywać surowe operacje dyskowe / sieciowe we / w w sposób nieblokujący. Jednak każdy interfejs API, który w jakiś sposób pakuje lub obsługuje operacje we / wy, musi zostać zaimplementowany również w sposób nieblokujący. Każdy parser XML, każdy sterownik bazy danych, każdy konwerter formatu pliku musi być napisany w celu obsługi nieblokującego We / Wy. Ponieważ jeśli jedna biblioteka blokuje ten wzorzec, obniża to wydajność serwerów do wartości z epoki kamienia.
Node.js ma tę infrastrukturę biblioteczną, ponieważ zawsze była zaprojektowana w ten sposób: każda biblioteka, która chce stać się popularna, musi zapewnić asynchroniczny interfejs API, w przeciwnym razie nie będzie używana.
źródło
Prawdopodobnie głównym powodem jest to, że wykorzystuje JavaScript do pisania komponentów po stronie serwera do takich rzeczy, jak serwery sieciowe, aplikacje internetowe lub usługi sieciowe. Ujednolica to tradycyjny język programowania JavaScript (front-end) po stronie klienta z językiem po stronie serwera.
Masz rację - fakt, że nie jest blokujący, użycie wzorca reaktora nie jest unikalne - zostało to zrobione przed użyciem innych języków i struktur, takich jak na przykład EventMachine Ruby lub Twisted Pythona.
źródło
Trzy główne powody, dla których podałbym to:
Nieblokujące We / Wy / Asynchroniczne We / Wy. Jest to mieszane wszędzie w Internecie i na poprzednich plakatach. Jedną z rzeczy, które chciałbym wnieść do projektu, jest to, że zaprojektowanie kodu tak, aby wyraźnie zakładał zachowanie asynchroniczne, pomaga silnikowi kompilatora w maksymalizacji sprzętu. Tak, wiele kompilatorów JIT i procesorów hyperthreading pobiera kod synchroniczny i pomaga w równoległym wykonywaniu. Jest to oczywiście podejście oparte na najlepszym wysiłku. W przeciwieństwie do jawnego budowania aplikacji do asynchronizacji masz pewność, że silnik i sprzęt mogą zmaksymalizować czas wykonywania kodu. Trzeba przyznać, że nie mam danych, które mogłyby to udowodnić, ale myślenie w ten sposób sprawia, że czuję się ciepło.
Jedna baza kodu dla klienta i serwera. Ma to wiele zalet: pomaga zoptymalizować koszty centrum danych, przenosząc logikę biznesową z serwera na klienta; pomóc ponownie wykorzystać logikę biznesową / sprawdzanie poprawności danych; zmniejszyć złożoność umiejętności programistycznych, które muszą istnieć, aby obsługiwać produkt (w porównaniu do Pythona i javascript).
Niska bariera wejścia. Pod wieloma względami Javascirpt jest jak Basic, Pascal i Perl z zeszłego roku. Rozpoczęcie pisania kodu jest bardzo łatwe i nie wymaga dużej wiedzy na temat domeny. Pomaga to również obniżyć koszty programowania, ponieważ pozwala przyciągnąć więcej programistów jr i przyspieszyć realizację projektu. [Oczywiście musisz ominąć ideologów, którzy uważają, że języki programowania powinny być trudne, aby wyeliminować słabo działających programistów]
źródło