Питання Як вирішити, коли використовувати Node.js?


Я є новим для такого роду речей, але останнім часом я чую багато про те, наскільки добре Node.js є Враховуючи, наскільки я люблю працювати з jQuery і JavaScript взагалі, я не можу не замислюватися, як вирішити, коли використовувати Node.js. Я маю на увазі веб-додаток, щось подібне Нахабно - приймає певний вміст, архівує його.

З усіх домашніх завдань, які я займався в останні кілька днів, я отримав таку інформацію. Node.js

  • це інструмент командного рядка, який можна запустити як звичайний веб-сервер і дозволяє запускати програми JavaScript
  • використовує чудове Движок JavaScript V8
  • дуже добре, коли потрібно одночасно робити кілька речей
  • це заснована на заходах, тому все чудово Ajax-подібний матеріал можна зробити на стороні сервера
  • дозволяє нам використовувати код між браузером та бекендом
  • дозволяє нам говорити з MySQL

Деякі джерела, з якими я зіткнувся, є:

Враховуючи те, що Node.js можна запустити практично за межами вікна Amazon's EC2 Наприклад, я намагаюся зрозуміти, які типи проблем вимагають Node.js, а не будь-яких потужних королів там, як PHP, Python і Рубіни. Я розумію, що це насправді залежить від досвіду, який володіє однією мовою, але моє запитання потрапляє в загальну категорію: коли використовувати конкретну структуру і які саме проблеми це особливо підходить для?


2200
2018-02-21 05:20


походження


Це питання обговорюється на мета (meta.stackoverflow.com/q/332386/497418) - zzzzBov


Відповіді:


Ви зробили чудову роботу, щоб підсумувати, що чудово про Node.js. Я відчуваю, що Node.js особливо підходить для програм, де ви хочете підтримувати постійне з'єднання з браузера на сервері. Використання техніки, відома як "довгоочікувані", ви можете написати програму, яка надсилає оновлення користувачеві в режимі реального часу. Продовжуйте проводити опитування на багатьох гігантів Інтернету, як-от Ruby on Rails або Джанго, створить величезне навантаження на сервер, тому що кожен активний клієнт з'їдає один серверний процес. Ця ситуація становить а берит атака Коли ви використовуєте щось на зразок Node.js, серверу не потрібно зберігати окремі потоки для кожного відкритого з'єднання.

Це означає, що ви можете створити браузерний чат-додаток в Node.js, який майже не має системних ресурсів для обслуговування великої кількості клієнтів. Кожного разу, коли ви хочете зробити такий вид довгого опитування, Node.js - чудовий варіант.

Варто зазначити, що у Ruby та Python обидва є інструменти для виконання такого роду речей (поділювальна машина і кручений, відповідно), але Node.js робить це виключно добре, і згори. JavaScript винятково добре розташована для моделі зорієнтованого на зворотній виклик, і тут вона виграє. Крім того, вміння серіалізувати і десеріалізувати з JSON рідною як для клієнта, так і для сервера є досить витонченим.

Я з нетерпінням чекаю читання інших відповідей тут, це фантастичне питання.

Варто зазначити, що Node.js також чудово підходить для ситуацій, коли ви будете повторно використовувати багато коду через розрив клієнта / сервера. The Метеорна схема робить це дуже легко, і багато людей думають, що це може бути майбутнє веб-розробки. З досвіду я можу сказати, що це дуже весело писати код у Метеорі, і велика частина цього витрачає менше часу на думку про те, як ви збираєтеся реструктурувати свої дані, тому кодекс, який працює в браузері, може легко маніпулювати і передавати його назад.

Ось стаття про піраміду та тривалому опитуванні, яка, здається, дуже проста в налаштуванні, з невеликою допомогою від gevent: TicTacToe і Long Polling з пірамідою.


1359
2018-02-21 05:30



Так, я думаю, що дуже важливо думати, що «node.js особливо підходить для програм, які вимагають постійного з'єднання з браузером на сервер. - такі як чатові програми або інтерактивні ігри. «Якщо ви просто створюєте програму, яка необов'язково потребує зв'язку з користувачем / сервером, розробка з іншими системами буде просто чудовою і займе набагато менше часу. - user482594
Спасибі за це ... Великий Q та A ;-) Я також подумав про це з точки зору освоєння однієї чудової технології для фронту та back-end розвитку на декількох різних;) - Stokedout
Навіщо використовувати довгі опитування? Що сталося з майбутнім і розетки? - hitautodestruct
Моя коротка відповідь - тлановий процес. Запит та відповідь (включаючи API відпочинку) можна досягти будь-якою іншою мовою та сервером. Тож для тих, хто має намір перетворити свої веб-проекти в вузол. Подумайте ще раз те ж саме! Використовуйте вузол як фонове процес, наприклад, читання електронної пошти з IMAP, обробки зображень, завантаження файлів у хмару або будь-яких тривалих або безперервних процесів, які переважно орієнтовані на події ... - Vikas


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

