Как мы добираемся до текущего уровня сложности, шаг за шагом

Веб-разработка, особенно интерфейс, несомненно, является одной из самых сложных профессий в разработке программного обеспечения. Его ландшафт постоянно меняется. Инструменты и технологии устаревают и заменяются новыми с поразительной скоростью. Это также стало обширной областью, выходящей далеко за рамки HTML, CSS и Javascript. Возвращаясь на десять лет назад, могли ли вы представить себе, что разработчикам внешнего интерфейса, которые используют интерпретируемый язык для написания кода, придется возиться со всеми видами инструментов компиляции в своей повседневной работе? Довольно безумно, не так ли?

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

«История не может дать нам программу на будущее, но она может дать нам более полное понимание самих себя и нашей общей человечности, чтобы мы могли лучше смотреть в будущее».

— Роберт Пенн Уоррен

Счастливые файловые серверы

Веб-архитектура началась с нулевой архитектуры. Самые ранние веб-сайты были просто общедоступными файловыми серверами, которые понимали HTTP-запросы и отправляли HTML-файлы клиентам.

К удивлению многих людей, такие веб-сайты все еще существуют и работают очень хорошо. Например, Craigslist выглядит как живое ископаемое — полностью статичный контент, чистые HTML-файлы, никаких изображений, никакого дизайна; тем не менее, он по-прежнему занимает 78-е место по трафику среди всех веб-сайтов в мире. Это свидетельство силы простоты.

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

Переход к динамическому контенту

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

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

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

Расцвет СПА

Как видите, дела внезапно пошли в гору, как на стороне клиента, так и на стороне сервера. Это осложнение было вполне оправдано по нескольким причинам:

  1. Сеть стала болтливым двусторонним каналом связи. Взаимодействие с пользователем происходит всегда, в результате чего содержимое страницы меняется вместе с ним. Это включает в себя много динамического обмена данными и быстрое манипулирование элементами страницы.
  2. Многие веб-сайты получали огромное количество трафика и данных, и возможность «масштабирования» стала критической темой.

Несколько достижений в области технологий пришли вовремя и сделали этот скачок возможным:

  • Браузеры стали намного сильнее, особенно в области динамической выборки данных (AJAX) и манипулирования DOM.
  • Сетевая инфраструктура стала более надежной и быстрой, а CDN теперь является товаром.
  • Технологии виртуализации на стороне сервера (Docker, Linux Container и т. д.) созрели.
  • Рассвет фреймворков компонентов пользовательского интерфейса — Angular, React, Vue.

В отличие от предыдущих архитектур, SPA (одностраничные приложения) — это настоящие приложения, работающие внутри браузеров. У них есть свои собственные среды разработки, они развертываются отдельно, имеют расширенные состояния и могут быть такими же сложными, как несколько миллионов строк кода. Портал Microsoft Azure претендует на звание крупнейшего SPA в мире, и к 2016 году это его LOC.

То, как работают SPA, также полностью отличается от предыдущих веб-сайтов. Интерфейсное приложение упаковано в несколько больших файлов Javascript. Браузеры загружают их из CDN, запускают для извлечения данных из серверных API, а затем отображают пользовательский интерфейс.

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

Гибридная эра

СПА — это круто, но не без недостатков. Вот две основные проблемы:

  • Хотя они обеспечивают отличный опыт взаимодействия, их начальная загрузка может быть довольно медленной. Все приложение должно быть загружено и выполнено до того, как будет отображено первое значимое содержимое. Они также имеют тенденцию показывать счетчик за счетчиком из-за водопада динамической загрузки данных.
  • Они вредны для SEO, потому что сервер возвращает не HTML. Даже сегодня сканеры поисковых систем не могут обрабатывать большинство SPA-сайтов.

Если сомневаетесь, развивайте архитектуру 😄.

Идея довольно проста: давайте использовать старый статический файловый сервер для обслуживания исходного HTML-документа, а затем пусть SPA возьмет на себя все остальное. Таким образом, время первоначальной загрузки значительно сокращается, а проблема SEO решается.

Новые вещи, которые сделали возможной эту новую парадигму, — это «мета-фреймворки», такие как Next.js, Nuxt.js и т. д. Они оборачивают фреймворки компонентов пользовательского интерфейса и превращают их в фреймворки приложений. Они отвечают на HTTP-запросы и доставляют предварительно обработанный HTML. Они также предоставляют способ предварительного рендеринга статических страниц и отправки их в CDN во время сборки.

Здесь произошел один удивительный побочный эффект: у фронтенда появился свой «бэкенд». Должны ли мы называть это «фронтенд» или «мидл-энд»? Хотя его основной обязанностью является предварительный рендеринг страниц, со временем люди проявили творческий подход и позволили ему взять на себя больше обязанностей. Мы постепенно перешли к следующему этапу веб-архитектуры.

Безсерверный — новый черный

Сейчас мы находимся на последней итерации развития архитектуры. Честно говоря, я думаю, что «безсерверный» здесь плохой термин, потому что он может означать многое и лишь частично совпадает с тем, что происходит здесь, но я все равно буду его использовать.

Все началось с глупого вопроса: «Раз у моего фронтенда теперь есть свой блестящий бэкэнд, зачем мне еще нужен отдельный бэкэнд?» Ответ: нет. Во многих случаях метафреймворк может покрыть все ваши потребности в бэкенде.

Несколько важных изменений:

  • Отдельного бэкенда больше нет.
  • Бэкенд нашего фронтенда в значительной степени заменяется «краем». Edge — это новое поколение вычислительных узлов, развернутых по всему миру. Они похожи на CDN, но могут выполнять пользовательский код, что делает их идеальными для обработки веб-вычислений.
  • Хранение управляется новым поколением «бессерверных» баз данных (размещенных отдельно), которые хорошо работают с возможностью подключения с периферии.

Новая архитектура приносит два улучшения:

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

Цена? Теперь вам нужно не только внедрить метафреймворк, но и развернуть приложение на совместимой бессерверной платформе — Vercel, Netlify, Fly.io и т. д.

Архитектуры развиваются, а обязанности меняются

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

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

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

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

Want to Connect?

I'm the creator of ZenStack.

Our goal is to let you save time writing boilerplate code
and focus on building what matters - the user experience.