Метрики производительности WEB Vitals

Меня зовут, Денис я работаю в компании Домклик. Как вы уже догадались из названия, в этой статье речь пойдет о таком важном элементе любого веб-сервиса, как производительность. Сразу хочу оговориться, я не буду рассказывать о том, почему это важно, в интернете уже и так очень много исследований и материалов, посвящённых этому вопросу. Я хотел бы затронуть практическую сторону этого вопроса и дать ответы на такие вопросы:  

  • Какие существуют метрики производительности?

  • Как оценить качество вашего приложения?  

  • Как поднять метрики?  

  • Какие инструменты позволяют оценить показатели производительности, и др. 

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

8a41022ae29672ed25e9ac567a6b65f2.png

Ключевые критерии качества

В первую очередь содержимое должно грузиться быстро, причём вне зависимости от качества сети пользователя. Чем дольше пользователь ждёт загрузки, тем больше вероятность того, что он просто покинет наш сайт! Отзывчивость также очень важна: вы нажимаете на кнопку, а ничего не происходит! Нужно, чтобы содержимое не просто отображалось, но и было доступно для взаимодействия. И наконец, мы хотим, чтобы страница была стабильна и вела себя предсказуемо. Тут и приходит на помощь Core web vitals.

a8294f8f44acbeaeb658c25d36674ae2.png

Core web vitals —  это инициатива Google, представляющая из себя набор метрик и интервалов, позволяющих измерить те самые ключевые показатели Performance, о которых мы только что говорили.

6dcdb50ee16c73dc07968b7e2f8109ec.png

Разумеется, существует множество других метрик, позволяющих сделать ваш сайт лучше быстрее и безопаснее. Но Core Web Vitals  в первую очередь покрывает именно эти три ключевых показателя производительности.

18bb0e51f6b76ab54e498dbf79571321.png

Метрика LCP отражает скорость загрузки. Точнее, она показывает точку во время загрузки страницы, когда были загружены основные или самые большие элементы содержимого во view port. Это важное дополнение к метрике FCP (First Contentful Paint), которая фиксирует только самое начало загрузки. Иначе говоря, LCP  позволяет измерить, как быстро пользователь сможет увидеть основное содержимое страницы.

Чтобы гарантировать положительный пользовательский опыт при загрузке страницы, сайт должен стремиться к тому, чтобы показатель LCP отрабатывал в течение первых 2,5 секунд с начала загрузки страницы.

Что влияет на LCP?

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

934eb5867aafbffa2c3ef0edced5b1c1.png

Вы можете увидеть все события загрузки страницы на вкладке Timings в Google Chrome DevTools, в том числе и метрику LCP.

fb53737f08c4ca2babcd7782901d3e08.png

Следующая метрика — FID (First Input Delay). Она отражает интерактивность приложения. FID  измеряет время с момента, когда пользователь начал как-то взаимодействовать со страницей (нажимать на кнопки, заполнять формы и т.д.) до момента, когда браузер на самом деле был готов ответить на это взаимодействие.

67afde5ba8cba48e0d3f27d00f805154.png

Чтобы гарантировать хороший пользовательский опыт интерактивности, сайт должен иметь FCP менее 100 мс.

Что влияет на FID?

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

ede890ab390cc906ceb77adc44c692e7.png

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

65d1e605d752538d60a67614ee03bb6b.png

TBT показывает общее количество времени, когда основной поток заблокирован достаточно долго, чтобы реагировать на взаимодействия пользователя. Иначе говоря, TBT отражает время с FCP до Time to Interact.

e4227a5737d8687ea1e7777e0fe780cf.png

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

3e4d2618a5b8055821dcd5388bf08239.png

Вы можете увидеть метрику TBT в Chrome Dev Tools.

5a3993c75897e2a0b56923b6f41f2af6.png

Наконец, третья метрика CLS (Cumulative Layout Shift) позволяет оценить визуальную стабильность страницы. CLS показывает, какое количество содержимого во viewport двигалось во время загрузки страницы. С её помощью можно убедиться, что взаимодействие пользователя с сайтом плавное и естественное.

Что влияет на CLS?

На рисунке ниже приведены основные факторы, влияющие на этот показатель.

d64bc012455418a3f4bd050713c67a7c.png

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

1299e08aaca25b3b64da488ac5950b06.png

Вы можете с помощью Chrome DevTools отладить элементы интерфейса, которые смещались во время загрузки страницы.

81e71239bce714c2d7a7e4f6ebf1412c.png

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

f05f8981fb315239ed939f45d54f7221.png

Мы обсудили основные метрики хорошего сайта, а как их измерить? Core Web Vitals доступны практически во всех инструментах разработчиков. Но для начала стоит упомянуть, что существует два основных типа исследований, которые мы можем проводить над нашим приложением.