Слід також згадати, що Socket.IO у поєднанні з Node.js зменшить затримку в режимі реального часу навіть далі, ніж це можливо при тривалому опитуванні. Socket.IO відновиться до довгого опитування як найгірший сценарій, а замість цього використовуватиме веб-розетки або навіть Flash, якщо вони доступні.

Але слід також згадати, що практично будь-яка ситуація, коли код може блокуватись через потоки, можна краще вирішити за допомогою Node.js. Або будь-яка ситуація, коли вам потрібно, щоб програма була керованою подіями.

Також Райан Дал сказав у бесіді, що я колись відвідував те, що тести Node.js тісно конкурують з Nginx для регулярних старих HTTP-запитів. Отже, якщо ми будуємо з Node.js, ми можемо досить ефективно обслуговувати наші звичайні ресурси, і коли нам потрібні заходи, керовані подіями, вони готові впоратися з цим.

Плюс це все JavaScript весь час. Lingua Franca на весь стек.


410
2018-02-21 06:43



Просто спостереження від когось, що перемикається між .Net та Node, різні мови для різних областей системи допомагають багато чого, коли контекстне перемикання. Коли я дивлячись на Javascript, я працюю в Клієнту, C # означає сервер додатків, SQL = база даних. Працюючи в Javascript у всьому, я вважаю, що я заплутаю шари або просто забираю довше до контекстного перемикача. Це, швидше за все, артефакт роботи на .NET стека весь день і ночі вночі, але це має значення. - Michael Blackburn
Цікаво, що практика міжкультурних індивідів, що перемикають діалекти при переміщенні між основними та вітчизняними культурами, називається "кодовим перемиканням". - Michael Blackburn
Протягом дня я думав про те, як я міг би перейти на те, щоб присвоїти різні кольори для мого іншого .js як-небудь файли. Зелений на стороні клієнта, блакитний на стороні сервера. Я продовжую отримувати себе "втраченим". - AJB
Краща відповідь. Наприклад, node.js є фантастичним для однолітків. - cpugourou


Причини використання NodeJS:

  • Він запускає Javascript, так що ви можете використовувати однакова мова на сервері та клієнті, і навіть поділитися деяким кодом між ними (наприклад, для перевірки форми або для відтворення переглядів на обох кінцях).

  • The однопоточний Система, керована подіями, є швидко навіть при роботі з безліччю запитів відразу, а також простими, у порівнянні з традиційними багатопотоковими Java або ROR рамки.

  • Постійно зростаючий басейн пакети доступна через НПМ, включаючи клієнтські та серверні бібліотеки / модулі, а також інструменти командного рядка для веб-розробки. Більшість з них зручно розміщуються на github, де іноді ви можете повідомити про проблему та знайти її протягом декількох годин! Приємно мати все під одним дахом, з уніфікованим звітуванням про випуск і легким віджиманням.

  • Це стало дефакто-стандартним середовищем, в якому бігати Інструменти, пов'язані з Javascript та інші веб-пов'язані інструменти, включаючи завдання бігунів, мініфайли, прикраси, лінтери, препроцесори, группники та аналітичні процесори.

  • Це здається цілком підходящим для прототипів, гнучкого розвитку і швидка ітерація продукту.

