Node-Center
Menu
  • Главная
  • Документация
    • Пакеты и модули
    • Туториалы
  • Технология
    • Полезные ссылки
    • Инструменты
    • Статьи
    • Статьи по смежным темам
  • Сообщество
    • События
  • О сайте
Menu

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

Posted on 15.09.201925.08.2019 by node-center

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Отладка с помощью инструмента Node Inspector, который во многом похож на консоль разработчика браузера Chrome, что само по себе не удивительный факт, так как сам Node JS построен на Google V8 engine.
  • Отладка с помощью любимой 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-страницу

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

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

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

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

  Для работы IDE необходимо указать параметры, которые будут использоваться при отладке, такие как

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

  Большинство IDE и предоставляют инструкции, как настроить отладку. 

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

(аналогично настраиваются остальные продукты этой компании)  

  • Для настройки нам нужно установить плагин.
  • В правом верхнем углу кликаем на кнопку Add Configuration
  • В появившемся окне нажимаем на иконку +
  • Выбираем Node.js
  • В открывшемся окне заполняем поля
  • Если есть какие-то ошибки, они будут указываться чуть выше кнопок OK, Cancel и Apply< p>. Например, на скриншоте выше от нас требуют указать правильную папку с проектом. Если все верно и ошибок нет, нажимаем кнопкуOK.Конфигурация создана, можно пробовать запускать. В правом верхнем углу теперь отображается название только что созданной конфигурации, зеленые иконки треугольника и жука.

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

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

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

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

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

Почта

node.center.ru@gmail.com

Свежие записи

  • Валюта дороже золота
  • 3 Основные характеристики блокчейна
  • Выбор платформы для торговли криптовалютой
  • Особенности игры Minecraft 
  • Кейсы в CS:GO
  • Maker криптовалюта
  • Как получить лучшие КС ГО кейсы
  • Как скачать игру need for speed underground 2
  • Как получить прибыль в ставках на спорт

Меню

  • Главная
  • Документация
    • Пакеты и модули
    • Туториалы
  • Технология
    • Полезные ссылки
    • Инструменты
    • Статьи
    • Статьи по смежным темам
  • Сообщество
    • События
  • О сайте

Свежие записи

  • Валюта дороже золота
  • 3 Основные характеристики блокчейна
  • Выбор платформы для торговли криптовалютой
  • Особенности игры Minecraft 
  • Кейсы в CS:GO
  • Maker криптовалюта
  • Как получить лучшие КС ГО кейсы
  • Как скачать игру need for speed underground 2
  • Как получить прибыль в ставках на спорт
  • Civilization 5 brave new world системные требования

Почта

node.center.ru@gmail.com

© 2022 Node-Center