Приступая к созданию веб-проекта с нуля, скорее всего, станет вопрос об ограничении стека технологий одним языком программирования, и вам захочется рассмотреть серверную разработку на JavaScript. Этот материал поможет оценить плюсы и минусы такого подхода.
Что такое Node.js
Node.js — это среда выполнения кода, основанная на движке Chrome V8. Проще говоря, разработчики убрали из браузера DOM, пользовательский интерфейс и оставили только движок, который настроили для автономной работы. Технология считается революционной, так как поддерживает JavaScript на серверной стороне. С практической точки зрения это значит, что можно написать фронтенд- и бэкенд-приложения на одном языке программирования.
Основные отличия Node.js от других программных платформ
При обсуждении инструментов разработки часто используются термины фреймворк и библиотека, но в данном случае они не подойдут — перед нами среда выполнения кода, которая использует JavaScript.
Учитывая, что создание приложений, запускаемых в браузере, сильно отличается от создания серверных приложений, справедливее сравнивать технологию с инструментами бэкенд-разработки. Поэтому давайте сперва разберемся, в чем Node.js уступает серверным языкам программирования:
Однопоточные процессы. Поскольку платформа задействует одно ядро центрального процессора, одновременно может обрабатываться только одна команда. Реализовать мультипроцессность можно только для ограниченного количества несложных операций. Тяжелые вычисления заблокируют все остальные запросы и обработка больших файлов вызовет задержки.
Молодая экосистема. У JavaScript огромная экосистема продуктов для создания клиентских приложений, которая создавалась коллективными усилиями на протяжении десятков лет. Про серверную разработку такого не скажешь. В результате программисты ограничены основной библиотекой, у которой пока нет продвинутых инструментов для работы с реляционными базами данных, обработки изображений, синтаксического анализа XML и многого другого.
Так почему же компании вроде Uber, LinkedIn и Medium выбирают Node.js? Что эта платформа предлагает в противовес недостаткам и почему ее так часто используют при создании SPA-сайтов и приложений? Разберем ключевые достоинства на примерах ниже.
Когда следует отдать разработку на Node.js на аутсорс
Технологический стек ограниченный одним языком программирования ускоряет разработку цифровых продуктов. Поэтому его выбирают для прототипов и MVP-версий, когда нужно быстро тестировать идеи и вносить изменения.
На первых этапах существования продукта найм штатных специалистов часто не оправдан, так как с пониманием потребностей аудитории могут менятся производственные нужды. Аутсорсинг разработки на Node.js поможет сформировать оптимальную команду под меняющиеся цели проекта.
Давайте посмотрим, как эти преимущества воплощаются на практике, и для каких приложений стоит рассматривать заказную разработку на Node.js.
Мгновенный обмен сообщениями
Сегодня инструменты онлайн-общения используются не только в социальных сетях, но и на коммерческих сайтах. Пользователи привыкли общаться с консультантами и службой техподдержки не покидая страницу. Из-за этого к мессенджерам предъявляют высокие требования.
Пользователи привыкли обмениваться не только текстовыми сообщениями, но также пересылать видео и фотографии. Не менее важно отображать актуальные статусы сообщений — например, когда в групповом чате одновременно печатают несколько собеседников, и это видят все участники.
Событийно-ориентированная архитектура позволяет устраивать двусторонний обмен данными между клиентом и сервером через одно открытое соединение. Платформа также предоставляет основные функции для создания мессенджеров и чат ботов и упрощает реализацию используемых в них серверных событий и push-уведомлений. Например, с библиотекой Socket.io базовый функционал чата настраивается с помощью нескольких строк кода.
Инструменты совместной работы
С Node.js создают программы для совместного просмотра и редактирования документов, управления проектами, учебы. Это также связано со способностью платформы обрабатывать потоки данных в реальном времени.
В подобных приложениях события и запросы происходят одновременно — несколько пользователей одновременно редактируют один и тот же абзац, обмениваются комментариями, прикрепляют медиафайлы. Внесенные ими изменения могут применяться только после каскада событий, где каждый шаг зависит от предыдущего.
Обмен данными происходит через веб-сокеты, из-за чего многочисленные операции не перегружают сервер, и фронтенд-приложение своевременно получает данные . Таким образом у всех пользователей единое согласованное представление.
Создатели Trello выбрали эту платформу из-за неблокирующей архитектуры, которая подходит для мгновенного распространения большого количества обновлений и хранения множества открытых соединений. Благодаря возможности получать мгновенные обновления люди используют виртуальную канбан-доску, по которой следят за ходом выполнения задач, назначают ответственных, устанавливают дедлайны и т.д.
Стриминговые сервисы
Стриминговые сервисы для прослушивания музыки или просмотра сериалов работают немного иначе, чем другие веб-приложения. Программа выполняется на устройстве конечного пользователя, а не на удаленном сервере. Чтобы не перегружать локальное устройство и сервер код приложения передается на локальный компьютер частями, сохраняя при этом соединение для загрузки новых компонентов по запросу.
Первоначально загружаются только пакеты, необходимые для запуска приложения, а оставшаяся часть загружается уже в фоновом режиме. Эти потоки не требуют кэширования — достаточно открытого соединения. Node.js отлично подходит для таких сервисов благодаря нативному Stream API.
В качестве примера невозможно не упомянуть Netflix, крупнейшего поставщика медиа-услуг с миллионами пользователей по всему миру.
Наши специалисты по Node.js
Решение в пользу Node.js должно быть осознанным. Часто технологию выбирают для проектов, которым она не подходит. Это связано с популярностью JavaScript, ведь знание Node.js позволяет фронтенд-разработчикам называть себя специалистами полного цикла. К сожалению, в действительности им обычно не хватает опыта работы с серверными приложениями, что сказывается на неверных архитектурных решениях.
Наши специалисты работают в тесной связке со старшими бэкенд-разработчиками, которые помогают им заложить правильную основу будущей системы и консультируют в ходе выполнения сложных задач. Такой подход позволяет использовать возможности платформы по максимуму — добиваться отказоустойчивости, масштабируемости систем и обеспечивать надежную работу в микросервисной архитектуре и контейнеризации.
Почему мы
Зная преимущества и недостатки технологии, мы рекомендуем ее только когда уверены, что это даст проекту лучшую производительность.
Work Solutions использует Node.js и относящиеся к этой платформе фреймворки Nest.js и Express.js для создания приложений со сложным рендерингом на стороне клиента, множественными одновременными запросами и постоянной двухсторонней передачей данных от фронтенда к бэкенду. Так достигается гибкость, позволяющая системе расти вместе с бизнесом.