Причини ні використовувати NodeJS:

  • Він запускає Javascript, який не має перевірки типу часу компіляції. Для великих, складних безпека критична системи або проекти, включаючи співробітництво між різними організаціями, мова, яка заохочує договірні інтерфейси і забезпечує перевірка статичного типу може зберегти вам час налагодження (і вибухи) в довгостроковій перспективі. (Хоча JVM застряг null, тому, будь ласка, використовуйте Haskell для своїх ядерних реакторів.)

  • До того ж, багато пакетів в NPM є трохи сирий, і все ще бурхливо розвивається. Деякі бібліотеки для старих каркасів зазнали десятиліття тестування та виправлення помилок, і це дуже сильно стабільний до тепер. Npmjs.org не має механізму оцінювання пакетів, що призвело до розповсюдження пакунків, що виконують більш-менш однакові дії, з яких більший відсоток більше не підтримується.

  • Вкладене зворотне дзвінок пекло. (Звичайно, є 20 різних рішень до цього...)

  • Постійно зростаючий пул пакетів може зробити один NodeJS проект з'являється радикально різні з іншого. Існує велика різноманітність реалізацій через величезну кількість доступних варіантів (наприклад, Express /Sails.js/Метеор/Дербі) Іноді це може ускладнити новий розробник, щоб перейти на проект вузла. Контраст, що з а Рейки розробник, який приєднується до існуючого проекту: він повинен мати можливість швидко ознайомитися з програмою, тому що всі програми Rails рекомендуються використовувати подібна структура.

  • Робота з файлами може бути трохи біль. Речі, які є тривіальними в інших мовах, наприклад, читання рядка з текстового файлу, є досить дивно, що робити з Node.js що існує запитання про StackOverflow, що містить 80 + upvotes. Там немає простих способів одночасно читати один запис із файлу CSV. І т. Д.

Я люблю NodeJS, це швидко і дико, і весело, але я стурбований тим, що він не має великого інтересу до достовірності. Будемо сподіватися, що ми зможемо в кінцевому підсумку зливати найкраще з обох світів. Я хочу побачити, що замінить вузол у майбутньому ... :)


209
2017-11-25 21:47



@nane Да, я думаю, що вони можуть вирішити цю проблему, однак ви повинні потім обмежити себе використовувати лише бібліотеки, написані на мовах типу, або прийняти їх не так весь ваш кодовий блок статично введено. Але йдеться про один аргумент: оскільки ви повинні писати хороші тести за ваш код, незалежно від мови, то ваш рівень довіри повинен бути рівним навіть для динамічно набраного коду. Якщо ми приймемо цей аргумент, то переваги сильного набору тексту зменшуються, щоб допомогти розвинутий / налагоджувальний час, доказовість і оптимізація. - joeytwiddle
@Кервін, я погоджуюсь, що деякі тести будуть чудовими, але я був розчарований тим, що міг знайти в Інтернеті. Деякі стверджують, що продуктивність .NET є порівнянний до вузла, але важливо, що ви насправді робите. Вузол може бути чудовим у доставці маленьких повідомлень з багатьма паралельними з'єднаннями, але не так великий для важких математичних розрахунків. Для гарного порівняння продуктивності потрібно буде протестувати різні ситуації. - joeytwiddle
@joeytwiddle не буде те, як Typescript, допоможе Node.js, коли справа стосується обробки великих складних програм та статичного типову перевірки? - CodeMonkey
@joeytwiddle за те, що це коштує, ви можете використовувати stillmaintained.com щоб визначити, чи зберігається пакет ні NMP (як більшість з них на github). В додаток, npm search і npm show покаже вам дату останнього випуску пакета. - Dan Pantry
Порівнюючи рейки з вузлом, ви заплутуєте платформу до структури. Rails є основою для Ruby, подібно до вітрил та метеорів для Javascript. - BonsaiOak


Щоб зробити це коротким:

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

Хороша стаття про цикл події в Node.js - це Технічний блог Mixu: Розуміння циклу подій node.js.


208
2018-01-15 01:48





У мене є один реальний приклад, де я використав Node.js. Компанія, в якій я працюю, отримала одного клієнта, який хотів мати простий статичний веб-сайт HTML. Цей веб-сайт призначений для продажу одного товару за допомогою PayPal і клієнт також хотів мати лічильник, який показує кількість проданих товарів. Клієнт мав величезну кількість відвідувачів на цьому веб-сайті. Я вирішив зробити лічильник за допомогою Node.js і Express.js рамки

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

Деякі причини, чому я вирішив скористатися Node.js у цьому випадку

  1. Це дуже легкий і швидкий. На цьому веб-сайті протягом трьох тижнів було зафіксовано понад 200000 візитів, і мінімальні ресурси серверів змогли впоратися з усім цим.
  2. Лічильник дійсно легко зробити в реальному часі.
  3. Node.js було легко налаштувати.
  4. Безкоштовно доступно безліч модулів. Наприклад, я знайшов модуль Node.js для PayPal.

У цьому випадку Node.js був чудовим вибором.


127
2018-05-31 06:34



