Performance23 октября 2026 г.4 мин

A/B-скрипт показывает старую страницу: проверка мерцания

Проверка мерцания A/B-варианта: первый видимый кадр, медленная сеть, задержка SDK, сбой загрузки и соответствие exposure фактическому показу.

Обложка статьи: A/B-скрипт показывает старую страницу: проверка мерцания

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

Это техническая проверка перед запуском эксперимента лендинга. Она не выбирает гипотезу и не подтверждает эффект на конверсию. Результат проверки — запись того, что действительно отобразилось при загрузке.

Три момента, которые нельзя объединять

Зафиксируйте назначение варианта, его первое видимое отображение и отправку события показа. Они могут происходить в разное время. Назначенный пользователю вариант ещё может не отрисоваться; событие может уйти до изменения DOM. При позднем ответе сервиса экран успевает показать контроль.

Например, JavaScript SDK Amplitude Experiment описывает получение вариантов, чтение локального варианта, автоматический и ручной exposure. При определённых интеграциях вызов variant() отправляет exposure автоматически. Это техническая семантика SDK, а не видеоподтверждение отображения.

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

Как записать первый видимый экран

  1. Откройте Performance в Chrome DevTools, включите Screenshots и запись загрузки страницы. Сохраните URL, назначение и параметры сеанса.
  2. Отключите кэш для проверки холодной загрузки. Выберите сетевое замедление и при необходимости замедление CPU; запишите конкретные параметры.
  3. Запустите перезагрузку с записью. Просмотрите первые содержательные кадры и момент смены текста, цены, кнопки или положения формы.
  4. Сопоставьте кадры с запросом сервиса экспериментов и событием exposure. Проверьте, не ушло ли событие до фактического появления варианта.
  5. Повторите с доступным сервисом, задержанным ответом и заблокированным скриптом. Для каждого сценария сохраните отдельный результат.

Chrome документирует запись загрузки, снимки кадров и ограничения сети/CPU. Эмуляция не повторяет устройство пользователя полностью. Поэтому после лабораторной записи полезно пройти сценарий на целевом телефоне; один чистый прогон не доказывает отсутствие проблемы во всех условиях.

Матрица проверки сбоя

Протокол проверки отображения A/B-варианта
УсловиеЧто смотретьКакое решение требуется
Холодный запускПервый содержательный кадрСовпадает ли видимый текст с назначением
Медленная сетьДлительность показа контроля до заменыУстранять смешанное отображение
Задержка ответа SDKСостояние страницы до назначенияОграниченный срок ожидания
Скрипт недоступенФорма и основной контент доступныРабочий резервный вариант
Переход внутри SPAПовторное применение варианта и показОтсутствие лишней замены и дублей события
Возврат из историиКадр после возвратаСогласованность состояния и аналитики

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

Почему скрыть всё до загрузки недостаточно

Anti-flicker может убрать видимую смену и оставить пустой экран при сбое. Для такого решения нужны ограниченное ожидание, гарантированное снятие скрытия и проверка доступности формы. Чем шире область скрытия, тем больше содержимого зависит от внешнего скрипта.

Другой вариант — назначить и отрисовать нужное состояние до первого клиентского показа. Реализация зависит от стека: сервер, ранняя загрузка конфигурации или другой поддержанный способ. У Amplitude есть bootstrapping начальных вариантов, но он не гарантирует отсутствие мерцания в произвольной интеграции. Проверьте совпадение серверного состояния и клиента после гидратации.

В журнале дефекта оставьте ожидаемый вариант, видимые кадры, задержку, условия сети, фактические события и путь воспроизведения. До устранения смешанного показа интерпретацию текущих данных нужно ограничить: красивое распределение A/B не восстанавливает потерянную чистоту воздействия.

Начните с холодной загрузки Б на замедленной сети и одного намеренного сбоя. Если страница зависает пустой или успевает показать оба предложения, сначала исправьте этот маршрут, затем возвращайтесь к правилам анализа эксперимента.

Ещё по теме