Привет, Хабр! В России набирает популярность новый подход к созданию пользовательских интерфейсов — Backend Driven UI (BDUI). В нём сервер задаёт структуру и поведение интерфейса, а приложение просто отображает его на экране.

BDUI уже используют в своих приложениях многие коллеги из индустрии. Меня зовут Елена Зеликсон, я старший инженер по тестированию в VK. О том, какие преимущества у этого решения и как его применять, подробнее расскажу в этой статье.

BDUI и нативная разработка: в чём разница?

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

В этом случае обновлять приложение нужно при любом изменении экрана. Например, чтобы поменять цвет кнопки придётся собрать новую версию продукта, отправить её на модерацию в App Store или Google Play и дождаться, пока пользователи установят обновление. Это может занять несколько недель.

BDUI работает по-другому. Клиент хранит только основной фреймворк для отрисовки и исполнения UI-компонентов. Всем остальным — структурой экрана, логикой и контентом — управляет сервер. Это очень облегчает работу. Поскольку интерфейс обновляется через сервер, пересобирать приложение и проходить ревью в магазине не нужно — достаточно изменить JSON, и клиент отрисует экран по новой схеме.

Ключевая роль в системе отведена BDUI-фреймворку — именно он отвечает за правильную интерпретацию и применение команд сервера. По сути, фреймворк состоит из нескольких связанных компонентов:

  • JSON-парсер. Принимает от сервера структуру и определяет, что выводить в интерфейс, например кнопку, текст или виджет.

  • UI-рендерер. Использует нативную библиотеку компонентов и собирает экран «на лету»: размещает элементы, подключает нужные стили, задаёт размеры и позиционирование. 

  • Обработчик событий. Делает UI интерактивным: пользователь может нажимать кнопки, запускать действия или использовать навигацию.

  • Механизм кеширования. Ускоряет повторную загрузку экранов и улучшает работу приложения при нестабильном соединении.

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

Это позволяет быстро менять баннеры, переставлять блоки и добавлять новые элементы, используя один и тот же компонент. В этом случае сервер управляет бизнес-логикой и формирует интерфейс под конкретного пользователя. Например, автоматизированные пользователи видят кнопку «Купить», а гости — кнопку «Войти».

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

Разберём отличия нативной разработки от BDUI-подхода на примере двух JSON-структур: 

Нативный подход

Клиент получает название, описание и цену продукта, а также изображения и отзывы. Данных о компонентах интерфейса и правилах отображения нет. А всё, что связано с визуальной частью — от размещения элементов до логики переходов, — определяется внутри самого приложения.

BDUI-подход

Вместо «сырых» данных сервер возвращает описание целого экрана: список компонентов, порядок их отрисовки, содержание и стиль. Здесь есть текст с заголовком, изображение с заданными размерами и кнопка для перехода на экран оформления заказа — то есть всё для отрисовки полноценной страницы.

Достоинства и недостатки BDUI

Основное преимущество BDUI — быстрая доставка обновлений приложения конечному пользователю. Например, в нативной разработке цикл релиза новой функции может занять около трёх недель: 

  • три дня на разработку;

  • две недели, чтобы собрать все изменения от команды в основную версию проекта;

  • два дня на регрессионное тестирование.

И только после этого можно публиковать в App Store или Google Play, ждать модерацию, при необходимости вносить правки и отправлять проект на повторную проверку.

Работа с BDUI намного проще. Сроки разработки и тестирования не меняются, но в остальном релиз сильно ускоряется. Изменения сразу вносят в backend-интерфейс, поэтому ждать финальную сборку и модерацию в магазинах приложений больше не нужно. Достаточно активировать переключатель, и функцию увидят все пользователи. 

Преимущества запуска BDUI хорошо видно на диаграмме:

Из других преимуществ BDUI можно отметить:

  • Широкие возможности для A/B-тестирования. С BDUI приложение обновляется гибко и быстро. Например, чтобы протестировать новый виджет, достаточного показать его выборке пользователей, и если результат не устроит, то просто отключить функцию через параметр на сервере.

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

    С BDUI эта проблема решается иначе: сервер отправляет один и тот же экран на все платформы, и тот рендерится максимально похоже. 

  • Единая кодовая база. BDUI использует для iOS и Andriod общий код, поэтому экраны автоматически адаптируются под обе системы. Это отчасти сокращает человеческие, временные и финансовые затраты на разработку.

Но, при всех преимуществах, у BDUI есть и недостатки. Вот некоторые из них:

  • Зависимость от стабильного бэкенда. В BDUI всё зависит от сервера: если тот сбоит, то экран может не загрузиться и вместо интерфейса будет индикатор бесконечной загрузки. Это особенно критично для банковских приложений, пользователи которых регулярно проверяют свои счета, баланс и другую важную информацию.

  • Дополнительные расходы на разработку. Часть функций приложения тесно связана с ОС смартфона — камерой, геолокацией или системными сервисами. Поэтому полностью отказаться от нативной разработки нельзя. 

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

  • Ограничения в дизайне и анимации. BDUI использует заранее заданную библиотеку компонентов и получает разметку с сервера. Это ограничивает возможность доработок интерфейса на стороне клиента, особенно в плане анимаций. Поэтому иногда приходится комбинировать BDUI с нативной частью приложения, но такие «гибридные» решения могут приводить к багам.