92bd13cafb0e9b5c780704a23988001b.png

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

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

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

f54a5853dd10cd461a2e64232f934aca.png

Обратите внимание, что метрику FID можно измерить только в полевых условиях. Чтобы измерить интерактивность, вам понадобятся реальные пользователи для кликов по странице. Но это не значит, что вы не можете использовать лабораторные инструменты для улучшения этого показателя. Как я уже говорил выше, TBT — это прокси-метрика, которая позволяет локально отладить и улучшить интерактивность вашего сайта.

427706d7d14dcd8353ee6d38af3b2b22.png

Все инструменты, которые мы рассмотрим, можно включить в свой рабочий процесс. Начать можно с Page Speed Insides, так как он позволяет сравнить ваши полевые показатели с лабораторными. Google Search Console позволяет выявить группы страниц, требующих оптимизации. Затем с помощью Lighthouse и Chrome DevTools вы можете начать локально диагностировать и оптимизировать сайт. Далее вы можете предотвратить регрессию показателей производительности с помощью Lighthouse CI. И наконец, CrUX позволит создать кастомные дашборды для мониторинга. Для получения советов и инструкций можно использовать web.dev.

e93575bc105b1d341580ea228810401e.png

Как я уже сказал, Page Speed Inside позволяет получить как полевые данные из CrUX (чтобы убедиться, проходят ли 75% показов сайта пороговые значения метрик; если да, то сайт классифицируется как оптимизированный, и это относится ко всем трём метрикам LCP, CLS, FID), так и лабораторные данные от Lighthouse.

5cbebfe712434e830846268be92fa7c8.png

С недавних пор в Lighthouse появились новые метрики, включая Core Web Vitals, а также новые проверки и отчеты.

af761fc59aa88842d54c01926ce6f173.png

Метрики Lighthouse можно сгруппировать по трём основным критериям качества сайта 

  • FCP, SI, LCP представляют загрузку сайта;

  • TBT отражает интерактивность;

  • CLS отражает визуальную стабильность.

892459458d07d28114fb8cc493264e1d.png

Новые метрики позволяют убедиться в производительности загрузки, интерактивности и стабильности макета. Собственно, эти метрики и их веса и формируют Performance Score!

LightHouse — очень интересный инструмент, в котором существует огромное количество разных отчётов и проверок, но в рамках Core Web Vitals нас в первую очередь интересуют следующие.

По загрузке страницы: отчеты о скорости ответа сервера; блокирующие отрисовку ресурсы; отчеты об оптимизации загрузки ресурсов.

b647bbad285a8416c9eb60e2f5dd85d2.png

По интерактивности: отчеты о загрузке main thread и оптимизации качества загружаемых ресурсов (дублирующиеся модули, неиспользуемый код и др.).

d6df75b5169bbf28416e2d100a3a9555.png

Ну и отчеты, позволяющие предотвратить сдвиги макета!

2a761cc7f60c3ce89dd1cfb57aed13b5.png

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

a6303834a6b6531f8b6a6de1ce67d19e.png

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

b3a4c4fc9cbcc8404fbd080b1318e193.png

Сам Chrome DevTools — тема отдельного разговора. Мы поговорим о нём сегодня именно в разрезе Core Web Vitals. И наибольший интерес у нас вызывает вкладка Performance. Также в этом инструменте можно увидеть задачи, которые ухудшают интерактивность (длятся более 50 мс), они помечаются красным треугольничком в правом верхнем углу. Кликнув на такую задачу, можно получить более подробную информацию о ней (трассировку стека и подзадачи).

6397a53de92dafea82a445a9b4d5c601.png

Еще одна полезная вкладка в DevTools — Coverage. Всякий раз, как Lighthouse пишет «Удалите неиспользуемый код» 

c964e517e2303579eab896f05fd4e9ed.png

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

92e6038ab71fa616b6c830f477ea7fdb.png

web.dev/measure — очень удобный способ получить отчёты наподобие Lighthouse, с той лишь разницей, что Measure отсортирует отчеты по приоритетам и к каждому из них даст ссылку на инструкции с более подробной информацией по каждой проблеме.

130a4d6bbbaf0abbca7e310decb7fea1.png

CrUX позволяет получить огромное количество данных по реальному пользовательскому опыту.

715d56c8234aa986fdbb9fc87fca8f87.png

Также при разработке может помочь Web-vitals Chrome Extension, NPM-пакет web-vitals позволяет легко журналировать эти и другие метрики производительности.

62bbb03f293776fc3dcc80afe2ae028d.png

© Habrahabr.ru