Как Node.js помогает создавать классные приложения для клиентов

Преимущества NodeJS

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


Как результат —  лучшие цены и качество предлагают компании, которые активно включают в работу передовые технологии, расширяют возможности IT систем через интеграцию готовых библиотек, закладывают тестирование ПО как часть архитектуры проекта и оптимизируют рабочее время за счет продвинутых технологий и  классных программистов, которым по зубам любая задача. Использование среды Node.js — один из подходов к оптимизации процесса разработки web-приложений.

Почему мы любим Node.js

В Магоре мы постоянно тестируем новые идеи, и уже не первый год работаем с Node.js, который является платформой для запуска как серверных, так и десктопных приложений на языке ява-скрипт,  (кстати, на Node.JS можно и микроконтроллеры программировать). Т.о. Node.js применяется преимущественно на сервере, выполняя роль веб-сервера». И задачи, которые потребовали бы привлечения дополнительных программистов-бекэндеров, решаются с меньшими трудозатратами.  

Использование NodeJS для решения типовых задач

 
  • трекинг пользователей по  GPS-координатам в реальном времени;
  • разработка чата с огромным количеством одновременно общающихся пользователей,
  • прототипирование проектов различной сложности,
  • поиск оптимальных результатов в определенном радиусе по заданным критериям;
  • создание/редактирование абстрактных объектов для формирования реляционных и нереляционных баз данных,
  • взаимодействие с ПО для связи с периферийными устройствами,
  • сбор и обработка статистических данных, и пр.
Проект Магоры, реализованный с использованием окружения NodeJS  

Преимущества Node JS:

 
  • Низкий порог входа — могут начать работать даже люди с минимальными знаниями в программировании. Почти каждый разработчик сталкивался в какой-то степени с Javascript, и ему не составит особого труда изучить Node JS;
  • Достаточно высокая производительность и стабильность, благодаря использованию V8 движка (V8 engine) от Гугл и методологии event loop;
  • Возможность оперировать данными в формате JSON (object notation) и при необходимости хранить их в этом же формате в базе данных; Огромное количество модулей, расширяющих функционал и поддерживаемых огромным обществом;
  • Отлично подходит для создания приложений, работающих в режиме реального времени и стриминга;
  • Поддерживается огромным количеством спонсоров, таких как Linux Foundation, PayPal, Joylent, Microsoft и пр.
  • Огромный выбор площадок для хостинга.
 

Пример из нашей практики:

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

Рассмотрим конкретный кейс Магоры:
поиск парковочного места для краткосрочной аренды.

 

Для предоставления релевантных результатов пользователю необходимо учесть следующие факторы:
 

  1. Актуальные GPS-координаты и радиус поиска — можно выбирать, насколько далеко искать парковочные места, какую единицу измерения использовать (метры, километры);
  2. Открыт ли доступ к конкретному парковочному месту — было требование, что арендодатель может в любой момент приостановить предоставление места в аренду;
  3. Доступность места по интервалу времени (временному окну) — пользователь мог выбирать, с какого и до какого часа ему необходимо место;
  4. Тип транспортного средства — например, парковка для трейлера, автобуса или легкового автомобиля;
  5. Минимальная и максимальная стоимость аренды.

 

Из всех вышеперечисленных факторов наиболее сложным был поиск доступного временного окна, так как владелец парковочного места мог настраивать расписание, по которому он сдает его в аренду. Например, если днем он находится на работе или уезжает за город только на выходные.

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

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

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

Технические детали проекта: В качестве основного фреймворка, который использовался для построения архитектуры серверного приложения использовался Loopback 3.0. В качестве СУБД использовалась MongoDB.

 

Для демонстрации фрагмента этого изящного решения , можно привести часть запроса, который выполнялся к базе для поиска: Пример кода с использованием Node.js

На данном фрагменте кода видно, как можно применять фильтры для получения конкретных результатов: можно задавать максимальное удаление от точки поиска, единицы измерения, другие параметры. Также в приведенном примере используются связи (relations), которые позволяют задавать более детальные фильтры.

Лайфхаки  работы с NodeJS

 

В процессе работы с NodeJS мы встречаем различные ситуации, которые заставляют нас не просто подумать над способами разрешения, а оперативно протестировать несколько альтернатив. Эти ситуации, будь-то архитектурный подход или разработка какой-либо фичи (feature), требуют непосредственно кодинга и отладки. В итоге, у одного разработчика фича может занять 4 часа, а у другого ни на второй, ни на третий день не выходит “каменный цветок”.

 

Одной из причин, почему так происходит, я вижу случаи, когда разработчики просто не умеют пользоваться отладчиком для NodeJS. Хотя,  на самом деле, это просто.


(переходите к следующему разделу, если пока не собираетесь становиться разработчиком на NodeJS)  

Отладка серверного кода с помощью Node JS

Существует 2 способа отладки написанного серверного кода, хотя под капотом, на самом деле, кроется один:  

  1. Отладка с помощью инструмента Node Inspector, который во многом похож на консоль разработчика браузера Chrome, что само по себе не удивительный факт, так как сам Node JS построен на Google V8 engine.
  2. Отладка с помощью любимой IDE — удобно: пишешь код и тут же отлаживаешь.

 