Кроме того, приложение на основе BDUI зависит от сети, так как его интерфейс загружается с сервера. Поэтому в местах с плохим интернетом, например в метро или лифте, отклик экрана может заметно ухудшиться.

Почему не WebView?

У BDUI и WebView много общего — например, кастомизация интерфейса и показатели time-to-market. Но так как WebView, по сути, браузер, встроенный в приложение, то у обоих решений есть ряд различий:

  • Скорость загрузки интерфейса. В WebView экран рендерится после полной загрузки страницы — это может замедлить отклик приложения. В BDUI интерфейс отрисовывается нативно и подгружается по мере получения данных — это даёт более быструю и плавную загрузку.

  • Интеграция с системными функциями. WebView плохо работает с Bluetooth или камерой устройства: часто возникают ошибки, которые сложно отследить и исправить. У BDUI есть доступ к датчикам, микрофону, геолокации и другим нативным функциям ОС. 

  • Работа с архитектурой. WebView сильно зависит от браузерного движка. Чтобы синхронизировать веб-контент и нативный код, приходится использовать специальные мосты — это усложняет архитектуру, увеличивает риски багов и затрудняет отладку. BDUI взаимодействует с ОС напрямую и отрисовывает экран через её нативные UI-компоненты.   

Поэтому с BDUI работать проще и удобнее — он ускоряет рендеринг экрана, снижает количество ошибок и лучше интегрируется с ОС устройства.

Особенности тестирования BDUI-решений

Любую задачу в BDUI нужно проверять и на iOS, и на Android. Поскольку это разные системы, даже при одинаковом сценарии результаты могут отличаться. Здесь нужно обращать внимание на следующее: 

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

  • Отображение визуальных эффектов. В BDUI анимации используют редко, так как их нужно отрисовывать через сервер. В отдельных случаях можно создать нативную анимацию поверх BDUI-экрана или встроить её в отдельный BDUI-компонент. Но даже тогда результат на iOS и Android может различаться: эффекты могут накладываться друг на друга, срабатывать с задержкой или вовсе не воспроизводиться.

  • Особенности навигации. Например, на Android есть системные кнопки «назад» и «свернуть», а в iOS чаще используют жесты, вроде свайпа вправо для возврата. Поэтому экран, который на iOS успешно закрывается свайпом, при нажатии кнопки «назад» в Android может наслаиваться на предыдущую страницу.

В BDUI можно применять E2E-, Unit-, UI- и другие виды тестирования. При этом тесты пишутся один раз и работают сразу на двух платформах. Это упрощает поддержку, ускоряет разработку и сохраняет единую логику экрана для всех устройств.

Заключение

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

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

Комментарии (8)


  1. Irit_LS
    02.07.2025 13:58

    Я так понял, это очередная реинкарнация SSR?

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


    1. dab1818
      02.07.2025 13:58

      скорее похоже на переизобретение HTML.
      ...или XUL
      ...или XForms
      только JSON...


    1. alex-khv
      02.07.2025 13:58

      Судя по наличию мобильных ОС.

      Это скорее замена react native.


  1. george3
    02.07.2025 13:58

    Пример такого BDUI с упором на работу со сложными данными и многими пользователями https://github.com/unisi-tech/unisi . По особенностям: Отрисовка уникальных компонентов. - Для каждого типа данных имеется один или более компонент для отрисовки и взамодействия. Отображение визуальных эффектов. Визуальные эффекты минималистичны и прошиты. Особенности навигации - ориентирован на большие экраны (планшег, ноут).


  1. alexhott
    02.07.2025 13:58

    Новая аббревиатура не означает новую технологию.

    В 2010 (15 лет назад) делал личный кабинет где 90% содержимого страницы определялось бэкендом и на фронте обрисовывалось. Потом во многих проектах подобное видел на разных стеках с разными названиями.


  1. Avatap
    02.07.2025 13:58

    Статья фигня хотя бы по тому что не описано что это за зверь bdui и нах он нужен, а это критически важная инфа мы говорим об удобстве пользователей я пользователь этой статьи, а мне приходится сразу гуглить!! Даже читать не буду эту статью и пойду читать другую!! Феее...


  1. cokrychitel
    02.07.2025 13:58

    Замеряли ли количество экранов и скорость их появления? Как будете решать фактор автобуса при постоянном росте количества экранов?


  1. turlir
    02.07.2025 13:58

    Статья поверхностная. Зачатки BDUI были давно, только слово такого не было. Пример из головы: форма отправки платежа в банке. Тот случай когда нерационально разрабатывать отдельную нативную форму на все виды платежей, проще создать конструктор.