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

Когда появились первые одностраничные софты, или Single Application Page, вокруг поднялась небывалая шумиха. До сих пор ведутся споры, зачем применять их для MVP и как с их помощью помогать стартапам. Чтобы подробнее рассмотреть этот вопрос, мы подготовили статью, что такое SPA, в чем их сильные и слабые стороны, какие методы их разработки существуют.
Так называется сайт или приложение, которое состоит всего из одной HTML-страницы. Такие ресурсы подключаются к серверу однократно, а потом уже добавляют, обновляют сведения без необходимости полной перезагрузки. При этом базовые блоки страницы не изменяются, а обновляется только то, что использует посетитель. Такой подход повышает показатели скорости и делает пользовательский опыт более положительным (UX).
Это совершенно новый подход к взаимодействию с пользователем, который позволяет затрачивать меньше усилий и времени на разработку софта, сократить затраты серверных ресурсов. Все вместе это объясняет популярность одностраничников. Даже такие лидеры рынка, как Google, прибегают к подобным продуктам.
Вы тоже ими пользуетесь. Приведем в пример самые популярные варианты одностраничного софта.

Первые несколько секунд, прежде чем страница откроется, мы наблюдаем индикатор загрузки — это идет прогрузка с сервера. Как только процесс завершается, предоставляется полный доступ к содержимому почтового ящика, его возможностям. Когда вы работаете с наполнением почты, верхняя, левая и правая панели будут одинаковыми.
Большая часть сервисов этого гиганта относится к одностраничникам. Только взгляните на интерфейс: можно прокручивать страницу или читать документ, но все перечисленные выше части страницы останутся на месте. Программа регулярно обновляется, загружая актуальные комментарии.
Удивлены? Да, это тоже одностраничное приложение, несмотря на объемы с видеоданными. Убедиться в этом просто: заходим в учетную запись, переключаемся между разделами и видим все то же оформление с логотипом площадки.
А еще сюда можно отнести всеми любимый Facebook, Airbnb, Trello и много чего другого.
Даже крупные игроки в сети все чаще выбирают одностраничники. Давайте разбираться, почему они так поступают.

Задача софта — функционировать архибыстро и экономить время пользователя за счет исключения бессмысленных ожиданий. Поэтому SPA оперативно откликаются на действия пользователей — они не нуждаются в полном обновлении, а загружают те блоки, которые собирается применять человек. Это помогает значительно ускорить работу софта.
Полезно. Секунды загрузки можно перевести в реальные деньги. По данным Google, если она вырастает на 1-3 секунды, риск ухода пользователя повышается на 32% и выше. А согласно другому исследованию, каждая 0,1 секунда ожидания снижает объемы продаж на 1% (данные Amazon) — миллиарды долларов.
Залогом успеха такого web-софта, как SPA, является комфорт аудитории. Многие отчеты подтверждают, что медленная работа ресурсов заставила пользователей отказываться от их услуг. А в случае с одностраничниками удобство растет, потому что в перезагрузке нуждается не вся страница, а только какие-то ее блоки. Из-за этого удовлетворенность аудитории растет, как и коэффициент удержания (CRR).
Поскольку софт отсылает серверу всего один запрос, а потом просто обновляет данные, кеширование проходит успешнее. Даже если покинуть сеть, можно воспользоваться этими сведениями, чтобы работать дальше. Это удобно: софт не прекратит работу, когда интернет пропадет, а потом может синхронизироваться с обновленной версией.
Ситуацию упрощает то, что специалистам не приходится писать код, делать рендеринг. Зато можно повторно применять серверный код, отделяя приложение от внешнего пользовательского интерфейса. И каждая группа — фронтенд и бэкенд — имеет возможность сконцентрироваться на своих задачах в рамках разработки SPA.
Как именно? Внешний интерфейс существует отдельно от серверных служб. И раз серверные опции стабильны, клиент может свободно взаимодействовать с софтом — проходить регистрацию, заполнять формы, прочее. Это помогает превратить софт в полноценную службу, для которой можно сделать несколько типов пользовательского интерфейса, — без вреда для серверной части.
Момент, который обеспечивает гладкую работу софта без багов и прочих нарушений. Проще всего отладка делается посредством Google Chrome — легко контролировать элементы, данные, сетевые операции, ставить эксперименты.
Технология SPA реализована гораздо проще, чем MPA. Основная причина — собственные инструменты для работы с Google Chrome. Можно просто следить, как идет рендеринг JS-кода через браузер.
Одностраничники используют меньше трафика, так как подгружаются всего раз. Естественно, они эффективнее работают в местах с низким качеством интернет-соединения, а еще могут оставаться действующими офлайн.
Приложения SPA легко подружатся с любой операционной системой, браузером или устройством, а кодовая база будет единой. А поскольку пользователь может применять софт везде, где ему удобно и необходимо, качество взаимодействия резко увеличивается. А еще у разработчиков есть все возможности, чтобы создавать продукты с широчайшим функционалом.
У любого продукта есть свои недостатки и особенности применения. Разберем наиболее характерные для одностраничников моменты.
Одна страница с URL-адресом ограничивает возможности сео-продвижения. Недостаточно индексации, хорошей аналитики, метаданных, уникальных ссылок. Поисковые боты не очень хорошо индексируют такие продукты.
Эту проблему специалисты решают посредством SSR или серверного рендеринга: в браузер высылается уже отрисованная на 100% страница. Площадка остается одностраничной, ключевые задачи делаются на сервере. Однако при первой загрузке софт получит готовую страницу с необходимыми сео-составляющими. Единственный недостаток такого предложения — повышение стоимости.
Безусловно, одностраничное веб-приложение хвалят за высокую скорость и производительность, но загрузка все равно занимает некоторое время. Зато после этого все подгружается динамически. В целом, даже эту проблему можно постараться минимизировать, если команда разработчиков обладает достаточным уровнем умений.
Такой софт более уязвим перед кибератаками, чем тот же MPA. С помощью межсайтового скриптинга хакеры могут встраивать вредоносные коды в страницу, браузер пользователя. А еще контроль доступа на операционном уровне недостаточно жесткий. И если не принять меры, персональные данные могут быть украдены.
От кнопки обычно ждут, что она вернет пользователя на предыдущий шаг в приложении, но поскольку страница одна, вас перекидывает на предыдущий сайт. И это сказывается на пользовательском опыте негативно.
Для этой задачи есть роутинг. Это важная фича в вопросе навигации SPA (Single Page Application). Ее возможности помогают настроить маршрутизацию внутри ресурса, чтобы можно было двигаться по истории одной вкладки без перезагрузки всей страницы.
Одностраничный софт рекомендован в следующих случаях:
По сути, это веб-приложения, интернет-магазины, социальные сети, мультимедийные платформы, а также мобильный софт.
Вам потребуется команда, время, инструменты и технологии. Разберемся по порядку со всеми пунктами.

