Улучшение совокупного изменения макета в Telegraph Media Group

За пару месяцев ведущему новостному сайту Великобритании удалось улучшить свой 75-й процентиль CLS на 250% с 0,25 до 0,1.

Проблема визуальной стабильности

Сдвиги макета могут быть очень разрушительными. В Telegraph Media Group (TMG) визуальная стабильность особенно важна, поскольку читатели преимущественно используют наши приложения для просмотра новостей. Если макет сместится во время чтения статьи, читатель, скорее всего, потеряет свое место. Это может быть разочаровывающим и отвлекающим опытом.

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

В TMG есть несколько команд, которые пишут код на стороне клиента:

  • Основная инженерия. Внедрение сторонних решений для таких областей, как рекомендации по контенту и комментирование.
  • Маркетинг. Запуск A/B-тестов, чтобы оценить, как наши читатели взаимодействуют с новыми функциями или изменениями.
  • Реклама. Управление запросами на рекламу и предварительные ставки на рекламу.
  • Редакция. Встраивание кода в статьи, такие как твиты или видео, а также в пользовательские виджеты (например, средство отслеживания случаев коронавируса).

Обеспечение того, чтобы каждая из этих команд не вызывала тряску макета страницы, может оказаться сложной задачей. Используя показатель «Совокупное изменение макета» для измерения того, как часто это происходит с нашими читателями, команды получили более глубокое представление о реальном пользовательском опыте и четкую цель, к которой нужно стремиться. В результате наш 75-й процентиль CLS улучшился с 0,25 до 0,1, а показатель проходного сегмента увеличился с 57% до 72%.

250 %

Улучшение CLS на 75-й процентиль

15 %

Больше пользователей с хорошим рейтингом CLS

С чего мы начали

Используя информационные панели CrUX , мы смогли установить, что наши страницы смещались больше, чем нам хотелось бы.

Панель управления CruX показывает около 55-60% хороших оценок, 15% требует улучшения и 25% плохих оценок.
Наши совокупные оценки за смену макета с июня 2020 г. по февраль 2021 г.

В идеале мы хотели, чтобы как минимум 75% наших читателей получили «хороший» опыт, поэтому мы начали выявлять причины нестабильности макета.

Как мы измеряли изменения макета

Мы использовали комбинацию Chrome DevTools и WebPageTest , чтобы определить причину смещения макета. В DevTools мы использовали раздел «Опыт» на вкладке «Производительность» , чтобы выделить отдельные случаи изменения макета и то, как они повлияли на общую оценку.

Первая страница Telegraph с рекламой в заголовке, выделенной синей накладкой.
Выявление изменения макета, вызванного загрузкой рекламы на стороне клиента над заголовком, с помощью раздела «Опыт» Chrome DevTools.

WebPageTest показывает, где происходит сдвиг макета на временной шкале, когда выбран параметр «Выделить сдвиги макета».

Диафильм WebPageTest веб-сайта Telegraph со сдвигом макета, выделенным красным наложением.
WebPageTest указывает места смещения макета.

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

Уменьшение сдвигов макета

Мы сосредоточились на четырех областях, где мы могли бы уменьшить количество изменений в макете: реклама, изображения, заголовки, встраивание.

Объявления

Рекламные объявления загружаются после первоначальной отрисовки с помощью JavaScript. Некоторые из контейнеров, в которые они загружались, не имели зарезервированной высоты.

Анимация сайта Телеграфа. Список историй сдвигается вниз, когда над ним загружается реклама.
Блок «Еще истории» под рекламой смещается вниз после загрузки рекламы.

Хотя мы не знаем точную высоту, мы можем зарезервировать место, используя наиболее распространенный размер рекламы, загруженной в слот.

Анимация сайта Телеграфа. Прямоугольник-заполнитель для объявления размещается над списком статей. Объявление загружается вместо заполнителя, не вызывая смещения макета.
Зарезервировав место для рекламы, блок «Еще истории» ниже остается статическим до и после загрузки рекламы.

В некоторых случаях мы неправильно оценили среднюю высоту рекламы. У планшетных ридеров слот разваливался.

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

Мы вернулись к слоту и отрегулировали высоту, чтобы использовать наиболее распространенный размер.

