Что такое node js и зачем он нужен

Node.js для начинающих

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

Введение

Чтобы начать использовать Node.js, вы должны сначала понять различия между Node.js и традиционными средами сценариев на стороне сервера (например: PHP, Python, Ruby и т.д.).

Асинхронное программирование

Node.js использует модульную архитектуру для упрощения создания сложных приложений.

Скорее всего, вы знакомы с асинхронным программированием; это, в конце концов, «А» в Ajax. Каждая функция в Node.js является асинхронной. Следовательно, все, что обычно блокирует поток, вместо этого выполняется в фоновом режиме. Это самое важное, что нужно помнить о Node.js. Например, если вы читаете файл в файловой системе, вы должны указать функцию обратного вызова, которая выполняется, когда операция чтения будет завершена.

Вы делаете все!

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

И вот эквивалент, написанный на PHP:

Теперь давайте посмотрим на эти числа. В следующей таблице перечислено время ответа в миллисекундах для этих двух простых приложений:

Количество итераций Node.js PHP
100 2,00 0,14
10’000 3,00 10,53
1’000’000 15.00 1119,24
10’000’000 143,00 10621,46
1’000’000’000 11118,00 1036272,19

Я выполнил два приложения из командной строки, чтобы сервер не задерживал выполнение приложений. Я провел каждый тест десять раз и усреднил результаты. PHP заметно быстрее с меньшим количеством итераций, но это преимущество быстро растворяется по мере увеличения количества итераций. Когда все сказано и сделано, PHP на 93% медленнее, чем Node.js!

Node.js работает быстро, но вам нужно изучить несколько вещей, чтобы правильно его использовать.

Модули

Node.js использует модульную архитектуру для упрощения создания сложных приложений. Модули сродни библиотекам в C или юнитам в Паскале. Каждый модуль содержит набор функций, связанных с «объектом» модуля. Например, http модуль содержит функции, специфичные для HTTP. Node.js предоставляет несколько основных модулей из коробки, чтобы помочь вам получить доступ к файлам в файловой системе, создать HTTP и TCP / UDP-серверы и выполнять другие полезные функции.

Включить модуль легко; просто вызовите функцию require() , например:

Node.js — это только среда; вы должны делать все сами.

Функция require() возвращает ссылку на указанный модуль. В случае этого кода ссылка на http модуль сохранится в переменной http .

В приведенном выше коде мы передали имя модуля функции require() . Это заставляет Node искать папку node_modules в каталоге нашего приложения и искать модуль http в этой папке. Если Node не находит папку node_modules (или модуль http внутри нее), он затем просматривает глобальный кеш модуля. Вы также можете указать фактический файл, передав относительный или абсолютный путь, например:

Модули представляют собой инкапсулированные фрагменты кода. Код внутри модуля в основном приватный — это означает, что функции и переменные, определенные внутри них, доступны только изнутри модуля. Вы можете, однако, выставить функции и/или переменные, которые будут использоваться вне модуля. Для этого используйте объект exports и заполните его свойства и методы с помощью фрагментов кода, которые вы хотите открыть. Рассмотрим следующий пример:

Этот код создает переменную PI , доступ к которой может получить только код, содержащийся в модуле; он недоступен вне модуля. Затем в объекте exports создаются две функции. Эти функции доступны вне модуля, потому что они определены для объекта экспорта. В результате PI полностью защищен от внешних помех. Поэтому вы можете быть уверены, что область () и окружность () всегда будут вести себя так, как должны (пока значение будет задано для параметра r).

Глобальная область видимости

Node — это среда JavaScript, работающая на движке Google’s V8 JavaScript. Таким образом, мы должны следовать рекомендациям, которые мы используем при разработке на клиентской стороне. Например, мы должны избегать добавления чего-либо в глобальную область видимости. Это, однако, не всегда возможно. Глобальная область в Node это GLOBAL (в отличие от window в браузере), и вы можете легко создать глобальную переменную или функцию, опуская ключевое слово var , например:

Еще раз, по возможности, следует избегать глобальной области видимости. Поэтому будьте осторожны и не забывайте использовать var при объявлении переменной.

Установка

Естественно, нам нужно установить Node, прежде чем мы сможем написать и выполнить приложение. Установка выполняется довольно просто, если вы используете Windows или OS X; сайт nodejs.org предлагает инсталляторы для этих операционных систем. Для Linux используйте любой менеджер пакетов. Откройте терминал и введите:

Node.js находится в sid-репозиториях; вам может потребоваться добавить их в список источников:

