Что такое Node.JS?
Создан Ryan Dahl в 2009.
А теперь мы поговорим о том, что такое Node.JS. Node.JS — это программное средство для выполнения JavaScript. То есть ставится Node.JS и Node.JS выполняет JavaScript на сервере, на десктопе, на ноутбуке, на мобильных устройствах и так далее. JavaScript где угодно. Node.js был создан Райаном Далом в 2009 году.
Node.JS = V8 + I/O + библиотеки
Что же такое сделал Райан и почему Node.JS получил такое большое признание? Ведь на самом деле до Node.JS существовали другие попытки сделать то же самое. Node.JS создан на основе виртуальной машины V8. Эта виртуальная машина была создана компанией Google для браузера Chrome и она умеет выполнять JavaScript.
V8: быстро, современно, экономно
Не просто умеет, она делает это очень хорошо. Она выполняет JavaScript быстро, она поддерживает практически все возможности современного JavaScript, самого современного стандарта который сейчас принят, плюс можно при помощи специальных флагов включить возможности будущего стандарта. Кроме того V8 очень экономно расходует память, очень хорошо оптимизирована в этом плане, позволяет профилировать процессор, память, смотреть, что происходит. Очень, очень хорошая штука!
Альтернативы: Rhino, JSC, WSH…
Альтернативы V8 которые есть, а они существуют, это Rhino — на основе Java, Java Script Core — который используется в частности в Safari в Mac OS, Windows Script Host — который есть в Windows. То есть другие способы выполнять JavaScript на сервере. На любом компьютере их можно поставить, но они уступают V8 в скорости, в эффективности расходования памяти. По этому V8 в данном случае безусловно плюс. Но V8 это JavaScript, V8 не умеет читать файлы, не умеет работать с сетью и так далее. По этому Райан добавил при помощи специальных библиотек и конечно же своего кода возможности по работе с сетью, с файлами, с потоками ввода/вывода и некоторыми другими. То что получилось в результате, позволяет делать из JavaScript — Web сервер.
Почему Node.JS?
Что интересного может быть для нас в Node.JS как технологии, почему мы можем захотеть Node.JS.
Для этого есть ряд причин:
- Хочу JavaScript! Если вы хорошо знаете JavaScript зачем изучать другой язык? Будем использовать его и на клиенте и на сервере.
- Общий код на клиенте и на сервере. Значить мы можем использовать одинаковый код, ту же библиотеку и на клиенте и на сервере. Впрочем на практике это повторное использование весьма ограничено и оно обычно касается библиотек общего вида. Допустим есть объект «User». Этот объект «User» в браузере делает одно, использует возможности браузера, а на сервере он обычно делает другое, в том числе работает с базами данных, тут уже вообще другой код. То есть прямо таки разделяемого кода не так много, но тем не менее он есть.
- Решает основные задачи для Web. Node.JS предназначен для решения основных задач, которые перед нами ставит Web разработка. Хотим работать с базой данных, легко — Node.JS отлично работает с самыми распространенными современными базами данных. Хотим получить низкоуровневый доступ к сети http, https, tcp, udp, в Node.JS содержится отлично проработанная коллекция модулей. Node.JS Это инструмент который изначально проектировался для решения задач под Web и в нем очень много этого сделано. С другой стороны Node.JS наверно не самый лучший если вы хотите создать оконное приложение под Windows или посчитать число Пи с точностью до какого то n-го знака. В этом случае наверно будут более предпочтительны другие инструменты. Node.JS это средство которое решает основные задачи под Web и делает это хорошо.
- Много соединений и задач одновременно. Node.JS лучше всего себя ведет там, где нужно поддерживать большое количество соединений. Например это 10 000 клиентов в чате одновременно или это онлайн игра, где тоже очень много игроков одновременно подключены и что то делают. Большое количество соединений, задач это то с чем Node.JS справляется хорошо. При этом эти задачи не должны быть вычислительными. Хотя если задачи вычислительные то в Node.JS есть средства для параллелизации, но они не так хорошо проработаны как на некоторых других платформах.
- Легко сделать рабочий прототип. Следующее, это рабочий прототип. На Node.JS очень легко создать, что то готовое и заставить это работать, причем работать в том числе под нагрузкой. Когда мы разрабатываем, то современные методики разработки итеративны. То есть мы делаем что то, оно должно работать, потом мы добавляем к этому фичи, она опять работает, потом мы добавляем что то еще и так. И на Node.JS первый этап проходит очень быстро, а если все в порядке с архитектурой, то и дальше оно отлично расширяется.
- Удобный менеджер пакетов, где много всего. В Node.JS есть очень удобный менеджер пакетов, NPM, мы его подробно рассмотрим и есть очень много готовых пакетов, которые можно поставить и работать с ними.
- Большое и активное сообщество вокруг. Ну и наконец, сообщество. Есть много, много людей которые любят Node.JS, которые пишут под Node.JS, которые поддерживают то, что они сделали под Node.JS. Преимущественно это индивидуальные разработчики или небольшие компании плюс сообщество. По этому такая ситуация складывается, что есть очень много готовых пакетов, модулей которые нужно поставить и они вместе нормально работают. Для приложений на Node.JS, совершенно нормально если они используют двадцать, тридцать, пятьдесят, восемьдесят готовых модулей даже. Такая вот матричная структура получается, когда есть много, много маленьких модулей которые вместе интегрируются и отлично работают, благодаря тому, что Node.JS предоставляет для этого Framework.
Думают стоит добавить больше отличий I/O, где подход блокирующий , а где асинхронный. А так же отличия работы в одном потоке.