Анимация просмотра сайта Телеграфа на планшете. Поскольку заполнитель соответствует размеру объявления, при загрузке объявления сдвиг макета не происходит.
Убедитесь, что пространство, которое мы зарезервировали для рекламного места, соответствовало наиболее часто обслуживаемой высоте рекламы.

Изображений

Многие изображения на сайте загружаются отложенно, и для них зарезервировано место.

Анимация загрузки карточек предварительного просмотра статьи.
Ленивая загрузка изображений без нарушения макета.

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

Анимация загрузки страницы статьи. Когда основное изображение загружается вверху страницы, текст перемещается вниз.
Смещение макета, вызванное основным изображением статьи.

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

Анимация загрузки страницы статьи с заполнителем, зарезервированным для основного изображения. Когда основное изображение загружается вверху страницы, сдвиг макета не происходит.
Загрузка изображения основной статьи без смещения макета.

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

ALT_TEXT_ЗДЕСЬ
Заголовок страницы загружается неэлегантно.

Перемещение заголовка в верхнюю часть разметки позволило странице отображаться без этого смещения.

ALT_TEXT_ЗДЕСЬ
Макет больше не нарушается заголовком загрузки страницы.

Встраивает

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

Слот видеоплеера загружает миниатюру с низким разрешением во время загрузки видеоплеера.
Слот видеоплеера загружает миниатюру с низким разрешением во время загрузки видеоплеера.

Измерение воздействия

Мы смогли довольно легко измерить влияние на уровне функций, используя инструменты, упомянутые в начале статьи. Однако мы хотели измерить CLS как на уровне шаблона, так и на уровне сайта. Синтетически мы использовали SpeedCurve для проверки изменений как на стадии подготовки, так и на этапе производства.

Диаграмма SpeedCurve показывает резкое падение показателя CLS.
Синтетическое отслеживание прогресса CLS с помощью SpeedCurve.

Затем мы сможем проверить результаты в наших данных RUM (предоставленных mPulse ), как только код достигнет рабочей среды.

Диаграмма mPulse, показывающая снижение показателя CLS.
Проверка улучшений CLS на уровне всего сайта с помощью данных mPulse RUM до и после внесения изменений.

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

Последние цифры, которые мы рассмотрели, относятся к данным RUM, которые собирает Google. Это особенно актуально сейчас, поскольку вскоре они окажут влияние на рейтинг страниц . Для начала мы использовали отчет Chrome UX Report как в ежемесячных данных уровня происхождения, доступных через панель управления CrUX , так и путем запроса BigQuery для получения исторических данных p75. Таким образом, мы легко смогли увидеть, что для всего трафика, измеренного CrUX, наш 75-й процентиль CLS улучшился на 250 % с 0,25 до 0,1, а наш проходной сегмент вырос с 57 % до 72 % .

Панель мониторинга CruUX, показывающая CLS p75 для telegraph.co.uk, равна 0,1.
Результаты с информационной панели Crux.
BigQuery показывает, что значения p75 улучшаются от месяца к месяцу с 0,25 до 0,1.
Запуск BigQuery, отображающий значения p75 за 2021 год по настоящее время.

Кроме того, мы смогли использовать API отчетов Chrome UX и создать несколько внутренних панелей мониторинга, разделенных на шаблоны.

Внутренняя информационная панель показывает средний хороший балл 76,2, потребности в улучшении 9,3 и плохой балл 14,6.
Внутренние информационные панели, использующие Chrome UX Report API, отображающие наш средний балл и страницы с наихудшей производительностью, использующие этот шаблон.

Как избежать регрессии CLS

Важным аспектом повышения производительности является предотвращение регрессов. Мы установили некоторые базовые бюджеты производительности для наших ключевых показателей и включили в них CLS.

Панель мониторинга бюджета производительности, на которой показаны синтетические проверки, измеряющие CLS для некоторых наших шаблонов с высоким трафиком. Бюджет в настоящее время установлен на уровне 0,025.

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

Мы также планируем расширить наши бюджеты, чтобы использовать данные RUM, а также синтетические данные, используя mPulse для установки как статических предупреждений , так и потенциального обнаружения аномалий , которые информировали бы нас о любых необычных изменениях.

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

Заключение

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

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