Но имейте в виду, что установка пакетов sid на более старых системах может привести к повреждению вашей системы. Будьте осторожны и удалите /etc/apt/sources.list.d/sid.list после завершения установки Node.

Установка новых модулей

У Node.js есть менеджер пакетов, называемый Node Package Manager (NPM). Он автоматически устанавливается с помощью Node.js, и затем вы используете NPM для установки новых модулей. Чтобы установить модуль, откройте терминал/командную строку, перейдите в нужную папку и выполните следующую команду:

Неважно, какая у вас ОС; указанная выше команда установит модуль, который вы укажете вместо module_name.

Приложение Hello World

Естественно, наш первый скрипт Node.js напечатает текст « Hello World! » на консоль. Создайте файл hello.js и введите следующий код:

Теперь давайте выполним сценарий. Откройте терминал/командную строку, перейдите к папке, содержащей hello.js, и выполните следующую команду:

Вы должны увидеть как ‘Hello World!’ отображается в консоли.

HTTP-сервер

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

Этот код очень прост. Вы можете отправить больше данных клиенту, используя response.write() , но вы должны вызвать его перед вызовом response.end() . Сохраните этот код как http.js и введите его в консоль:

Откройте браузер и перейдите по адресу http://localhost:8080 . Вы должны увидеть текст «Hello HTTP!».

Обработка URL-параметров

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

Этот код использует метод parse() модуля url, основного модуля Node.js, для преобразования URL-адреса запроса в объект. Возвращаемый объект имеет свойство query , которое извлекает параметры URL. Сохраните этот файл как get.js и выполните его с помощью следующей команды:

Затем перейдите по адресу http://localhost:8080/?Data=put_some_text_here в вашем браузере. Естественно, изменение значения параметра data не нарушит сценарий.

Чтение и запись файлов

Для управления файлами в Node мы используем модуль fs (основной модуль). Мы читаем и записываем файлы, используя методы fs.readFile() и fs.writeFile() , соответственно. Я объясню аргументы после следующего кода:

У Node.js есть менеджер пакетов, называемый Node Package Manager (NPM). Он автоматически устанавливается с помощью Node.js

Сохраните это как files.js. Перед запуском этого сценария создайте файл с именем test.txt в том же каталоге, что и files.js.

Этот код демонстрирует методы fs.readFile() и fs.writeFile() . Каждый раз, когда сервер получает запрос, скрипт считывает число из файла, увеличивает это число и записывает его в файл. Метод fs.readFile() принимает три аргумента: имя файла для чтения, ожидаемую кодировку и функцию обратного вызова.

Запись в файл, по крайней мере в этом случае, намного проще. Нам не нужно ждать каких-либо результатов, хотя вы будете проверять наличие ошибок в реальном приложении. Метод fs.writeFile() принимает имя файла и данные в качестве аргументов. Он также принимает третий и четвертый аргументы (оба являются необязательными), чтобы указать кодировку и функцию обратного вызова соответственно.

Теперь давайте запустим этот скрипт со следующей командой:

