Які перспективи у Node.js після возз'єднання — думки експертів



Коли-то PHP, Apache і MySQL в поєднанні з JavaScript через AJAX був ідеальною парою для веб-розробника. Здавалося, цей набір інструментів може дозволити вирішити будь-яку задачу. Однак вимоги підвищувалися, вихідний код розростався на очах, навантаження зростала і звичні інструменти перестали справлятися.

Експерти було впевнені, що всьому виною класична схема «запит-відповідь». Запит сторінки змушував веб-сервер підняти деякий скрипт, виконати його лінійно, а результат повернути браузеру клієнта. І лише після цього перейти до обробки наступного запиту.

У пошуках виходу з цієї ситуації, світлі голови згадали, що сервер можна написати і на JavaScript.

Тоді це дало б можливість розробляти на одному і тому ж мовою і серверну, і клієнтську частини сайту. Вже до кінця 2000-х років це був простий і одночасно гнучкий мову, що дозволяє писати код у різних парадигмах: від звичайного процедурного до ООП в поєднанні з функціональним стилем. Але вирішальну роль зіграла інша особливість JavaScript — асинхронність.

Наведемо приклад обмежень послідовного виконання коду на PHP, який ми запозичили звідси:
$result = $db->fetchOne('SELECT user_name FROM user_accounts WHERE id = 1');
echo 'Моє ім'я:' . $result . ';';
У першому рядку – простий SQL-запит до БД на вибірку імені користувача, у якого id = 1. У цьому місці скрипт зупиняється, і наступна рядок не буде виконана до того самого моменту, поки запит не буде оброблений базою, а результат не повернеться в змінну $result. У нашому прикладі це тисячні частки секунди, але в реальності і запити набагато складніше, і бази за розміром часто складають гігабайти, і таких запитів може одночасно бути кілька тисяч.
Асинхронне виконання коду на JS:
db.query('SELECT user_name FROM user_accounts WHERE id = 1', function(err, res)
{
if (!err) sys.log('Моє ім'я:' + res);
});
sys.log('Продовжуємо виконання');
Тут знову ж створюється запит до бази даних, однак крім самого SQL-вирази в запиті передається ще й функція-обробник (callback). Ця функція буде викликана саме тоді, коли прийде відповідь від бази даних, а до цього моменту виконання скрипта ні в якому разі не буде припинятися. Отже, в основі будь-якого серверного варіанту JavaScript закладена концепція подій і callback'ів, тобто обробників подій. Ті дії, які необхідно виконувати в разі настання подій, що описуються в межах функцій обробників подій.
Подібні міркування спонукали любителів JS до створення власних серверних движків.

Node.js
2 вересня був офіційно представлений перший публічний реліз відкритого браузера Chromium. В ході розробки був також створений V8 – JavaScript-інтерпретатор для браузера. Його провідним розробником був Ларс Бак. Основними проблемами, які довелося вирішувати розробникам в движку, стали продуктивність і масштабованість.

Після успіху браузера світлі голови зрозуміли, що такий швидкий движок можна успішно використовувати на сервері.

Подальші експерименти привели до появи проекту Node.js — повністю самостійною платформи, що включає, крім движка, вбудований сервер (HTTP і TCP/UDP/Unix-soket) і базовий набір бібліотек, а також надає повністю асинхронну роботу з файлами і мережевими пристроями.

Node.js розробив Райан Дав у 2009 році. Він прийшов до висновку, що замість традиційної моделі паралелізму на основі потоків слід звернутися до подієво-орієнтованих систем. Ця модель була обрана з-за простоти, низьких накладних витрат (порівняно з ідеологією «один потік на кожне з'єднання») і швидкодії.

Щоб запустити HTTP-сервер, здатний обробляти асинхронно тисячі підключень, потрібно кілька рядків коду:

// Завантажуємо модуль http
var http = require('http');

// Створюємо web-сервер з обробником запитів
var server = http.createServer(function (req, res) {
console.log('Початок обробки запиту');
// Передаємо код відповіді http-заголовки
res.writeHead(200, {
'Content-Type': 'text/plain; charset=UTF-8'
});
res.end('Hello world!');
});

// Запускаємо web-сервер
server.listen(2002, "127.0.0.1", function () {
console.log('Сервер запущений http://127.0.0.1:2002/');
});

Поява Node.js викликало ажіотаж в середовищі розробників. Вже на ранньому етапі розвитку проекту його почали використовувати такі компанії, як Netflix, Walmart, PayPal, Dow Jones і Groupon.

І жили б вони довго і щасливо, але…
У листопаді 2014 року в співтоваристві Node.js стався розкол. Деякі учасники були незадоволені політикою компанії Joyent, що курирує розробку проекту Node.js.

Стверджувалося також, що Joyent ігнорувала думку спільноти, діяла тільки в своїх інтересах і зосередила управління над проектом лише у своїх руках. Крім того, Joyent до того часу віддала абсолютний пріоритет забезпеченню стабільності кодової бази, що ускладнило інтеграцію нових можливостей. Істотних релізів не виходило з початку 2013 року, остання актуальна на той момент гілка 0.10 була заснована на застарілій версії движка V8.

Ініціативу відділення від Joyent підтримали 5 з 7 ключових розробників Node.js, серед яких був Айзек Шлютері, колишній лідер проекту.

Вже через кілька місяців з'ясувалося, що io.js перевершив його і продуктивності, швидкості розробки.

Возз'єднання
У травні 2015 року відбулося засідання технічного комітету проекту io.js, на якому прийнято рішення про возз'єднання з Node.js і надалі спільному розвитку під егідою організації Node Foundation.

Куратором об'єднаного проекту стала організація Linux Foundation, яка сформувала ефективну і незалежною проф майданчик для розробки Node.js. Компанія Joyent продовжила свою участь в розробці, підтримці і фінансуванні проекту, але вже як рядовий учасник спільноти. Крім Joyent, в число засновників Node.js Foundation увійшли такі компанії, як IBM, Microsoft, PayPal, Fidelity і SAP.

8 вересня 2015 року вийшов Node.js v4.0.0 як результат злиття Node.js v0.12.7 і io.js v3.3.0

Після об'єднання спільнота звернула увагу на вражаючу статистику: в 2010-2015 роках розробники додали в сховище коду понад 190 000 модулів для Node.js (і інших бібліотек JavaScript). Це перевищує весь репозиторій Perl CPAN, який створювався протягом 20 років, і обходить Java Maven Central, незважаючи на меншу кількість розробників Node.js.

Node.js 7
В кінці вересня 2016 року вийшла Node.js 7 beta. У ній використано оновлений движок V8 5.4. Крім того, вона підтримує 98% стандарту ECMAScript 6. Порівняно з 56% у Node.js 5 це істотний прогрес.

Однак ростуть не тільки номери версій Node.js. За даними Indeed.com на ринку праці затребуваність фахівців з Node.js продовжує зростати.



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

1. Наскільки швидко, на вашу думку, розвивається Node.js? Чи задоволені ви поточним темпом?

2. Як ви оцінюєте його затребуваність, популярність з точки зору серйозної розробки в ІТ-компаніях? Наскільки вона виправдана? Для якихось проектів підходить Node.js?

3. Як змінився ринок розробників Node.js? Їх стало менше, більше? Як за вашими відчуттями змінилося якість їх роботи?

4. Можете назвати конкурентів Node.js? Наскільки вони сильні?

5. Які перспективи Node.js на найближчі 5 років?

Антон Кулаков, фронтенд-розробник


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

Після створення Node.js Foundation все стало набагато краще. Зараз мене все влаштовує.

Як ви оцінюєте його затребуваність, популярність з точки зору серйозної розробки в ІТ-компаніях? Наскільки вона виправдана? Для якихось проектів підходить Node.js?

Я не володію такою статистикою, тому можу судити лише за моїми відчуттями.

Затребуваність — визначено так. Багато речей дуже просто робляться з допомогою Node.js. Популярність — складно сказати. Однозначно можна сказати, що в середовищі фронтенд-розробників вона дуже популярна.

Наскільки вона виправдана? Тут все залежить від завдання. Для якихось завдань JavaScript підходить краще, для яких-то гірше. Довірити Node.js складання фронтенда — це виправдано і це правильно. Довірити Node.js управління космічним кораблем — мабуть можна, але я б вибрав більш надійні технології.

Як змінився ринок розробників Node.js? Їх стало менше, більше? Як за вашими відчуттями змінилося якість їх роботи

Я не помітив якогось різкого зміни попиту на Node.js розробників. Мабуть, володіння Node.js стало обов'язковою вимогою для фронтенд-розробників останнім часом. Фахівців стало набагато більше, але якість їх оцінити складно. У мене немає такої статистики.

Node.js — це всього лише інструмент для виконання сценаріїв JavaScript. Безумовно, це один з найбільш популярних інструментів для виконання JavaScript в браузері.

Які перспективи Node.js на найближчі 5 років?

Я вважаю Node.js чекає велике майбутнє. Особливо серед фронтенд-розробників. В інших сферах переваги JavaScript не зовсім очевидні.

Данило Стрибків, Senior Software Developer, компанія api.ai


Наскільки швидко, на вашу думку, розвивається Node.js?

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

чи ви Задоволені поточним темпом?

А чому ні, краще розвиватися, ніж стояти на місці.

Як ви оцінюєте його затребуваність, популярність з точки зору серйозної розробки в ІТ-компаніях?

Якщо коротко, то неоднозначно. Але тут все дуже сильно залежить від того, яку мову ви використовуєте для розробки під Node.js. Якщо чистий JavaScript, то дуже швидко можна зіткнутися з тим, що стане незрозуміло, що і як у вашій програмі пов'язано. Це наслідок того, що JS динамічний. У випадку ж використання TypeScript, наприклад, у вас буде перевірка типів на етапі компіляції, і, відповідно, буде менше нечіткості в програмі.

Наскільки вона виправдана? Для якихось проектів підходить Node.js?

Тут від завдання залежить. Для микросервисов, на мій погляд, – саме те.

Можете назвати конкурентів Node.js? Наскільки вони сильні?

Ну тут можна згадувати дуже довго. Наскільки я це собі уявляю, конкурентом буде будь-який продукт, що підходить для написання backend'а. І у всіх продуктів знайдуться свої слабкі і сильні сторони. Node.js на даний момент, сильний своєю простотою на маленьких завданнях.

Наприклад, для написання невеликих REST-сервісів. При великій кількості коду можуть бути проблеми з прозорістю логіки роботи програми, але, як я вже говорив, це особливість JavaScript, яка цілком може бути вирішена за допомогою Typescript або ще чого-небудь подібного.

Які перспективи Node.js на найближчі 5 років?

Перспективи будь-якої технології на такому часовому проміжку досить складно передбачити. Думаю, в найближчому часі буде рости популярність, у зв'язку з популярністю микросервисов і простотою на невеликих завданнях. Ну а потім подивимося.

Денис Ізмайлов, з-засновник Moscow Node.js Meetup, засновник групи Node.js у Telegram, займається замовний розробкою на міжнародному ринку:


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

Ще два роки тому можна було бути незадоволеним, але всі ми пам'ятаємо ту історію, коли в січні минулого року Федір Індутний опублікував форк — io.js щоб форсувати впровадження останніх версій V8 і зробити процес розробки більш відкритим. Це призвело до того, що рік тому вийшла легендарна версія Node.js 4.0.0 і з тих пір, ми спостерігаємо релізи кожен місяць.

Інше питання – вміст цих змін, але це тема окремої дискусії. Радує те, що при такому активному і безперервному циклі розробки вдалося знайти золоту середину, і тепер прихильники стабільності залишаються щасливі за рахунок LTS-версії, які критично важливі для Production і великих проектів.

Як ви оцінюєте його затребуваність, популярність з точки зору серйозної розробки в ІТ-компаніях? Наскільки вона виправдана? Для якихось проектів підходить Node.js?

Для всіх, при правильному налаштуванні кластера на Kubernetes. Це те, як ми вирішили для своїх клієнтів питання з масштабністю і еластичністю системи. Але якщо дивитися на досвід колег і брати до уваги всі нюанси на ринку праці, ще залишається невеликий спектр специфічних завдань, які безпечніше (з точки зору бізнесу) було б зробити з використанням Python, Golang або Erlang — такі як Data Mining, Data Processing та інше.

Якщо говорити про затребуваність з боку компаній або ІТ-департаментів, то тут вона постійно зростає і причин ціле безліч — як відхід від PHP, Ruby і Java у веб-розробці, так і можливість ізоморфних додатків, про які я вже розповідав багато в своїх доповідях на конференціях і митапах. Це все дозволяє істотно скоротити витрати і підвищити якість продуктів.

Як змінився ринок розробників Node.js? Їх стало менше, більше? Як за вашими відчуттями змінилося якість їх роботи?

Ринок де саме? Глобально він сильно збільшився і продовжує збільшуватися. Затребуваність Fullstack JS на міжнародному ринку багаторазово перевищує пропозицію. Цьому сприяє як зростання стартапів, так і зрілість екосистеми в цілому. Багато розробники виїжджають за високими зарплатами в США, Європу і Азію або просто переходять на віддалену форму роботи. У цьому ключі на місцевому ринку ми бачимо навіть невелике скорочення професійних розробників з одного боку, і великий приплив джуніорів — з іншого.

Саме тому ми почали проводити митапы за Node.js у Москві, де хлопці можуть поспілкуватися наживо з розробниками самого ядра Node.js — такими цікавими особистостями, як Володимир Курчаткин і Микита Сковорода.

Можете назвати конкурентів Node.js? Наскільки вони сильні?

Безумовно тут відразу напрошується відповідь про Golang. Його частка на ринку теж помітно зростає. Але частіше всього за рахунок великого бізнесу і DevOps-рішень, де мілісекунди критично важливі. Там цілком може окупитися сервіс на Golang, але це якщо бюджет проекту дозволяє.

Які перспективи Node.js на найближчі 5 років?

Деякий час тому у багатьох з'явилася надія на WebAssembly. І то, якщо вже у asm.js не вийшло, то тепер-то точно в браузері можна буде запускати «байт-код», а це значить – програмувати на будь-якій мові. Але сьогодні ми знову бачимо, що виробники не можуть домовитися, а це значить – у JavaScript прекрасне майбутнє.

Зараз я не буду нічого говорити про багатопоточність, аналоги goroutine і channels або про те, що Node.js відмовиться від V8 після стабілізації ES6, просто тому, що взаємодія сервісів має дещо іншу специфіку, ніж браузерів. Але зазначу цілком цікаві шанси у Microsoft повернути собі лідерство в співтоваристві, і в цьому сегменті зокрема, за рахунок якісних інструментів.

А поки чекаємо активно Node.js v7.x, яка обіцяє нам нарешті принести async-await.

Ілля Кантор, творець JavaScript.ru, один з перших професійних викладачів мови JS в Росії:


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

Зараз Node.JS розвивається дуже швидко: як сам Node.JS, так і JavaScript і супутня інфраструктура.

Звичайно, хотілося б швидше впровадження нових фіч, але ситуація так і змінюється досить швидко. Приміром, callback-style нещодавно змінився на promises + generators, а їх змінить async/await в найближчий рік. Коли пишеш код, потрібно мати це на увазі, щоб потім не переписувати.

Як ви оцінюєте його затребуваність, популярність з точки зору серйозної розробки в ІТ-компаніях? Наскільки вона виправдана? Для якихось проектів підходить Node.js?

Інструментів дуже багато. Вибір залежить великою мірою від особистих переваг.
Деякі переваги Node.JS:

1) Він швидкий, в сенсі продуктивності. Звичайно, є мови, які швидше, особливо компилируемые зі строгою типізацією, але в загальному і цілому — Node.JS досить швидкий. Як правило, сервіс Node.JS буде швидше написаного на PHP або Ruby.

Node.JS з моменту створення використовувався для додатків з великою кількістю одночасних з'єднань, між якими літають дані. З цим, відповідно, теж немає проблем.

2) Розробка на ньому теж досить швидка.

