Що таке унікальне про Node.js? [зачинено]


48

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

Однак, наприклад, у Java, я можу створити лише один потік за допомогою NIO / AIO (який не блокує API з мого голосного розуміння) та обробляти декілька з'єднань за допомогою цього потоку, і я надаю архітектуру на основі подій для реалізації даних поводження з логікою (чи не повинно бути так складно, надаючи якийсь зворотний дзвінок тощо)?

Зважаючи на те, що JVM є ще більш зрілим VM, ніж V8 (я очікую, що він запуститься і швидше), і архітектуру обробки на основі подій, здається, щось не складно створити, я не впевнений, чому Node.js привертає стільки уваги. Чи пропустив я якісь важливі моменти?


3
Мені цікаво, чому це спровоковано ... Я вважаю, що це питання - це більше дискусія з програмування, тому я не ставив у stackoverflow. Я також намагався шукати подібні теми, але я знайшов лише інформацію про силу Nodes.js, але моя проблема полягає в тому, що я не розумію, чому "сила" настільки унікальна (яку я досі не можу знайти)
Адріан Шум

6
Спробуйте застосувати цю схему в Java. Це працює, звичайно. Але ви побачите одне: в Java це буде дуже, дуже багатослівним: вам потрібні тони зворотнього зв'язку, що майже завжди означає створення нових класів. Це могло б звучати як незначна нітпік, але у великій програмі це може стати некрасивим і непристойним досить швидко.
Йоахім Зауер

6
Зворотні виклики Javascript настільки ж схильні до того, що вони стають непростими - і такі спагетті набагато простіше налагоджувати та переробляти на Java, ніж у IMO Javascript.
funkybro

5
@AdrianShum: його ефект косого руху, все, що не вписується у груповий настрій, буде прихильне - як, наприклад, вихваляння Microsoft на /.
gbjbaanb

3
Я здивований, що не бачу, щоб хтось згадував ажіотаж.
deadalnix

Відповіді:


33

Хоча ця концепція справді може бути реалізована на багатьох мовах (і як згадується dodgy_coder , вона реалізована як мінімум у Ruby та Python), це не так тривіально, як ви заявляєте.

Правда, у Java є неблокуючі API IO. Таким чином, ви можете робити необмежений IO диск / мережу. Однак кожен API, який якимось чином завершує або обробляє IO, також повинен бути реалізований неблокуючим способом. Кожен аналізатор XML, кожен драйвер бази даних, кожен перетворювач формату файлів повинні бути записані для підтримки неблокуючого вводу-виводу. Тому що якщо в цій шаблоні блокується одна бібліотека, то це знижує продуктивність ваших серверів до значень кам'яного віку.

Node.js має таку бібліотечну інфраструктуру, тому що вона завжди була розроблена таким чином: кожна бібліотека, яка прагне стати популярною , повинна надавати асинхронний API або вона не буде використовуватися.


18
Так. Іншими словами: найважливіша сила Node.js - це найважливіша слабкість ECMAScript: неймовірно хитра стандартна бібліотека ECMAScript. Оскільки розробникам Node.js довелося все-таки винаходити кожне колесо, вони мали шанс заново його винаходити.
Йорг W Міттаг

4
Ну, наскільки я знаю, ECMAScript завжди був розроблений як вбудована мова, тому не було потреби в API рівня OS будь-якого типу (навіть мережевий IO був в основному відібраний). Цей недолік справді був перевагою для Node.js.
Йоахім Зауер

"кожна бібліотека, яка прагне стати популярною, повинна надавати асинхронний API або його не використовуватиму". Я думаю, що саме це я шукаю. Чи є якийсь ресурс, щоб вивчити, як передбачено асинхронний api, наприклад, для аналізу XML та доступу до БД у Node.js?
Адріан Шум

1
@AdrianShum взагалі шукайте приклади програмування, керовані подіями. Конкретні реалізації можна знайти на багатьох мовах. Окрім модулів Node.js, ви можете переглянути приклади Twisted у Python, twistedmatrix.com/trac/wiki , приклади POE в Perl, poe.perl.org , а у Ruby є EventMachine, github.com/eventmachine/eventmachine
mghicks

19

Можливо, головна причина полягає в тому, що він використовує JavaScript для написання компонентів на стороні сервера для таких речей, як веб-сервери, веб-додатки або веб-сервіси. Це об'єднує традиційну мову розробки JavaScript на передній частині (на стороні клієнта) з мовою на стороні сервера.

Ви маєте рацію - той факт, що він не блокує, використання моделі реактора не є унікальним - це було зроблено до використання інших мов та рамок, таких як, наприклад, Ruby's EventMachine або Python's Twisted.


5
дуже мало технологій мають справді унікальні особливості, унікальність випливає з їх особливого поєднання всіх їх особливостей
jk.

1
Погоджено, тут є список бібліотек, які підтримують його на всіх основних мовах ...
Рисунок

10

Три основні причини, які я б назвав:

  1. Неблокуючий IO / асинхронний IO. Це хеширується всюди в Інтернеті та на попередніх плакатах. Я хотів би внести свій внесок у те, що розробка вашого коду явно передбачає асинхронну поведінку допомагає двигуну компілятора максимально забезпечити обладнання. Так, багато компіляторів JIT та процесорів гіперточення приймають синхронний код і допомагають паралелізувати виконання. Звичайно, це найкращий підхід. На противагу цьому, чітко будуючи додаток для async io, ви гарантуєте, що двигун та обладнання можуть максимально збільшити час виконання вашого коду. Правда, у мене немає даних, які можна оцінити, але це змушує мене всередині думати тепло.

  2. Єдина база коду для клієнта та сервера. Це має ряд переваг: допомогти оптимізувати витрати на центр обробки даних, маючи можливість переміщати бізнес-логіку з сервера на клієнта; допомогти повторно використовувати логіку / перевірку даних; зменшити складність навичок розробника, які необхідно існувати для підтримки продукту (порівняно з Python & javascript).

  3. Низький бар'єр для входу. Багато в чому Javascirpt схожий на Basic, Pascal та Perl за останній рік. Починати писати код дуже просто і не потрібно багато знань про домен, щоб розпочати роботу. Це також сприяє зменшенню витрат на розробку, завдяки можливості залучити більше молодших розробників та отримати репутацію проекту. [Звичайно, вам потрібно обійти стороною ідеологів, які вважають, що мови програмування повинні бути важкими, щоб вилучити низько функціонуючих розробників]


Я не впевнений, що рекомендував би повністю створити команду Node з jr. JS devs. Архітектура насправді не надто, про що ми повинні думати в більшіх проектах веб-інтерфейсів / j-класів, і JS займає стільки часу, щоб отримати справді хороший досвід в плані побудови на тривалий час, як і будь-яка інша мова, навіть якщо ти можеш отримати результати порівняно швидко при меншому рівні досвіду в менш складних проектах, ніж це типово.
Ерік Реппен

Я згоден з @ErikReppen; команда архітектури, що складається повністю з молодших розробників (незалежно від мови) - це як проектувати та будувати будинок повністю, використовуючи столярів, які добре будують стільці, столи та будиночки для собак.
Wildcard
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.