Откройте его в браузере ( http://localhost:8080 ) и обновите его несколько раз. Теперь вы можете подумать, что в коде есть ошибка, потому что кажется, что число увеличивается на два. Это не ошибка. Каждый раз, когда вы запрашиваете этот URL-адрес, на сервер отправляются два запроса. Первый запрос автоматически создается браузером, который запрашивает favicon.ico, и, конечно, второй запрос для URL ( http://localhost:8080 ).

Хотя это поведение технически не является ошибкой, но мы такого не хотим. Мы можем легко это исправить, проверив URL-адрес запроса. Вот поправленный код:

Попробуйте теперь; этот код должен работать должным образом.

Доступ к базам данных MySQL

Большинство традиционных серверных технологий имеют встроенные средства подключения к базе данных и выполнения запросов к ней. Для Node.js вам необходимо установить библиотеку. Для этого урока я выбрал стабильный и простой в использовании модуль node-mysql. Полное имя этого модуля — mysql@2.0.0-alpha2 (все после @ — номер версии). Откройте консоль, перейдите в каталог, в котором вы сохранили свои скрипты, и выполните следующую команду:

Она загружает и устанавливает модуль, а также создает папку node_modules в текущем каталоге. Теперь давайте посмотрим, как мы можем использовать его в нашем коде; см. следующий пример:

8 главных причин изучить NodeJS в 2020 году

Javascript — это наиболее распространенный язык программирования, используемый во многих стартапах и на крупных предприятиях для разработки программного обеспечения. Он используется в качестве инструмента разработки на стороне клиента на 95% веб-сайтов. До 2009 года Javascript использовался только при разработке интерфейса и использовался вместе с различными языками на стороне сервера. Около одного десятилетия назад (в 2009 году), когда Райан Даль (первоначальный разработчик NodeJS) выпустил первоначальную версию NodeJS, это было удивительно для разработчиков, потому что они не могли и представить, что этот язык настолько мощный и его можно использовать для написания кода для внутреннего приложения, а также сервера. Сегодня NodeJs получает много заслуженной похвалы, и многие компании переключили свой технический стек на NodeJS, включая Paypal, LinkedIn, Uber, Yahoo, Medium, GoDaddy, Groupon, Walmart.

NodeJS — самая популярная технология в мире, особенно в Силиконовой долине. Это идеальный навык, чтобы открыть удивительные карьерные возможности для любого разработчика программного обеспечения. Что ж, у каждого языка программирования есть свои преимущества, но что делает Node таким особенным? Почему он так популярен среди разработчиков? Каковы некоторые из его интересных функций и почему так много компаний используют его для различных видов приложений? Давайте обсудим некоторые причины для изучения NodeJS в 2020 году .

Пользователи хотят взаимодействовать друг с другом в режиме реального времени. Чат, игры, постоянные обновления в социальных сетях, инструменты для совместной работы, веб-сайты электронной коммерции, приложения для отслеживания в реальном времени, рынок — каждая из этих функций требует общения в реальном времени между пользователями, клиентами и серверами через Интернет. Создание приложения в реальном времени является сложной задачей, потому что это происходит в огромных масштабах, поддерживая сотни, тысячи и даже миллионы пользователей. Связь в реальном времени между клиентом и сервером требует быстрого и постоянного ввода-вывода.

NodeJS лучше всего подходит для таких приложений. Процесс синхронизации с NodeJS является быстрым и организованным, так как события управляют архитектурой, обслуживающей как клиентскую, так и серверную стороны. Цикл обработки событий через протокол веб-сокета обрабатывает многопользовательскую функцию. Он работает в TCP и избегает перегрузки HTTP. NodeJS также делает RTA легким, масштабируемым, обслуживаемым и удобным с точки зрения разработки программного обеспечения.

Независимо от того, какой язык вы используете для бэкэнда, вам все равно понадобится JavaScript для фронтэнда, поэтому вместо того, чтобы тратить время на изучение серверного языка, такого как Php, Java или Ruby on Rails, вы можете потратить все свои усилия на изучение JS и освоение в нем. Javascript одного и того же языка может использоваться как на стороне клиента, так и на стороне сервера. Таким образом, разработчик, который знает JS, может выступать в роли разработчика полного стека без изучения дополнительных языков. Интерфейс и бэкэнд также легче поддерживать синхронизированными из-за единого использования языка с обеих сторон.

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

NodeJS построен на движке Chrome V8 от Google. Это позволяет Node предоставлять среду выполнения на стороне сервера, которая компилирует и выполняет JavaScript с молниеносной скоростью. Движок V8 компилирует JavaScript в машинный код, вместо того, чтобы интерпретировать его или выполнять как байт-код, и это делает Node действительно быстрым. Облегченный Javascript достигает высокой производительности с меньшим количеством строк кода по сравнению с Java или C. Движок Chrome V8 также постоянно обновляется, поскольку Google продолжает вкладывать в него значительные средства.

Причина быстрого выполнения Javascript — это Event Loop. В типичной модели сервера приложений, которая использует блокирующий ввод / вывод — в этом случае приложение должно обрабатывать каждый запрос последовательно, приостанавливая потоки, пока они не будут обработаны. Это может усложнить приложение и, конечно, замедлить работу приложения.

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

Paypal, который использовал Node в своем приложении, обнаружил, что приложение было создано в два раза быстрее с меньшим количеством людей, на 33% меньше строк кода и на 40% меньше файлов. Что еще более важно, они удвоили количество запросов, обрабатываемых в секунду, и сократили среднее время ответа на 35%. Таким образом, Node является отличным выбором для создания хорошо масштабируемых приложений.

Только несколько языков программирования предлагают богатую экосистему пакетов, как NodeJS. Когда вы устанавливаете Node.js, он автоматически устанавливает программы NPM (Node Package Manager). Любой разработчик Node.js может упаковать свои библиотеки и решения в модуль, который каждый может установить с помощью официального менеджера пакетов Node, NPM. Тысячи библиотек и инструментов для разработки Javascript собраны на NPM. Благодаря постоянной поддержке сообщества NodeJS, NPM фокусируется на поощрении пользователей добавлять новые пакеты, чтобы у вас было множество готовых решений для конкретной проблемы.

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

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

Подобно массиву в структурах данных, потоки — это набор данных, и для обработки этих данных требуются первоклассные методы обработки данных ввода / вывода. Node.Js приходит на помощь, поскольку он хорошо справляется с таким процессом ввода-вывода, который позволяет пользователям одновременно транскодировать медиафайлы во время их загрузки. Это занимает меньше времени по сравнению с другими методами обработки данных для обработки данных. Потоки Node.js значительно упрощают задачи ввода-вывода.

Существует четыре типа потоков, используемых node.js — Writable, Readable, Duplex и Transform, а также метод Pipe для обработки данных. Разработчики могут воспользоваться удивительными преимуществами при формировании таких функций, как обработка файлов при их загрузке. Потоки NodeJS позволяют приложениям потреблять меньше памяти при одновременной работе с большими объемами данных, чтобы работать быстрее. Эта функция дает больше преимуществ разработчику, работающему в режиме реального времени с кодированием аудио или видео.

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

2. Что такое Node.JS? Почему Node.JS?

А теперь мы поговорим о том, что такое 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.
Для этого есть ряд причин:

  1. Хочу JavaScript! Если вы хорошо знаете JavaScript зачем изучать другой язык? Будем использовать его и на клиенте и на сервере.
  2. Общий код на клиенте и на сервере. Значить мы можем использовать одинаковый код, ту же библиотеку и на клиенте и на сервере. Впрочем на практике это повторное использование весьма ограничено и оно обычно касается библиотек общего вида. Допустим есть объект «User». Этот объект «User» в браузере делает одно, использует возможности браузера, а на сервере он обычно делает другое, в том числе работает с базами данных, тут уже вообще другой код. То есть прямо таки разделяемого кода не так много, но тем не менее он есть.
  3. Решает основные задачи для Web. Node.JS предназначен для решения основных задач, которые перед нами ставит Web разработка. Хотим работать с базой данных, легко — Node.JS отлично работает с самыми распространенными современными базами данных. Хотим получить низкоуровневый доступ к сети http, https, tcp, udp, в Node.JS содержится отлично проработанная коллекция модулей. Node.JS Это инструмент который изначально проектировался для решения задач под Web и в нем очень много этого сделано. С другой стороны Node.JS наверно не самый лучший если вы хотите создать оконное приложение под Windows или посчитать число Пи с точностью до какого то n-го знака. В этом случае наверно будут более предпочтительны другие инструменты. Node.JS это средство которое решает основные задачи под Web и делает это хорошо.
  4. Много соединений и задач одновременно. Node.JS лучше всего себя ведет там, где нужно поддерживать большое количество соединений. Например это 10 000 клиентов в чате одновременно или это онлайн игра, где тоже очень много игроков одновременно подключены и что то делают. Большое количество соединений, задач это то с чем Node.JS справляется хорошо. При этом эти задачи не должны быть вычислительными. Хотя если задачи вычислительные то в Node.JS есть средства для параллелизации, но они не так хорошо проработаны как на некоторых других платформах.
  5. Легко сделать рабочий прототип. Следующее, это рабочий прототип. На Node.JS очень легко создать, что то готовое и заставить это работать, причем работать в том числе под нагрузкой. Когда мы разрабатываем, то современные методики разработки итеративны. То есть мы делаем что то, оно должно работать, потом мы добавляем к этому фичи, она опять работает, потом мы добавляем что то еще и так. И на Node.JS первый этап проходит очень быстро, а если все в порядке с архитектурой, то и дальше оно отлично расширяется.
  6. Удобный менеджер пакетов, где много всего. В Node.JS есть очень удобный менеджер пакетов, NPM, мы его подробно рассмотрим и есть очень много готовых пакетов, которые можно поставить и работать с ними.
  7. Большое и активное сообщество вокруг. Ну и наконец, сообщество. Есть много, много людей которые любят Node.JS, которые пишут под Node.JS, которые поддерживают то, что они сделали под Node.JS. Преимущественно это индивидуальные разработчики или небольшие компании плюс сообщество. По этому такая ситуация складывается, что есть очень много готовых пакетов, модулей которые нужно поставить и они вместе нормально работают. Для приложений на Node.JS, совершенно нормально если они используют двадцать, тридцать, пятьдесят, восемьдесят готовых модулей даже. Такая вот матричная структура получается, когда есть много, много маленьких модулей которые вместе интегрируются и отлично работают, благодаря тому, что Node.JS предоставляет для этого Framework.

One thought on “2. Что такое Node.JS? Почему Node.JS?”

Думают стоит добавить больше отличий I/O, где подход блокирующий , а где асинхронный. А так же отличия работы в одном потоке.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *