Бюджет производительности

Бюджет производительности - это лимит для предотвращения регрессий. Этот бюджет может быть применен к файлам, типам файлов, всем ресурсам приложения, определенным общим показателям (например, Время до интерактивности) пользовательским показателям (например, Время до главного элемента) или к пороговым значениям к определенным точкам во времени.

Зачем нужен бюджет?

Бюджет существует для отражения желаемых вами целей. С бюджетом вы сможете осознанно выстраивать компромиссы между пользовательским опытом и объективным индикаторами эффективности приложения (например, конверсией)

Эти цели можно разбить на категории:

Главная цель такого подхода - сокращение регрессии. Но этот подход может помочь предсказать поведение приложения в будущем. Например, в Сентябре 50% месячного бюджета было использовано за неделю - значит, нужно ждать увеличения потребления контента, нагрузки на сервера и т.д.

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

Как определить бюджет?

Бюджет должен включать 2 уровня:

  • Предупреждение
  • Ошибка

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

Уровень ошибки - это граница, по достижении которой приложение воспринимается негативно.

Для начала, вам нужно выяснить, какими технологиями пользуются ваши пользователи. Например, большая часть пользователей приходят с Anroid-телефонов бюджетного уровня и подсоединяются через 3G). Для подобного исследования существует множество инструментов. Эти метрики должны стать базой для бюджета размера файлов.

Базовая цель - достигнуть показателя "Время до интерактивности" до 5 секунд при 3G/4G, и до 2 секунд для последующих загрузок. Однако, вы можете придумать свои цели, основанные на контенте приложения, географии пользователей и технологиях.

Например, для приложения с большим количеством текста (блоги, новостные сайты), показатель Первая отрисовка контента (First Contentful Paint) будет гораздо лучше показывать, с чем сталкивается пользователь. Иными словами, этот показатель покажет, как быстро пользователь начинает читать. И этот показатель должен быть включен в специфичные бюджеты, например, бюджет шрифтов, где вы можете применять разные техники для оптимизации. Например, font-display, чтобы улучшить Субъективно Ощущаемую производительность).

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

Как создать бюджет?

Во время разработки вы можете использовать несколько инстурментов, чтобы проверять некоторые показатели:

  • Сборщики (наприме, webpack), из коробки содержат инструменты оценки производительности, которые сообщат вам, если какой-то из файлов превысил допустимые размеры.
  • Bundlesize, позволяет вам определить и проверять размеры файлов каждый раз при интеграции вашего кода с помощью CI.

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

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

С этим может помочь, например, Lighthouse Bot, который можно встроить в Travis CI и использовать для получения аналитики Lighthouse и Webpage Test. Этот бот будет сообщать об ошибке или успешном прохождении тестов на основе определённых минимальных оценок.

Как я могу усилить влияние бюджета?

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

Кроме того, лучше иметь несколько бюджетов и быть проактивным. Бюджеты должны отражать ваши текущие цели, но не должны мешать экспериментам. Например, вы можете привнести функционал, который увеличит общее время загрузки приложения, но попытается увеличить пользовательскую вовлечённость (например, как долго пользователь остается на странице).

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

См. также