3) JavaScript і на frontend, і на backend при розробці веб-додатків дозволяє використовувати один код і там, і там. Ізоморфні додатки – ось це все. Так і розробникам буває зручніше використовувати одну мову. Після останніх поліпшень JavaScript став набагато приємніше.

Як змінився ринок розробників Node.js? Їх стало менше, більше? Як за вашими відчуттями змінилося якість їх роботи?

Вибачте, «ринок» не відслідковую. Хороших розробників завжди мало. У плані Node.JS зазвичай простіше виростити, ніж знайти готового.

Можете назвати конкурентів Node.js? Наскільки вони сильні?

Серед платформ на JavaScript у Node.JS конкурентів серйозних немає. Якщо ж говорити про інших мовах — то вибір залежить від завдання, а також особистих переваг розробника, що йому зрозуміліше і ближче. На чому людям подобається кодити, на те вони і будуть писати.

Які перспективи Node.js на найближчі 5 років?

Зараз все розвивається дуже швидко, 5 років — великий термін. Якщо дивитися на поточні тренди, то Node.JS швидко йде вперед. З іншого боку, важлива перевага Node.JS — це те, що JavaScript є єдиним крос-браузерна мовою розробки, саме на рівні браузера.

Можливо, в майбутньому буде впроваджений стандарт WebAssembly, який позбавить його цього переваги. З іншого боку, навіть якщо це трапиться, то не скоро, і Node.JS до того часу сильно зросте. Можливо, це перевага для нього і не буде так вже актуально.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.