Node.js для начинающих: описание, руководство, особенности

Node.js — это среда выполнения JavaScript, встроенная в версию движка JS V8 от Chrome. Платформа Node.js для начинающих использует управляемую событиями, не блокирующую модель ввода-вывода, которая делает ее легкой и эффективной. Пакетная экосистема Node.js является самой большой экосистемой библиотек с открытым исходным кодом в мире. Проект поддерживается Фондом Node.js. Взносы, политика и выпуски контролируются в рамках модели открытого управления.

Node.js для начинающих: определение

Node.js — это платформа разработки с открытым исходным кодом для выполнения кода JavaScript на стороне сервера. Node полезен для разработки приложений, которым требуется постоянное соединение из браузера с сервером. Часто используется для приложений реального времени, таких как чат, новостные ленты и push-уведомления.

Node.js предназначен для работы на выделенном HTTP-сервере и для использования одного потока с одним процессом за одну единицу времени. Начало работы в Node.js основано на событиях и выполняется асинхронно. Код, построенный на данной платформе, не соответствует традиционной модели приема, обработки, отправки, ожидания и получения. Вместо этого Node обрабатывает входящие запросы в стеке постоянных событий, отправляет небольшие запросы один за другим и не дожидается ответов.

Книги Node.JS для начинающих содержат много данных по переходу от основных моделей, которые запускают более крупные, сложные процессы и одновременно запускают несколько потоков. Каждый из них ожидает своего соответствующего ответа, прежде чем двигаться дальше.

Начало Node.js — JavaScript

Node базируется на JavaScript, в связи с чем понимание работы данной платформы невозможно без экскурса в JS. Уроки для начинающих Node.js содержат много вводной информации о языке программирования, на котором была основана эта платформа. JavaScript — это интерпретируемый язык программирования или скриптов из Netscape. Он похож на возможности Microsoft Visual Basic, Sun Tcl, Perl от UNIX и REXX от IBM. Языки сценариев JavaScript проще и быстрее кодировать, чем более структурированные и скомпилированные, такие как C и C ++. Языки скриптов обычно занимают больше времени, чем компилируемые, но они очень полезны для коротких программ.

JavaScript используется в разработке веб-сайта для выполнения таких задач, как автоматическое изменение форматированной даты на веб-странице. Это причина, по которой связанная страница будет отображаться во всплывающем окне.

При изменении текста или графического изображения JavaScript использует те же идеи, что и в Java (скомпилированное объектно-ориентированное программирование, производное от C ++).

Характерные особенности JS

JavaScript обычно используется в веб-разработке. Он был первоначально разработан Netscape как средство для добавления динамических и интерактивных элементов на веб-сайты. Хотя JavaScript зависит от Java, синтаксис больше похож на C и основан на ECMAScript — языке сценариев, разработанном Sun Microsystems.

JavaScript — это язык сценариев на стороне клиента. Это означает, что исходный код обрабатывается веб-браузером клиента, а не веб-сервером. Функции могут запускаться после загрузки веб-страницы без связи с сервером. Например, функция JavaScript может проверять веб-форму перед отправкой, чтобы убедиться, что все необходимые поля заполнены. Код может выдать сообщение об ошибке, прежде чем какая-либо информация будет фактически передана на сервер.

Подобно серверным скриптовым языкам, таким как PHP и ASP, код JavaScript может быть вставлен в любом месте HTML-страницы в веб. Однако в HTML отображается только вывод серверного кода, а код JavaScript остается полностью видимым в источнике веб-страницы. Его также можно найти в отдельном файле .JS, который также можно просмотреть в браузере.

Образцы кода

Ниже приведен пример базовой функции JavaScript, которая добавляет два числа. Функция вызывается с параметрами 7 и 11. Если приведенный ниже код был включен в HTML веб-страницы, он отобразил текст «18» в поле предупреждения.

<script>

function sum(a,b)

{

return a + b;

}

var total = sum(7,11);

alert(total);

</script>

Функции JavaScript можно вызывать в тегах <script>, или когда происходят определенные события. Примеры включают onClick, onMouseDown, onMouseUp, onKeyDown, onKeyUp, onFocus, onBlur, onSubmit и многие другие. Хотя стандартный JavaScript все еще используется для выполнения основных клиентских функций, многие веб-разработчики предпочитают использовать библиотеки JavaScript, такие как jQuery, для добавления на веб-сайты более продвинутых динамических элементов.

