Від перекладача: Я тільки починаю придивлятися до Node.js, і, виявивши це керівництво, сильно пошкодував, що воно не попалося мені на очі раніше. Сподіваюся, що цей переклад допоможе багатьом розібратися, що ж таке Node, і з чим його їдять.
- Погані варіанти
- Важкі обчислення
- Прості програми CRUD/HTML
- NoSQL + Node.js + Будь-яка модна фігня
- Гарні варіанти
- JSON API
- Односторінкові програми
- Використання інструментів командного рядка
- Потокова обробка даних
- Системи м "якого реального часу
- Як же переконати начальство?
- Зробіть прототип
- Де взяти розробників?
- Активна спільнота
- Продуктивність
- Підтримка великих корпорацій
- Як переконати клієнта?
У вас вже чешуться руки спробувати Node.js і пора починати обробляти начальство? Не поспішайте! Для деяких компаній, які я консультував на предмет того, чи підходить їм Node.js, правильна відповідь була - «Ні!»
Це керівництво - набір заснованих на моєму особистому досвіді порад для тих, хто хоче дізнатися, чи має сенс застосовувати Node у себе в компанії, і, якщо так, то як переконати в цьому начальство.
Погані варіанти
Важкі обчислення
Хоч я і люблю Node.js, але є кілька випадків, коли його застосування позбавлене сенсу. Найочевидніший з них - програми з тривалими складними обчисленнями і невеликою кількістю операцій введення-виведення. Отже, якщо ви збираєтеся писати перекодувальник відео, штучний інтелект або ще яку цифродробілку, будь ласка, не використовуйте Node.js. Це в принципі можливо, але краще писати на C/C + +.
З іншого боку, node.js дозволяє легко писати доповнення на C++, так що ви, звичайно, можете використовувати його як скриптовий движок поверх ваших надсекретних алгоритмів.
Прості програми CRUD/HTML
Хоча Node.js може з часом стати класним інструментом для будь-яких типів веб-додатків, поки не варто сподіватися, що він дасть вам більше переваг порівняно з PHP, Ruby або Python. Так, ваш додаток може вийти трохи краще масштабованим, але те, що він зможе справлятися з великим потоком трафіку, не означає, що цей потік раптом збільшиться тільки від того, що ви використовували Node.
Незважаючи на те, що зараз вже з'являються непогані фреймворки для Node, поки ще й близько немає нічого порівнянного з Rails, CakePHP або Django. Якщо ваш додаток в основному займається заповненням шаблонів HTML даними з бази, Node.js поки не дасть вам якихось відчутних переваг.
NoSQL + Node.js + Будь-яка модна фігня
Якщо архітектура вашого майбутнього додатка нагадує збірку рецептів із серії «Кухні народів NoSQL», видихніть, зробіть паузу і прочитайте наступний абзац.
Так, Redis, CouchDB, Cassandra, MongoDB, Riak і так далі виглядають дуже апетитно. Приблизно, як те яблучко, яким спокусилася Єва. Ви вже ризикуєте, використовуючи Node.js, і вам не варто посилювати цей ризик ще однією новою технологією, в якій ви, швидше за все, поки не розібралися до кінця.
Звичайно, можна знайти багато аргументів на користь документ-орієнтованих БД, але якщо ваш додаток повинен приносити прибуток, надійність використання перевірених технологій (Postgres або MySQL) повинна бути для вас важливіше можливості підняти своє гіківське ЧСВ і похвалитися перед друзями.
Гарні варіанти
JSON API
Node.js блискуче справляється з побудовою легковагових REST/JSON інтерфейсів.
Неблокуюче введення-виведення та JavaScript роблять Node відмінним варіантом для написання обгортки навколо бази даних або веб-сервісу, яка спілкується з клієнтом у форматі JSON.
Односторінкові програми
Якщо ви пишете складний AJAX-додаток на кшталт Gmail, Node теж дуже хороший. Для сучасних веб-програм, що роблять більшу частину роботи в браузері, відмінно підходить сервер, який може одночасно обробляти тисячі запитів і має низький час відгуку. Можливість повторного використання одного і того ж коду, наприклад валідації, на сервері і клієнті - теж плюс.
Використання інструментів командного рядка
Поки Node.js ще дуже молодий, є спокуса написати спеціально для нього все, що тільки може знадобитися. Але може бути набагато вигіднішим використовувати величезний вибір існуючих інструментів командного рядка. Node здатний породжувати тисячі дочірніх процесів і працювати з їх вихідними потоками даних, що може дати серйозні переваги тим, хто не хоче винаходити велосипеди.
Потокова обробка даних
Традиційні стіки веб-програм зазвичай трактують запити та відповіді HTTP, як атомарні події. Але насправді це потоки, і програми Node.js можуть скористатися цим фактом. Відмінні приклади - обробка файлів під час завантаження на сервер або передача даних між різними шарами.
Системи м "якого реального часу
Ще одна відмінна риса Node.js - легкість, з якою можна створювати системи м'якого реального часу. Я маю на увазі штуки на кшталт Твіттера, чатів, прийому ставок на спортивні події або інтерфейсів до IM-протоколів.
Тільки будьте обережні! Це JavaScript, і час відгуку може сильно варіювати, якщо раптом вклиниться збирач сміття (який, на жаль, блокує потік виконання JavaScript). Тож не намагайтеся побудувати на Node систему жорсткого реального часу з гарантованим часом відгуку. Для цього набагато краще підійде Erlang.
Як же переконати начальство?
Тепер, якщо ви впевнені, що Node.js вам підходить, час переконати начальство спробувати.
Зробіть прототип
Кращий спосіб почати наступ - запропонувати за тиждень накидати прототип системи або її частини. Зазвичай начальник легко погоджується, так як це його ні до чого не зобов'язує.
А коли у вас на руках буде працюючий прототип і результати тестів - це вже набагато більш переконливі аргументи на користь Node.js.
Де взяти розробників?
Що б ви не думали про JavaScript, він стає універсальною єдиною мовою веб-програмування. Один або кілька інтерпретаторів JavaScript є практично на кожному комп'ютері в складі браузерів і будь-який веб-розробник майже напевно хоч трохи знає JavaScript.
Це означає величезний вибір програмістів на будь-який смак і колір на ринку праці, та й у вас в компанії швидше за все вже є потрібні кадри. Отже, якщо ви працюєте в зростаючій компанії, яка активно наймає, це ще один аргумент на користь Node.js.
Активна спільнота
Спільнота Node.js зараз зростає зі шаленою швидкістю, залучаючи кращих розробників у галузі. Це означає, що зростає і екосистема Node, все легше отримати підтримку безкоштовно або на комерційній основі.
Продуктивність
Цей аргумент краще не форсувати, але якщо продуктивність критична для вашого додатку, то Node.js є що запропонувати. Лежачий в основі Node движок V8 від Google вже дуже швидкий, і стає все краще з кожним днем, адже зараз всі п'ять великих гравців на ринку браузерів (Mozilla, Google, Apple, Microsoft і Opera) прагнуть створити движок JavaScript крутіше, ніж у конкурентів.
Якщо врахувати ще й неблокуючу модель введення-виведення Node, то вам доведеться постаратися, щоб написати гальмований додаток. Більшість програм Node легко справляються з тисячами одночасних з'єднань на цілком звичайному залізі.
Підтримка великих корпорацій
Один з ризиків при використанні молодого Open Source проекту - відсутність довгострокових гарантій від авторів. Але це не проблема для Node.js. Joyent найняла Райана Дала (Ryan Dahl) і ще декількох ключових розробників Node і спонсорує проект, так що зараз майбутнє Node.js гарантує серйозна економічна сила.
Багато в чому завдяки цьому, такі компанії, як Yahoo! і HP вже зважилися використовувати Node в своїх нових продуктах, так що ви можете надати своєму босу додаткової впевненості, приводячи їх у приклад.
Як переконати клієнта?
Якщо ви фрілансер або працюєте в невеликій компанії, що робить сайти на замовлення, то діяти, переконуючи клієнтів, треба трохи по-іншому. Адже вони дуже сильно залежать від ваших рішень і сподіваються на те, що ви будете підтримувати написаний вами додаток.
Моя порада - будьте більш консервативними, краще перевірте двічі, чи дійсно Node їм підходить. Якщо так, переконайтеся, що у вас достатньо часу і ресурсів для підтримки. Нові версії Node виходять часто, і варто врахувати необхідність оновлюватися кожні 3-6 місяців.
Твіттер і блог автра.
