Когда-то 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)