Як ви хочете щось подібне? Чи потрібно вам встановити nodejs на виробничому сервері? В Linux? - Notflip
Є кілька PaaSs, таких як Ундзітсу та Хероку. Або ви дійсно можете налаштувати nodejs на поле linux, тобто з Amazon ec2. побачити: lauradhamilton.com/... - Sam Ames
200 000 відвідувань протягом 1814,400 секунд. Не стосується взагалі. Навіть bash може служити такому багато запитів, на самий повільний сервер. Скретч-сервер. Найменша вібрація. - Tiberiu-Ionuț Stan


Найважливіші причини для початку вашого наступного проекту за допомогою вузла ...

  • У це найдурніші хлопці ... це так повинен будь весело
  • Ви можете спілкуватися в холодильнику і мати багато пригод з вулицею, щоб похвалитися.
  • Ви коштуєте копійки копійки, коли мова заходить про витрати хмарних хостів.
  • Там було зроблено це з Rails
  • Ви ненавидите розгортання IIS
  • Ваша стара ІТ-робота стає досить нудна, і ви хочете, щоб ви знаходилися в блискучому новому Start Up.

Чого очікувати ...

  • Ви почуватиметесь в безпеці з Express без будь-якої серйозної віруси, яка вам ніколи не потрібна.
  • Працює, як ракета, і добре лупає.
  • Ти мрієш про це. Ви його встановили. Пакет вузла repo npmjs.org є найбільшою екосистемою бібліотек з відкритим кодом у світі.
  • Ваш мозок отримає час, деформувався у землі гніздових зворотних викликів ...
  • ... аж поки ти не навчишся тримати тебе Обіцянки.
  • Послідовно і Паспорт Ваші нові друзі API.
  • Налагодження в основному асинхронного коду отримає umm ... цікаво .
  • Час для всіх Нодерів опанувати Типовий текст.

Хто це використовує?


105
2018-06-12 13:24



Так, я міг відповісти на це питання традиційним способом. Я думаю, що я маю кваліфікацію, щоб зробити це, але більшість з них вже сказано, і я думав, що деяке легке серце весело розірве одноманітність. Я регулярно надаю технічні відповіді на інші питання. - Tony O'Hagan
+1 "Налагодження в основному асинхронного коду отримає umm ... цікаво". - Jackson
Вкладені зворотні виклики можна уникнути, використовуючи генератори ES6 для коду асинхронного коду - refactor
@CleanCrispCode: Так, дійсно! ES6 прийняв стиль C # async/await так що тепер ми можемо вивести набагато більш чистий асинхронний код вузла, який також підтримує традиційні try/catch. У 2016/17 JS програмісти перемикаються на ES6. - Tony O'Hagan
десять тисяч разів це "Ви почуватиметесь в безпеці з Express без будь-якого серпорту, який ви ніколи не потребували" - Simone Poggi


Немає нічого, як срібна куля. Все це пов'язано з деякими витратами. Це схоже на те, що ви їсте жирну їжу, ви поставите під загрозу ваше здоров'я, і ​​здорова їжа не припадає на спеції, як жирна їжа. Це індивідуальний вибір, чи хочуть вони здоров'я або спеції, як у їжі. Той самий спосіб Node.js вважатимуть використаним у конкретному сценарії. Якщо ваш додаток не підходить для цього сценарію, не слід враховувати це для розробки вашого додатка. Я просто поклав свою думку на те ж саме:

Коли використовувати Node.JS

  1. Якщо код вашого сервера вимагає дуже мало циклів процесорів. В іншому світі ви виконуєте операцію, що не блокує, і не має важкого алгоритму / Job, який споживає багато циклів процесора.
  2. Якщо ви з Javascript повертаєтеся до землі і зручно в письмовій формі одноручного коду, точно так само, як клієнтська сторона JS.

Якщо НЕ використовувати Node.JS

  1. Ваш запит на сервер залежить від алгоритму / завдання, що споживає важкий процесор.

Розгляд масштабованості з вузлом .JS

  1. Сама Node.JS не використовує всі основні базові системи, і вона за замовчуванням є однією нарізною, ви повинні самостійно писати логіку для використання багатоядерного процесора і зробити його мультипоточеним.

Node.JS Альтернативи

Є інший варіант використання замість Node.JS проте Vert.x здається досить перспективним і має безліч додаткових функцій, таких як полігон і кращі масштабованості.


60
2018-04-05 17:17