От специалистов требуются знания JavaScript, CSS и HTML и не только. И сюда нужно включить:
Сроки определяются с учетом масштабности софта, требованиям к функциональности, количества сотрудников. И еще потребуется план, ресурсы для сопровождения приложения — решения проблем, добавления опций, обновления и так далее. Все в рамках бюджета.
В программировании SPA инструменты и технологии — это критически важные составляющие. Три основных технологии мы уже назвали: JavaScript, CSS и HTML. Потребуются разнообразные фреймворки, чтобы составить костяк софта, — рассмотрим их поподробнее.
REACT. Стал важнейшим инструментом для одностраничников, был придуман разработчиками соцсети Facebook и до сих пор ими сопровождается. У него открытый код, поэтому каждый поспособствовать модернизации технологии. Facebook, Bloomberg, Airbnb, Instagram, Skype пользуются этим вариантом, когда создают софты. Самый популярный инструмент сегодня.
Позволяет создавать элементы, которые легко масштабируются, переиспользуются и обновляются динамически — перезагружать страницу больше не требуется. И поскольку сообщество разработчиков просто огромное, как и возможности, этот инструмент уже стал важнейшим для создания производительных продуктов.
ANGULAR. Второй по популярности фреймворк, предоставляющий разработчикам все возможности для динамических, сложных приложений. Его мощная система компонентов, комфортные инструменты маршрутизации, обработки данных, а также возможности тестирования, отладки не могут не радовать. Помогает увеличить «словарный запас» HTML.
VUE.JS. Предлагает простой в применении API для создания элементов, управления состоянием и маршрутизации. Отлично сбалансирован по параметрам производительности, функциональности. Идет с открытым исходным кодом и лицензией MIT. Легко адаптируется, масштабируется, а также сделан максимально простым.
EMBER.JS. Производительное, проверенное на практике решение, которое часто применяется при создании сложных и амбициозных SPA в IT-среде. Мощная система компонентов, а также удобный инструментарий позволяют таким компаниям-гигантам, как Microsoft, Apple, Netflix, LinkedIn, создавать продукты с его применением. Поддерживает автоматическое связывание данных, обладает обширным сообществом разработчиков.
Этот фреймворк предлагает встроенную среду с оперативной автоматической перезагрузкой, пересборкой кода и тестированиями. Вы можете быстро развернуть софт с помощью всего одной команды.
SVETLE. Относительно новый фреймворк, который использует необычный подход к созданию одностраничников. Вместо того чтобы выполнять большие массивы работы на стороне клиента, фреймворк позволяет сделать множество операций на этапе компиляции. Код становится эффективнее, а производительность вырастает в разы.

SPA — это фронтенд-приложение, в основу которого закладываются понятия тонкого бэкенда и толстого пользователя. Давайте подробнее рассмотрим архитектуру, которая позволяет создавать настолько отзывчивые софты.
HTML, CSS и JavaScript. Три языка программирования, о которых мы уже говорили. HTML отвечает за структуру и содержимое, CSS — за дизайн, JavaScript — за динамику, взаимодействие с аудиторией.
Client-side. Приложения SPA APP функционируют со стороны клиента, а значит, весь код выполняется в браузере пользователя. Это и обеспечивает высокую скорость, отзывчивость. Запросы, обработка данных делаются без полной перезагрузки страницы.
Роутинг, навигация. Мы уже говорили, что программы применяют роутинг для перехода между разделами, состояниями. Он помогает отследить состояние URL и загрузить необходимый модуль, страницу.
Элементы. Приложение представляет множество независимых разделов или блоков, которые часто разрабатываются по отдельности, используются повторно. Модули представляют определенные возможности, интерфейс, могут вкладываться друг в друга.
Состояние (State). Имеет большое значение, что хранится со стороны пользователя: для временных данных, пользовательских вводов, состояния компонентов, прочей информации.
AJAX. Асинхронный подход, благодаря которому стало возможным обмениваться данными между клиентом и сервером без полной перезагрузки страницы. Софт использует такой подход, чтобы получать данные с сервера, обновления и прочих взаимодействий.
Подход продолжает развиваться, а мы видим появление новых видов одностраничных приложений, сайтов.
Mint — это даже не библиотека с фреймворками, а новый язык программирования, который появился именно для одностраничных приложений. Его задача состоит в том, чтобы исключать ошибки во время разработки. Например, в процессе компиляции. Потому что проверка типов проводится максимально эффективно, исчерпывающе.
Также очень перспективным выглядит Rust, который составляет конкуренцию JavaScript. Используя его, можно разрабатывать одностраничные софты.
