Чим Node.js відрізняється від інших систем на сервері?


21

Я помітив, що Node.js став дуже популярним, і я бачив кілька випадків, коли люди роблять в ньому дрібні проекти.

Я також розглядав плюси і мінуси, щоб отримати уявлення про те, що може зробити Node.js, але мені все ще не зрозуміло, чим він відрізняється від інших, більш зрілих технологій на стороні сервера, таких як PHP, Perl або Ruby на Рейки.

Що, зокрема, відрізняє Node.js від поточних альтернатив і чому?


1
@downvoter - чому downvote? за винятком другого параграфа (ви не можете насправді запитати, навіщо щось починати, коли хтось інший зробив це, тому що ви завжди могли це зробити краще), я вважаю це питання інтригуючим. Я сам часто думав про це.
Девід Пітерман

Це незначна нітка для вибору, але якщо ви перейдете в Google за цитованою фразою "node.js", ви отримаєте близько 3 мільйонів звернень.
Пітер Роуелл

@ Петер, так, я спробував це, і ти маєш рацію. Але 3 мільйони - це все-таки два. Ви можете повернутися через рік, і ця цифра, ймовірно, перевищила 10 мільйонів. :)
Saeed Neamati

3
@ Марк, дякую за видатні зміни. Зараз зрозуміліше.
Saeed Neamati

Відповіді:


18

Є дві важливі речі, які відрізняють Node.js від існуючих на сервері каркасів, асинхронних подій та використання JavaScript як мови програмування.

Асинхронні події

Хоча більшість існуючих рамок на стороні сервера використовують синхронну архітектуру, Node.js використовує асинхронну архітектуру, з якою JavaScript може добре працювати. Це означає, що сервер реагує на події та посилає події (повідомлення), наприклад, до бази даних. Цей стиль програмування сильно відрізняється від синхронного стилю і може бути важким для використання з іншими мовами. Node.js використовує асинхронний стиль з асинхронним IO і може добре масштабувати.

Див. Також Архітектура, керована подіями

JavaScript

JavaScript - це мова програмування, яку веб-додатки використовують на клієнті. Використання тієї ж мови на стороні сервера означає, що розробник може застосовувати свої знання JavaScript як на клієнті, так і на сервері, а також використовувати ті самі функції, що і потрібно.

Я б рекомендував презентацію Вступ до Node.js з Райаном Далом, де він детальніше пояснює архітектуру, керовану подіями Node.js.


2
Це легко найкраща відповідь поки що, але я ставлю асинхронні події на перше місце, оскільки це дійсно те, що робить Node.js настільки привабливим як серверна основа. Хоча хороша робота, згадуючи асинхронний введення / вивід та масштабованість. Оце в цьому серце.
Адам Кросленд

Ну @ Jonas, я все ще не розумію. ASP.NET також заснований на заходах. Тоді в чому різниця між Node.js і ASP.NET? Це лише тому, що він асинхронний? У такому випадку я думаю, що використання багатопотокової передачі в ASP.NET може зробити те саме, чи не так?
Saeed Neamati

3
@Saeed: ASP.NET є потоковим і синхронним, наприклад, при доступі до бази даних потік блокується і чекає відповіді з бази даних. І при використанні багатьох потоків (наприклад, один на запит) використовується багато пам'яті (кожен потік потребує досить великого обсягу пам'яті), що може бути вузьким місцем. Node.js надсилає повідомлення та реагує на події, тому він ніколи (сподіваємось) не блокує нитку. Для node.js ви використовуєте ту саму модель програмування, що і на стороні клієнта, з Ajax ( Асинхронний javascript та XML), і ту ж мову.
Йонас

Ви забули велику спільноту з відкритим кодом за нею.
Райнос

3
Коли C # 5 розгортається з новими asyncматеріалами, хоча це може змінитися. Справа не в тому, що ви не можете писати масштабований асинхронний код іншими мовами, це складніше зробити (правильно) без належної підтримки рівня мови.
Davy8

6

Це відрізняється тим, що керується подіями . Це робить сервер високомасштабним.

Коротко;

Модель нитки

  1. Клієнт щось просить
  2. Сервер вимикається та обробляє запит
  3. Повертає його клієнту
  4. Готовий обробити новий запит

Модель події

  1. Клієнт щось просить
  2. Сервер передає запит на обробку. Готовий обробити новий запит
  3. Сервер обробляє більше запитів, коли вони надходять
  4. Сервер повертає клієнту дані, коли запит закінчується обробкою

@Tom, що ви маєте на увазі під подіями? ASP.NET WebForms також подієвий і ви можете побачити обробники як Session_Startedабо Context_Authenticatedабо Page_Load?
Саїд Неаматі

1
Називати його на основі подій більш неоднозначно, ніж потрібно, і це насправді не потрапляє до серця Node.JS: асинхронний введення-виведення.
Адам Кросленд

2

У мене склалося враження, що популярність була завдяки використанню JavaScript. Оскільки багато веб-розробників знають JavaScript, то тепер вони можуть продавати код на стороні сервера, використовуючи ту саму мову. У цьому є кілька переваг, про які я можу придумати:

  • Файли коду можна спільно використовувати між сервером і клієнтом, запобігаючи дублюванню зусиль просто для обробки двох сторін системи.
  • Розробникам не потрібно подумки переключатися між мовами. (на мою думку не велика справа)
  • Архітекторам не потрібно вибирати кілька мов під час створення веб-рішення.
  • Хтось, хто ніколи не розробляв код на стороні сервера, може це зробити без вивчення іншої мови. (Це, мабуть, не буде цінним аргументом, ІМХО)

Node.JS популярний тим, що він швидкий і добре масштабує. Що це в JavaScript, це приємно, але багато в чому випадково.
Адам Кросленд

2
Що ще цінніше те, що розробники на стороні сервера можуть записувати код на стороні клієнта тією ж мовою, і що ви можете обмінюватися серверними модулями з клієнтом. Не навпаки. Я не хотів би портувати зламаний код на стороні клієнта на сервер, це стріляє себе в ногу.
Райнос

@Adam: Чому node.js стає популярним, коли вже є технології, що відповідають опису "швидко та добре масштабувати"? - Тому що це JavaScript.
Джон Фішер

@John Складніше писати програми, які не змінюють масштаби в Node.js. Якщо ваш додаток інтенсивніше на диску / мережі, ніж на процесорі (яких більшість є), ви можете легко підтримувати в багато разів більше одночасних з'єднань на одному ядрі, ніж більшість інших серверів, якщо ви не пишете якийсь дуже складний код для нарізки.
Davy8

@ Davy8: Я думаю, що все залежить від інших використовуваних рамок / систем. Легкість масштабованості, яку ви описуєте, вже проста за допомогою інструментів, якими я користуюся. Єдине, що пропонує Node.js з моєї точки зору - це аромат JavaScript, який не є переконливим.
Джон Фішер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.