Я не впевнений в тому, що "якщо ваш запит на серверний сервер включає блокування операцій, таких як File IO або Socket IO", перелічені в "НЕ використовувати". Якщо моє розуміння правильно, однією з сильних сторін node.js є те, що вона має потужні асинхронні засоби для обробки IO без блокування. Таким чином, Node.js можна розглядати як "ліки" для блокування IO. - Ondra Peterka
@OndraPeterka: Ви маєте рацію, що Node.js використовується для блокування сервера IO, однак, якщо обробник запиту на сервері самостійно робить виклик блокування для деяких інших операцій веб-служби / Файл, Node.js тут не допоможе. Це не блокує IO тільки для вхідних запитів до сервера, але не для вихідного запиту з вашого обробника запиту додатка. - ajay
@jay від nodejs.org вони кажуть "неблокуючий введення / виведення", будь ласка, перевірте "Коли НЕ" 2 і 3. - Omar Al-Ithawi
з поточною версією, вузол насправді підтримує багатоядерну підтримку за допомогою кластера. Це дійсно підвищить ефективність програми Node принаймні двічі. Однак, я думаю, продуктивність повинна бути більш ніж двічі, коли вони стабілізують кластер lib. - Nam Nguyen
Ви можете використовувати node.js для важких обчислень. Використовуйте fork. Побачити stackoverflow.com/questions/9546225/.... Вузол добре управляє кількома ядрами cluster модуль nodejs.org/api/cluster.html - Jess


Ще одна чудова річ Я думаю ніхто не згадав про Node.js - дивовижна спільнота, система керування пакунками (npm) і кількість модулів, які існують, які ви можете включити, просто включивши їх у ваш файл package.json.


41
2018-06-06 17:42



І ці пакунки є відносно свіжими, тому вони мають перевагу в минулому і мають тенденцію відповідати останнім веб-стандартам. - joeytwiddle
З усією повагою багато пакетів на npm страшні, тому що npm не має механізму оцінювання пакетів. Задні очі від CPAN хтось? - Dan Dascalescu
занадто погано, жоден з бібліотек веб-банкоматів не може задовольнити специфікації RFC 6455. Фани-вузли node.js є глухими, німими та сліпими, коли цей факт дано. - r3wt
Я не знаю, коли ви зробили коментар, але на даний момент бібліотека ws підтримує цю специфікацію - Jonathan Gray


Моя частина: nodejs чудово підходить для створення систем реального часу, таких як аналітика, чат-додатки, apis, рекламні сервери тощо. Чорт, я зробив моє перше чатове додаток, використовуючи nodejs і socket.io, до 2 годин і теж під час іспиту тиждень!

Редагувати

Пройшло кілька років з моменту, коли я почав використовувати nodejs, і я використовував його у створенні різних рішень, включаючи статичні файлові сервери, прості аналітики, додатки чату та багато іншого. Це мій підхід до того, коли використовувати nodejs

Коли використовувати

При створенні системи, яка робить акцент на паралелі та швидкості.

  • Сокетів використовуються лише такі сервери, як програми чату, програми IRC і т. Д.
  • Соціальні мережі, які підкреслюють ресурси в реальному часі, такі як геолокація, відеопотік, аудіопотік тощо.
  • Обробка невеликих шматків даних дуже швидко, як веб-аналітика.
  • Як піддавати REST тільки api.

Коли не користуватися

Це дуже універсальний веб-сервер, так що ви можете використовувати його там, де ви хочете, але, ймовірно, не ці місця.

  • Прості блоги та статичні сайти.
  • Так само, як статичний файловий сервер.

Майте на увазі, що я просто нітрирує. Для статичних файлових серверів апех краще в основному тому, що він широко доступний. Всесезонна спільнота з часом зростала і стала більш зрілою, і безпечно сказати, що nodejs можна використовувати практично скрізь, якщо у вас є власний вибір хостингу.


37
2018-05-06 13:52



Прості блоги можуть все одно використовувати Node.js. Для обслуговування статичних файлів, ви все ще можете використовувати Node.js, і якщо завантаження збільшується, просто додайте до нього зворотний проксі Nginx, відповідно до поточних найкращих практик. Apache httpd server - це динозавр, який помирає - див це опитування Netcraft. - Endrju
Я б сказав інше - подивіться на це ghost.org, виглядає неймовірно і побудований на вершині NodeJs - співпраці, редагування статті в режимі реального часу. Крім того, створення простої сторінки в NodeJs, скажімо, використання sailsjs.org, це легко, швидко, і вам не потрібно турбуватись, вивчаючи будь-які мови програмування на стороні сервера - Bery