Мы используем куки и метрики,чтобы сайт лучше работал
Обсудить проект
Написать или позвонить
Адрес офиса и график
Екатеринбург,
ул. 8 Марта, 12А
Пн-пт
с 10:00 до 19:00
Опубликовано: 15 июня 2026
Frontend — это часть сайта или цифрового сервиса, которую получает и выполняет браузер пользователя. Она превращает документы, стили, данные и программный код в интерфейс: страницу каталога, форму заявки, личный кабинет, карту, конфигуратор или панель управления.
Определение «то, что видит пользователь» слишком узкое. Человек видит не только готовую картинку. Он ждёт загрузку, открывает меню, вводит данные, получает подсказки и ошибки, возвращается назад, меняет размер окна, пользуется клавиатурой или экранным считывателем. Все эти состояния относятся к frontend.
При этом браузерная часть не должна самостоятельно решать, имеет ли человек право скачать договор, какая цена действует для дилера или можно ли списать товар. Такие решения принимает backend — серверная часть продукта.
Frontend — не нарисованный экран, а выполняемый пользовательский сценарий со всеми его состояниями.
Три базовых слоя веб-интерфейса — HTML, CSS и JavaScript. В реальном проекте вокруг них появляются компоненты, сборка, библиотеки и система дизайна, но ответственность слоёв от этого не меняется.
HTML задаёт структуру и смысл документа. Заголовок, ссылка, кнопка, поле, таблица и изображение имеют разное назначение, даже если дизайнер сделал их внешне похожими. Семантика нужна не «для галочки»: она помогает браузеру, поисковым системам и вспомогательным технологиям понять, что находится на странице и как с этим взаимодействовать.
CSS отвечает за представление: сетку, размеры, шрифты, цвета, отступы, адаптацию, состояния фокуса и визуальные переходы. Через CSS один документ может перестраиваться под телефон, большой монитор или печать. Но CSS не знает, действительно ли заказ оплачен и разрешено ли пользователю видеть чужие данные.
JavaScript добавляет программируемое поведение. Он может открыть фильтр, подгрузить варианты, проверить формат телефона до отправки, пересчитать выбранные параметры и показать новый экран без полной перезагрузки. Он также способен создать задержку, заблокировать основной поток браузера или сломать сценарий, если загрузился не полностью.
Сайт может работать без большого JavaScript-приложения. Для статьи, контактов или простой формы сервер способен сразу вернуть готовый HTML. Для кабинета, карты или сложного подбора браузерного поведения обычно больше. Технология выбирается по сценарию, а не по желанию назвать проект «современным».
Код платёжной страницы исполняется в браузере, поэтому перечень загружаемых скриптов и их владельцев нужно проверять отдельно: браузер не отличает доверенный бизнес-код от лишней зависимости.
Когда пользователь открывает URL, браузер запрашивает ресурс у сервера. Сервер возвращает HTTP-ответ: статус, заголовки и содержимое. Часто первым приходит HTML со ссылками на стили, изображения, шрифты и сценарии. Затем браузер начинает обрабатывать эти ресурсы.
Упрощённо путь выглядит так:
Этот процесс не всегда идёт строго по очереди. Ресурсы загружаются параллельно, часть содержимого появляется раньше, сценарии могут ждать данных, изображения — догружаться позже. Пользователь оценивает сайт уже во время этого процесса.
Поэтому фраза «страница загрузилась за две секунды» неоднозначна. Через две секунды мог появиться заголовок, но кнопка ещё не реагирует. Или интерфейс уже доступен, однако изображение без зарезервированного места сдвигает форму в момент нажатия. Скорость сайта нужно рассматривать как несколько наблюдений: когда появилось главное содержимое, как быстро интерфейс отвечает и насколько стабильно остаётся расположение элементов.
Быстро показать первый экран и быстро ответить на действие — две разные frontend-задачи.
Сервер может отдать готовую разметку страницы, а JavaScript затем «оживляет» её: подключает обработчики, восстанавливает состояние и делает компоненты интерактивными. Этот этап часто называют hydration. Пользователь уже видит карточку или форму, но до завершения обработки кнопка может не реагировать так, как ожидается. Поэтому в приёмке отдельно проверяют видимое содержимое и готовность ключевого действия.
В другом подходе браузер сначала получает минимальную оболочку, затем запрашивает данные и строит основной экран на клиенте. Это допустимо для некоторых сценариев, но добавляет риск пустого или неработающего первого состояния при сбое JavaScript, сети или API. Progressive enhancement снижает этот риск: базовое чтение и критичное действие остаются доступны из обычного HTML, а JavaScript улучшает сценарий, а не делает его единственной точкой входа. Подход выбирают по задаче, а не по названию фреймворка.
Frontend собирает ввод пользователя и показывает результат. Backend проверяет данные, права и бизнес-правила, обращается к хранилищам и внешним системам. Между ними обычно работает API — контракт обмена данными. В headless CMS эта граница особенно заметна: хранение и редактура контента отделены от интерфейса, который его показывает.
Рассмотрим заказ товара. В браузере человек меняет количество, вводит адрес и нажимает «Оплатить». Frontend может сразу подсветить пустое обязательное поле и посчитать предварительную сумму. Затем он отправляет данные серверу.
Backend заново проверяет:
Сервер создаёт или обновляет заказ, обращается к платёжной системе и возвращает статус. Frontend переводит интерфейс в состояние успеха, ожидания или ошибки.
Проверка в браузере нужна для удобства, но не является границей безопасности. Код и запросы на устройстве пользователя можно исследовать и изменить. Скрытая кнопка предотвращает случайное действие честного человека, но не заменяет серверную авторизацию.
Если правило влияет на деньги, данные или полномочия, сервер обязан проверить его независимо от интерфейса.
Макет часто показывает идеальное состояние: данные есть, сервер отвечает, текст помещается, пользователь действует правильно. Работающий frontend должен обработать гораздо больше вариантов.
Для списка товаров нужны как минимум:
Для формы добавляются ошибки отдельных полей, серверный отказ, защита от повторной отправки, истёкшая сессия и подтверждение успешного результата. Для личного кабинета — ограничения роли и ситуации, когда документ ещё формируется или внешняя система временно недоступна.
Если эти состояния не спроектированы, разработчик всё равно что-то покажет. Обычно появляется бесконечный индикатор, техническое сообщение или пустой белый блок. Это не «редкий крайний случай», а часть пользовательского пути.
Состояние должно объяснять, что произошло и что делать дальше. «Ошибка 500» не помогает покупателю. «Не удалось проверить остаток. Повторите запрос или отправьте спецификацию менеджеру» уже поддерживает сценарий. При этом интерфейс не должен обещать успех до подтверждения сервера: зелёное сообщение при потерянной заявке опаснее честной ошибки.
У сайта нет одного фиксированного экрана. Ширина окна, плотность пикселей, размер текста, способ ввода, ориентация и производительность устройства различаются. Адаптивный frontend перестраивает приоритеты, а не только сжимает блоки.
На телефоне таблица характеристик может потребовать горизонтальной прокрутки или другой формы представления. Меню перестраивается, фиксированные элементы не должны перекрывать контент, кнопке нужен размер для касания, а поле — подходящий тип клавиатуры. На большом мониторе чрезмерно длинная строка ухудшает чтение, хотя свободного места много.
Проверять нужно содержимое, которое действительно появится в системе. Короткое слово «Товар» не выявит проблему заголовка «Комплект для подключения промышленного теплообменника». Цена без скидки не покажет две строки условий. Тест на фиктивных данных подтверждает только фиктивный сценарий.
Матрица устройств не обязана включать десятки моделей. Полезнее выбрать несколько классов:
| Класс | Что проверяем |
|---|---|
| Небольшой телефон | узкая ширина, экранная клавиатура, касание |
| Современный телефон | основной мобильный маршрут и реальная сеть |
| Ноутбук | типичный рабочий viewport, клавиатура и тачпад |
| Большой экран | ограничение длины строк и поведение сетки |
| Клавиатура без мыши | порядок фокуса, видимый фокус, управление |
| Слабое устройство или ограниченная сеть | задержки, тяжёлые скрипты, повтор |
Доступность — способность разных людей воспринимать интерфейс и управлять им. Она включает контраст, подписи полей, порядок заголовков, альтернативы изображениям, работу с клавиатуры, видимый фокус, понятные ошибки и корректные имена элементов для вспомогательных технологий.
Многие требования начинаются с правильного HTML. Настоящая кнопка уже умеет получать фокус и активироваться клавиатурой. Декоративный div, которому добавили обработчик клика, придётся вручную учить этому поведению. Внешне элементы могут совпадать, но опыт пользователя будет разным.
WCAG 2.2 даёт проверяемые критерии, однако сама ссылка на стандарт в ТЗ не завершает работу. Нужно определить применимый уровень, проверить критические сценарии и исправить конкретные препятствия. Автоматический сканер найдёт часть ошибок, но не поймёт, логично ли названо действие и можно ли пройти сложную форму.
Доступность помогает не только людям с постоянными ограничениями. Видимый фокус полезен сотруднику, который быстро работает с клавиатуры. Хорошая подпись поля помогает человеку в шумной обстановке. Устойчивый интерфейс нужен пользователю с медленным соединением.
Вес интерфейса складывается не только из собственного кода. На странице работают аналитика, чат, карты, виджеты, A/B-тесты, реклама и видео. Каждый сторонний скрипт может добавить сетевые запросы, вычисления и зависимость от чужого сервиса.
Типичные причины:
Сборка помогает разделять и оптимизировать код, но не гарантирует лёгкость. Минификация уменьшит файл, но не отменит ненужную библиотеку. Lazy loading отложит ресурс, но может сделать критическую функцию недоступной в момент действия. Решение принимают по измерению конкретного пользовательского пути.
Кэширование тоже проходит через границу слоёв. Браузер может сохранить CSS, JavaScript и изображения, CDN — копию ресурса, backend — результат запроса. Ошибочная стратегия приводит либо к лишней загрузке, либо к показу устаревших данных. Влияние этого механизма на наблюдаемую скорость загрузки нужно проверять отдельно для первого и повторного визита.
Браузер отправляет запрос и получает структурированный ответ. Хороший интерфейс не предполагает, что ответ всегда быстрый и успешный.
Если поиск запускается на каждую введённую букву, frontend может отложить запрос на короткий интервал и отменить устаревший. Если два ответа пришли в обратном порядке, он не должен показать старый результат поверх нового. Если сервер ограничил частоту запросов, интерфейс обязан корректно сообщить об этом, а не бесконечно повторять обращение.
Не все данные безопасно хранить в браузере. Секретный ключ внешнего сервиса, административный токен и правило выдачи скидки нельзя защищать тем, что «пользователь не откроет DevTools». Публичный frontend по определению доступен клиенту.
Защищённый HTTPS-канал не меняет эту границу. Он усложняет перехват трафика между браузером и сервером, но пользователь всё равно контролирует свой браузер и собственные запросы.
Запрос frontend к API другого происхождения может потребовать правильно настроенного серверного разрешения для браузера (CORS); его нужно проверить в целевом браузере и сети. Это не замена аутентификации и авторизации на сервере.
Для каждого важного сценария заполните строку:
| Поле | Пример |
|---|---|
| Сценарий | Отправить запрос цены из карточки |
| Состояние | Сервер временно недоступен |
| Устройство и ввод | Телефон, касание |
| Данные | Длинное название, файл 8 МБ |
| Действие | Нажать «Отправить» один раз |
| Ожидаемый результат | Понятная ошибка, данные не исчезли, доступен повтор |
| Серверное подтверждение | Новая заявка не создана |
| Доказательство | Видео, сетевой лог и запись теста |
Минимальный набор проверок:
Матрица не заменяет профессиональное тестирование. Она делает ожидания заказчика проверяемыми и не позволяет принять только красивое состояние.
Frontend отвечает за то, как человек воспринимает состояние цифрового продукта и управляет им в браузере. В его зоне находятся семантическая разметка, представление, поведение, адаптивность, доступность, браузерная производительность и обработка ответов.
Backend хранит состояние и применяет доверенные правила. API определяет договор обмена. HTTPS защищает канал. Смешение этих слоёв ведёт к неверной оценке и опасным требованиям вроде «спрятать кнопку, чтобы запретить действие».
Если интерфейс принят только по нескольким макетам, Xleb может разобрать один критичный путь по состояниям, устройствам и границам с сервером. Результатом будет матрица приёмки и список конкретных доработок, а не абстрактное пожелание «улучшить frontend».

Елизавета Смерчинская
Менеджер проектов
ОФИС
Екатеринбург
ул. 8 Марта, 12А
РАБОТАЕМ
Пн-пт с 10:00 до 19:00