Найти в Дзене
letsCode

Почему нет Web без node.js

node.js - JavaScript окружение для сервера или для разработчика
node.js - JavaScript окружение для сервера или для разработчика

Часто начинающие web программисты жалуются, что всё больше фреймворков и учебных материалов используют node.js для рабочего окружения разработчика. Ну, то есть, открываем мы какое-нибудь руководство или статью в блоге очередного кодера и видим что в духе

Первым делом создадим новый проект в node.js командой `npm init new_project` и установим необходимые зависимости

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

Дело в том, что за последние 10 лет, благодаря подаче Apple и поддержке остальных производителей мобильной электронике, очень сильно изменились web приложения. И те приложения, которые раньше прекрасно работали на jQuery, сегодня с этим jQuery становятся сложными в обслуживании вечно лагающими и тормозящими монстрами. Требования к современному интерфейсу и десктопных, и мобильных, и вэб приложений уже практически не отличаются: каждое из них должно мгновенно и понятно без задержек отрабатывать действия пользователя. Сейчас пользователь может простить приложению первоначальную подгрузку и белый экран (хотя и это уже становится раздражающим фактором, который будет затронут в статье о WebAssembly и доменировании вэба над классическими приложениями), но не может простить ту же подгрузку и мигание экрана при переходе между страницами одного приложения. Пользователь всегда хочет видеть, что приложение точно распознало дейтвие пользователя и как-то (желательно быстро) обрабатывает его запрос.

К чему вся эта лирика выше? Да к тому, что сложность приложения растёт, растёт количество обслуживающего кода, программисты хотят писать более короткий и ёмкий код, который легко обслуживать и читать, а это дополнительные библиотки. Программисты не хотят вручную оптимизировать работу с DOM деревом, поэтому берут готовые решения, реализующие Virtual DOM. При этом никто не хочет платить временем и батарейкой телефона пользователя, поэтому все вещи, которые можно НЕ делать у пользователя, делают на машине разработчика. Как следсвие - у нас появляются инструменты, которые на машине разработчика преобразуют новые языковые конструкции в код, понятный старым браузерам, разным версиям и маркам браузеров, они следят за корректностью кода, сжимают код, чтобы не тратить лишнего трафика и быстрее грузить его, разбивают код на небольшие порции, подгружаемые на устройства по мере необходимости и даже удаляют тот код, который точно не будет использован в работе. Все эти действия выполняют сотни и тысячи мелких программ, которые мы могли бы загрузить на машину пользователя, но тогда даже простейшая программа весила бы сотни мегабайт, что явно не сделало бы наших пользователей более счастливыми.

Кстати, последнее время появились и минималистичные, так называемые "исчезающие" фреймворки вроде svelte, которые, с помощью node.js в прямом смысле исчезают из вашего кода при сборке приложения. Т.е. структура фреймворка и инструментария, загружаемого в node.js, таковы, что в итоговое приложение попадает только код, написанный вами, а почти все примитивы и инструменты, которые вы использовали при разработке, попадают под нож, уменьшая размер сборки настолько, насколько это возможно.

Да, многие современные фреймворки, вроде Vue.js и React.js позволяют писать приложения "по старой схеме": подключаем пару-тройку файлов к html странице и пишем код без node.js. И даже вес таких приложений не является слишком большим. Но платить за это будут наши пользователи. Тут кто-нибудь скажет "но на моём ноутбуке это всё летает и диспетчер задач/htop не показывает хоть какой-нибудь значимой нагрузки. Да, не показывает, но не потому, что вы всё правильно написали, а потому, что проверять надо в боевых условиях, залив весь свой код на боевой сервер, создав близкие к реальным сетевые задержки и проблемы с потерей пакетов, а проверять надо не на своём новеньком iPhone или Samsung Galaxy, а на самом простом Android устройстве за $50-100 (а их, судя по всему, большинство в мире)

Доля наиболее популярных разрешений экранов за период август 2018 .. август 2019 в мире (среди мобильных устройств)
Доля наиболее популярных разрешений экранов за период август 2018 .. август 2019 в мире (среди мобильных устройств)

Ну и, в качестве бонуса, многие разработчики, пришедшие в fullstack вэб разработку с каким-либо backend опытом, часто имеют опыт работы со статически типизированными языками, вроде Java или C# и без привычной проверки типов в JavaScript испытывают дискомфорт. И этот дискомфорт также помогает победить node.js, имеющий обширную коллекцию транспайлеров в JavaScript. И выбор действительно огромный: от TypeScript и Dart, похожих на Java и C#, до чего-нибудь более экзотического, вроде LiveScript и Elm, похожих на Haskell. Более того, организовать тестирование с помощью node.js чуть проще.

Таким образом node.js хоть и делает разработку более сложной за счёт добавления дополнительных инструментов и действий, но, за счёт этого, он позволяет совершать заведомо меньше действий, помогающих вам писать более выразительный и эффективнй код не ударяющий по производительности и нервам ваших пользователей. И это достойный инструмент для создания действительно крутого современного интерфейса.

Больше интересных тем и бесплатные учебные материалы для обучения разработке:

➡ YouTube: https://www.youtube.com/letsCodeDru

➡ Второй канал: https://www.youtube.com/geekChatDru

➡ Twitch: https://www.twitch.tv/drucoder

➡ Наш Тви: https://twitter.com/letsCodeDru

➡ Чат в Телеграм: https://t.me/joinchat/FeiP9xEhqHajfqhLr4z-Nw

➡ Канал в Телеграм: https://t.me/letsCode_dru

➡ Сервер Discord: https://discord.gg/xs6XxSx