Для первого случая обратимся к официальной документации от NodeJS: необходимо запустить процесс с помощью флага —inspect или —inspect-brk node —inspect[=Port] path/to/file.js node —inspect-brk[=Port] path/to/file.js

Разница между этими 2мя флагами в том, что —inspect запустит отладчик и выполнит весь код до момента ожидания. В таком случае точки останова (breakpoints) можно ставить только в обработчиках событий. В случае же с флагом —inspect-brk отладчик запустит отлаживаемый процесс и остановится на первой операции для выполнения, ожидая действий от разработчика. Также можно указать порт, который будет использоваться при отладке (по умолчанию 9229).

После запуска процесса в окне консоли выведется информация вида

Debugger listening on ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e

Нас интересует адрес и порт, который мы будем использовать. Переходим по адресу http://[host:port]/json/list, где host и port следует указывать из шага выше после перехода по указанному адресу мы увидим JSON следующего вида:

{ «description»: «node.js instance», «devtoolsFrontendUrl»: «chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e», «faviconUrl»: «https://nodejs.org/static/favicon.ico», «id»: «0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e», «title»: «node», «type»: «node», «url»: «file://», «webSocketDebuggerUrl»: «ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e» }

Находим поле devtoolsFrontendUrl, копируем значение и вставляем в строку браузера Chrome и ему подобных. Отобразится окно, в котором мы можем отлаживать процесс так же, как и обычную web-страницу

  1. Необходимо запустить процесс с помощью флага —inspect или —inspect-brk

node —inspect[=Port] path/to/file.js node —inspect-brk[=Port] path/to/file.js

Находим поле devtoolsFrontendUrl, копируем значение и вставляем в строку браузера Chrome и ему подобных.

Отобразится окно, в котором мы можем отлаживать процесс так же, как и обычную web-страницу

IDE-отладчик- интерфейс   Для работы IDE необходимо указать параметры, которые будут использоваться при отладке, такие как
  • исполняемый файл NodeJS, который необходимо проверять;
  • переменные среды, которые необходимо установить (необязательно);
  • параметры запуска процесса (необязательно);
  • среда исполнения и версия NodeJS (необязательно);
  Большинство IDE и предоставляют инструкции, как настроить отладку. 

Пример настройки отладчика для IntelliJ IDEA

(аналогично настраиваются остальные продукты этой компании)  
  1. Для настройки нам нужно установить плагин.
  2. В правом верхнем углу кликаем на кнопку Add ConfigurationДобавляем конфигурацию
  3. В появившемся окне нажимаем на иконку +В интерфейсе дебагера нажимаем плюс
  4. Выбираем Node.jsВыбираем Ноду
  5. В открывшемся окне заполняем поляЗаполняем поля
  • Если есть какие-то ошибки, они будут указываться чуть выше кнопок OK, Cancel и Apply

    < p>. Например, на скриншоте выше от нас требуют указать правильную папку с проектом. Если все верно и ошибок нет, нажимаем кнопкуOK.

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

    можно запускать конфигурацию отладчика в работу

Первая просто запускает процесс NodeJS, а вторая, с жуком, запускает отладчик. Кликаем на нее.

  • IDE начнет отладку проекта. Если была поставлена точка останова, IDE остановится на выбранной строке.
Программа IDE в процессе отладки

На скриншоте представлена IDE в режиме отладки с остановленным на точке останова скриптом. Внизу мы видим панель отладчика. На ней представлены кнопки пошагового выполнения скрипта, callstack процесса и окно для просмотра текущих значений переменных.

  • Также на вкладке Debugger Console отладчика можно вводить выражения для вычисления на лету, с автодополнением.IDE в работе - режим автодополнения

 

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

Полезные ресурсы для разработчиков:

Заключение

Я надеюсь, что статья получилась полезной и помогла пролить свет на современные технологии, в числе которые достойное место занимает Node JS. Еще раз кратко перечислю сильные стороны NodeJS:


  • Благодаря платформе Node JS расширяются возможности применения языка ява-скрипт, изначально разработанного для работы с web-интерфейсами.
  • Использование Ноды упрощает разработку приложений, позволяя бизнесу удовлетворять возрастающие потребности пользователей в высокоэффективных, высоконагруженных приложениях, обеспечивая оперативный обмен данными в онлайн режиме.
  • Внедрение NodeJS упрощает решение задач и не требует привлечения синьор-программистов, расширяя пул исполнителей и сокращая издержки на разработку без потери качества программного обеспечения.
  • Программирование с  NodeJS обеспечивает более простое решение с точки зрения кода, которое легче поддерживать внутренней команде компании-заказчика  и проще передать для внесения изменений в случае смены разработчика.

Наша команда программистов готова помочь в реализации IT проектов любой сложности, включая аудит кода сторонних разработчиков и разработку сложных систем, в которых интегрированы веб-платформы и нативные мобильные приложения.   В Магоре рады ответить на ваши вопросы и проконсультировать по разработке.

Пишите нам на [email protected] или заполняйте форму на сайте, связаться с автором статьи можно по ссылке.