Преимущества и важные нюансы

Одним из основных преимуществ Node.js, по словам его создателя Райана Даля, является то, что он не блокирует ввод/вывод (I/O). Некоторые разработчики очень критично относятся к Node.js и отмечают, что если для одного процесса требуется значительное количество циклов процессора, приложение блокируется. Это может привести к сбою. Сторонники модели Node.js утверждают, что время обработки процессора меньше беспокоит из-за большого числа небольших процессов, на которых основан код узла.

Популярность приложений JavaScript стремительно растет в последние несколько лет, а Node.js определенно способствует этому росту. Если мы посмотрим на статистические данные, то увидим, что в мире больше пакетов Node, чем аналогичных данных Ruby. Второй фактор: пакеты Node растут быстрее, чем Ruby, Python и Java.

Что делает более популярным, чем Rails и другие альтернативы Node.JS? С чего начать изучение? Node сам по себе является асинхронной платформой, основанной на событиях, построенной на базе движка JavaScript Chrome и предназначенной для создания масштабируемых сетевых приложений. Иными словами, Node.js — это JavaScript плюс C/C ++ в совокупности с файловой системой, запуском HTTP или TCP-серверов.

Node однопоточен и использует модель параллелизма, основанную на цикле событий. Он не блокирует процессы и не заставляет программу ждать, но регистрирует обратный вызов и позволяет приложению продолжить работу. Это означает, что платформа может обрабатывать параллельные операции без нескольких потоков выполнения и эффективно масштабируется.

Между последовательными языками и Node.js существуют большие различия:

  • Node позволяет выполнять другие задачи, ожидая уведомления, когда ответ будет доступен;

  • приложение не буферизует данные в память, а вместо этого выводит его фрагментарно.

Хотя существуют другие системы циклов событий (например, библиотека EventMachine в Ruby или Twisted на Python), между ними и Node существует значительная разница.

В Node.JS все библиотеки были разработаны с нуля, чтобы быть неблокируемыми, чего нельзя сказать о других.

Варианты использования

Node идеально подходит для приложений с привязкой к вводу-выводу, но не настолько хорош для приложений с тяжелым процессором. Отличным примером являются приложения для работы в режиме реального времени (DIRT), одностраничные, API JSON и приложения для потоковой передачи данных.

Официальный менеджер пакетов Node (NPM)

Node обязан большой частью своего успеха менеджеру пакетов, который поставляется вместе с ним. Преимущества данного инструмента:

  • он устанавливает зависимости приложений локально, а не глобально;

  • одновременно он обрабатывает несколько версий одного и того же модуля;

  • вы можете указать tarballs или git repositories в качестве зависимостей;

  • очень легко опубликовать собственный модуль в реестре NPM.

Установка Node.js

Для начинающих существуют официальные инсталляторы для Node в Windows и OS X, также представлена возможность установки через диспетчер пакетов. Для тестирования кода пользователя с разными версиями узлов используется NVM (менеджер версий Node).

С этим инструментом вы можете использовать несколько версий узла, установленных в системе, и легко переключаться между ними. В следующих нескольких строках мы увидим, как установить NVM в систему Ubuntu.

Во-первых, мы должны убедиться, что наша система имеет компилятор C ++:

$ sudo apt-get update

$ sudo apt-get install build-essential libssl-dev

После мы можем скопировать и вставить однострочный установщик для NVM в терминал:

$ curl https://raw.githubusercontent.com/creationix/nvm/v0.13.1/install.sh | hit

NVM должен быть правильно установлен, поэтому мы выходим из системы и авторизуемся, чтобы убедиться, что все корректно. Вводим команду:

$ nvm

Если при вводе не возникает ошибки, это означает, что все в порядке. Теперь мы можем перейти к фактическому установлению Node и NPM.

Результат в командной строке должен выглядеть следующим образом:

$ nvm install v0.10.31

################################################## ################ 100,0%

Теперь оба узла и npm должны быть доступны в терминале:

$ node -v & amp; & amp; & amp; npm -v

v0.10.31

1.4.23

Теперь необходимо настроить запуск Node.JS по умолчанию при помощи команды в терминале:

$ nvm alias default 0.10.31

Мы можем установить другие версии Node так же, как и раньше, а переключаться между ними с помощью команды nvm use:

$ nvm install v0.8.10

Если вы не знаете, какие версии установлены в вашей системе, просто введите nvm-list. Это инструмент покажет вам полный список, а также текущие и версии по умолчанию, например:

list $ nvm

v0.6.3 v0.6.12 v0.6.14 v0.6.19 v0.7.7 v0.7.8 v0.7.9 v0.8.6 v0.8.11 v0.10.3 v0.10.12 v0.10.15 v0.10.21 v0.10.24 v0.11.9 ток: v0.10.24 default -> v0.10.24

Модули

В учебнике Node.JS для начинающих Java или Python предписывается использование функции импорта для загрузки других библиотек, в то время как применение PHP и Ruby этого не требует. Node реализует интерфейс CommonJS для модулей. Также вы можете загружать другие варианты, используя ключевое слово require.

Например, нам могут потребоваться некоторые собственные модули:

var http = require ('http');

var dns = require ('dns');

Мы также можем вызвать относительные файлы:

var myFile = require ('./ myFile'); // download myFile.js

Чтобы установить модули из числа NPM, выполните поиск их на веб-сайте или в Github. Синтаксис для установки модуля локально довольно простой:

# where express === имя модуля

$ npm install express

Обратные вызовы

В асинхронном программировании мы не возвращаем значения, когда выполняются функции, но вместо этого используем стиль продолжения прохождения (CPS). С помощью этого стиля асинхронная функция вызывает обратный вызов (функция, обычно передаваемая как последний аргумент) для продолжения программы после ее завершения.

Ниже приведен пример поиска IPv4-адресов для домена:

var dns = require ('dns');

dns.resolve4 ('www.google.com', function (err, addresses) {

if (err) throw err;

console.log ('addresses:' + JSON.stringify (addresses));

});

Мы передали обратный вызов (встроенную анонимную функцию) в качестве второго аргумента асинхронной dns.resolve4. Как только функция async будет готова, он вызовет обратный вызов, продолжив выполнение программы.

События

В руководстве для начинающих в Node.JS представлен стандартный шаблон обратного вызова, который хорошо работает для случаев использования, когда мы хотим получать уведомления при завершении функции асинхронизации. Однако есть ситуации, требующие уведомления о различных событиях, которые не происходят одновременно.

Давайте рассмотрим это на примере кода с IRC-клиентом:

var irc = require ('irc');

var client = new irc.Client ('irc.freenode.net', 'myIrcBot', {

каналов: ['# sample-channel']

});

client.on ('error', function (message) {

console.error ('error:', message);

});

client.on ('connect', function () {

console.log («подключен к серверу irc»);

});

client.on ('message', function (from, to, message) {

console.log (from + '=>' + to + ':' + message);

});

client.on ('pm', function (from, message) {

console.log (from + '=> ME: + message);

}).

В приведенном выше примере мы имеем дело с тремя типами событий:

  • событие подключения выдается, когда клиент успешно подключился к IRC-серверу;

  • событие ошибки запускается в случае возникновения ошибки;

  • сообщения и события pm выбраны для входящих сообщений.

Вышеупомянутые события делают эту ситуацию идеальной для использования шаблона EventEmitter.

Шаблон EventEmitter позволяет разработчикам выпускать событие, на которое потребители могут подписаться, если они в этом заинтересованы. Этот шаблон может быть знаком с браузером, где он используется для присоединения обработчиков событий.

Node имеет класс EventEmitter в ядре, который мы можем использовать для создания собственных объектов EventEmitter. Попробуем создать класс MemoryWatcher, который наследует EventEmitter и генерирует два типа событий:

  • данных с регулярным интервалом, которое представляет использование памяти в байтах;

  • событие ошибки, если память превышает определенный предел.

Итак, Node - это не веб-сервер, а один из способов создать код на компьютере. Он является средой для выполнения JavaScript.

Комментарии
5
ребят , поработайте над коментами , слишком они у вас паляться )))
точно ))))