измеритьWeb
Всегда было много инструментов и метрик для опыта и качества страницы... Очень больно каждый раз обращать внимание на эти метрики, потому что этих метрик действительно много и их сложно понять, а инструментов так много для измерения этих показателей.
При просмотре недавно опубликованногоChrome 83
Когда я добавил еще несколько индикаторов производительности посередине, у меня голова закружилась...
Но не волнуйтесь, эти индикаторы предназначены для того, чтобы привлечь внимание и снизить стоимость понимания. Давайте взглянем на недавно добавленныеCore Web Vitals
Что это такое?
Как измерить качество пользовательского опыта?
Оптимизация качества взаимодействия с пользователем всегда была приоритетом для каждого.Web
Критически важно для долгосрочного успеха сайта, есть много аспектов для измерения качества пользовательского опыта. Хотя некоторые аспекты пользовательского опыта должны быть конкретными на сайте и контекстным, на всех сайтах все еще есть общий набор метрикCore Web Vitals
, эти показатели включают скорость загрузки, интерактивность и визуальную стабильность содержимого страницы, которые составляют2020
ядро годаWeb
Основа показателей здоровья.
За прошедшие годы Google предоставил множество инструментов :(Lighthouse, Chrome DevTools, PageSpeed Insights, Search Console's Speed Report
) для измерения и отчета о производительности. Некоторые разработчики являются экспертами в использовании этих инструментов, в то время как большинство других считают множество инструментов и показателей сложными для изучения и использования.
Веб-разработчики не должны становиться экспертами по производительности, чтобы понимать показатели качества опыта, который они предоставляют своим пользователям.Web Vitals
Целью плана является упрощение сценариев, сокращение расходов на обучение и помогать сайтам сосредоточиться на наиболее важных метриках, а именноCore Web Vitals
.
Core Web Vitals
Core Web Vitals
применяется ко всемWeb
страницыWeb Vitals
Подмножество , на которое следует обратить внимание всем разработчикам сайтов, они будут отображаться во всех предоставляемых Google инструментах тестирования производительности. каждыйCore Web Vitals
Представляет другой аспект пользовательского опыта, который можно измерить в полевых условиях и который отражает реальный опыт ключевых результатов, ориентированных на пользователя.
Показатели производительности, лежащие в основе веб-страницы, должны меняться со временем. ток2020
Годы сосредоточены на трех аспектах пользовательского опыта — загрузке, интерактивности и визуальной стабильности:
-
Largest Contentful Paint (LCP)
: Измерение опыта загрузки: чтобы обеспечить хорошее взаимодействие с пользователем,LCP
должен начинаться после первой загрузки страницы2.5
происходит за секунды. -
First Input Delay (FID)
: измерить интерактивность, чтобы обеспечить хорошее взаимодействие с пользователем,FID
Должно быть меньше 100 мс. -
Cumulative Layout Shift (CLS)
: для измерения визуальной стабильности, чтобы обеспечить хорошее взаимодействие с пользователем, CLS страницы должен быть меньше 0,1.
Ниже мы подробно опишем эти три показателя эффективности:
LCP
Измерение опыта загрузки
мераWeb
Скорость загрузки основного контента страницы — это момент, на который обращают внимание многие разработчики, и есть много измеримых показателей.
например самый раннийload
,DOMContentLoaded
События, эти два события очень плохо подходят для измерения скорости загрузки страницы, потому что они не обязательно соответствуют тому, что пользователь видит на экране.
Метрики производительности обновлений, ориентированные на пользователя (например,First Contentful Paint(FCP)
) Это может только захватить самое начало опыта погрузки. Если страница изначально отображаетloading
Анимация, то на этот показатель трудно обратить внимание.
Позже промышленность стала рекомендовать использование такихFirst Meaningful Paint (FMP)
а такжеSpeed Index (SI)
(оба доступны наLighthouse
метрики производительности, такие как полученные при первом рендеринге), чтобы помочь зафиксировать больше опыта загрузки после начального рендеринга, но эти метрики очень сложны, их трудно интерпретировать и они имеют высокий уровень ложных срабатываний.
Что такое ЛКП
Largest Contentful Paint (LCP)
Используется для метрик, сообщающих о времени рендеринга самого большого элемента контента, видимого в области просмотра. Чтобы обеспечить хорошее взаимодействие с пользователем, веб-сайты должны стремиться начать загрузку страниц до2.5
в секундах最大内容渲染
.
в сравнении сFCP
, этот показатель очень ценен, потому что это значение постоянно меняется в зависимости от загрузки страницы, если на странице естьlodaing
анимацию, а затем визуализировать определенный контент, то этот индикатор рассчитывает скорость загрузки конкретного контента, а неlodaing
Скорость загрузки анимации.
Какие элементы рассматривает LCP
LCP
В настоящее время рассчитываются не все элементы, поскольку это сделало бы метрику очень сложной. Теперь она фокусируется только на следующих элементах:
-
<img>
элемент -
<image>
внутри элемента<svg>
элемент -
<video>
элемент - пройти через
url()
Функция загружает элемент фонового изображения - Элементы уровня блока, содержащие текстовые узлы или дочерние элементы других встроенных текстовых элементов.
Чтобы не усложнять в начале, мы преднамеренно ограничиваем элементы этим ограниченным набором. Дополнительные элементы могут быть добавлены в будущем по мере продвижения исследований.
Как рассчитать ЛКП?
Самым большим элементом на странице является элемент с наибольшей областью рисования.Так называемая область рисования может пониматься как «отпечаток» каждого элемента на экране.Если элемент выходит за пределы экрана или элемент вырезается , вырезанные части не учитываются, учитывается только то, что фактически отображается на экране.
Площадь элементов изображения рассчитывается немного иначе, потому что это можно сделать с помощьюCSS
Расширить или уменьшить отображение картинки, то есть картинка имеет две области: «рендеринговую область» и «реальную площадь». существуетLCP
При расчете площадь прорисовки картинки получит меньшее значение. Например: когда «отображаемая область» меньше, чем «реальная площадь», «отображаемая область» является «отображаемой областью» и наоборот.
В процессе загрузки страницы он линейный, и элементы отображаются на экране один за другим, а не отображаются на экране мгновенно, поэтому элемент с наибольшей «областью рендеринга» меняется в любое время.
Если элемент удален, алгоритм LCP больше не будет учитывать этот элемент, и если удаленный элемент окажется элементом с наибольшей «областью рисования», новая запись производительности будет создана с новым элементом с наибольшей «областью рисования». ".
Этот процесс продолжается до тех пор, пока пользователь не прокрутит страницу в первый раз или до первого пользовательского ввода (щелчок мышью, клавиша клавиатуры и т. д.), то есть, как только пользователь начнет взаимодействовать со страницей, перестанут сообщать о новых показателях производительности.
На двух приведенных выше временных шкалах самый большой элемент изменяется по мере загрузки контента. В первом примере новый контент добавляется вDOM
, и изменяется самый большой элемент. Во втором примере макет изменяется, а ранее самое большое содержимое удаляется из области просмотра. Как правило, лениво загружаемый контент больше, чем то, что уже есть на странице.
Улучшить ЛКП
Наиболее распространенными причинами плохого LCP являются:
- Медленное время отклика сервера
- блокировка рендеринга
Javascript
а такжеCSS
- Медленная загрузка ресурсов
- рендеринг на стороне клиента
Поэтому мы рассматриваем улучшение с вышеуказанной точки зренияLCP
:
Оптимизировать сервер
Это хорошо понятно, чем дольше браузер получает контент с сервера, тем дольше он отрисовывает любой контент на экране. Более быстрое время отклика сервера можно напрямую улучшить, включивLCP
Включены все показатели загрузки страницы.
Для измерения времени отклика сервера есть специальный показатель: время отклика первого байта (TTFB
) — это время между начальным сетевым запросом и получением первого байта от сервера, он содержитTCP
время подключения, отправитьHTTP
Время запроса и время получения первого байта ответного сообщения. Вы можете попробовать несколько удобных оптимизаций нижеTTFB
:
- тайник
HTML
Автономные страницы, кеширование ресурсов страницы, сокращение запросов браузера на ресурсы. - Минимизируйте рендеринг, блокирующий ресурсы:
CSS
а такжеJavaScript
Сжатие, слияние, конкатенация, встраивание и многое другое - Оптимизируйте изображения.转化图片的格式为
JPG
илиWEBP
д., уменьшите размер изображения, чтобы ускорить запрос. - правильно
HTML
Переписать, сжать пробелы, удалить комментарии и т. д. уменьшатьHTML
размер, скорость. - использовать
preconnect
Установите соединение с сервером как можно быстрее, используйтеdns-prefetch
как можно скорееDNS
Находить. - использовать
CDN
ускорить запросы
Оптимизируйте ресурсы, которые блокируют рендеринг
JavaScript
а такжеCSS
Это все ресурсы, которые будут блокировать рендеринг страницы, и вам нужно максимально их исправить.CSS
а такжеJavaScript
Сжимайте файлы, откладывайте загрузку выше сгиба и не нужно использоватьJavaScript
, встроенный критическийCSS
д., чтобы сократить время блокировки.
Оптимизировать время загрузки ресурсов
Для упомянутых выше ресурсов, если они отображаются на первом экране, время, необходимое для загрузки этих элементов, будет напрямую влиять наLCP
.
-
<img>
элемент -
<image>
внутри элемента<svg>
элемент -
<video>
элемент - пройти через
url()
Функция загружает элемент фонового изображения - Элементы уровня блока, содержащие текстовые узлы или дочерние элементы других встроенных текстовых элементов.
Для оптимизации можно использовать следующие средства:
- Оптимизируйте изображения. Формат преобразованного изображения
JPG
илиWEBP
и так далее, уменьшить размер изображения. - Предварительно загрузите важные ресурсы, такие как
style
добавить тегиrel="preload"
Атрибуты - использовать
Gzip
а такжеBrotli
Сжимайте ресурсы страницы, чтобы сократить время передачи - использовать
service worker
ресурсы кэша
рендеринг на стороне сервера
Использование рендеринга на стороне сервера гарантирует, что содержимое страницы сначала будет отображаться на сервере, что может эффективно улучшитьLCP
, но недостатком по сравнению с рендерингом на стороне клиента является то, что он увеличит размер страницы и повлияет наTTFB
, рендеринг на стороне сервера должен дождаться выполнения всех js, прежде чем реагировать на ввод пользователя, что ухудшит интерактивный опыт.
FID
первое впечатление
Все мы знаем, как важно произвести хорошее первое впечатление. В Интернете хорошее первое впечатление может определить, сможет ли человек стать лояльным пользователем веб-сайта или уйти и никогда не вернуться. Вопрос в том, что производит хорошее впечатление и как вы измеряете, какое впечатление вы можете произвести на пользователей?
В Интернете первое впечатление может принимать самые разные формы — у нас есть первое впечатление о дизайне и визуальной привлекательности веб-сайта, а также о его скорости и отзывчивости.
разработчики используютFirst Contentful Paint(FCP)
Может измерить первое впечатление о скорости загрузки сайта. Тем не менее, скорость, с которой веб-сайт может отображать пиксели на экране, является лишь частью уравнения, так же важно, насколько важен ваш веб-сайт, когда пользователи пытаются взаимодействовать с этими пикселями!
Что такое ФИД
FID( First Input Delay)
То есть фиксируется время, которое требуется пользователю для первого взаимодействия со страницей.。FID
Метрики влияют на первое впечатление пользователя об интерактивности и отзывчивости страницы. Чтобы обеспечить хорошее взаимодействие с пользователем, сайты должны стремиться к тому, чтобы первая задержка ввода была меньше100
миллисекунда.
FID
произошло вFCP
а такжеTTI
Между тем, потому что на данном этапе страница хоть и отобразила часть контента, но еще не полностью интерактивна. На этом этапе взаимодействие между пользователем и страницей часто имеет большую задержку.
Как показано на рисунке выше, когда браузер получает операцию ввода пользователя, основной поток занят выполнением задачи, которая занимает много времени, и только когда задача выполнена, браузер может ответить на операцию ввода пользователя. Время ожидания пользователя на этой страницеFID
стоимость.
Например, все следующиеHTML
Все элементы должны дождаться завершения текущих задач в основном потоке, прежде чем реагировать на взаимодействие с пользователем:
- Поле ввода текста, флажок и переключатель (
<input>,<textarea>
) - Выберите раскрывающееся меню (
<select>
) - Связь(
<a>
)
Как улучшить ФИД
Улучшены следующие аспектыFID
Важные показатели:
уменьшатьJavaScript
время исполнения
То же, что и вышеLCP
Методы:
- уменьшить и сжать
JavaScript
документ - Ленивая загрузка выше сгиба не нужна
JavaScript
- Свести к минимуму неиспользуемые
polyfill
Разбивайте трудоемкие задачи
Упомянутая выше задача, требующая больше времени, — это воздействиеFID
Важный индикатор любой блокировки в основном потоке50
Участки кода, которые составляют миллисекунды или больше, можно назвать «длинными задачами», и мы можем разделить длительные трудоемкие задачи на более мелкие асинхронные задачи.
Использование веб-воркеров
Блокирование основного потока — одна из основных причин задержки ввода.Web Workers
Позволяет работать на отдельной фоновой резьбе к основной нити выполненияJavaScript
, преимуществом которого является выполнение трудоемких задач обработки в отдельном потоке, что позволяет основному (обычно пользовательскому) потоку работать без блокировки. не будетUI
Перенос операций в отдельный рабочий поток сокращает время блокировки основного потока, улучшаяFID
.
CLS
визуальная стабильность
Вы когда-нибудь посещалиWeb
Что случилось со страницей? При чтении статьи слова внезапно двигаются, вы не можете найти позицию, которую читаете, кнопка перемещается в другие места, что вызывает у вас что-то еще?
Неожиданное перемещение содержимого страницы обычно связано с асинхронной загрузкой ресурсов илиDOM
Происходит, когда элементы динамически добавляются на страницу над существующим содержимым. Виновником может быть изображение или видео неизвестного размера, шрифт, который отображается больше или меньше, чем его запасной вариант, или стороннее объявление или виджет, который динамически изменяет свой размер.
Cumulative Layout Shift (CLS)
Вы можете помочь себе в этом, измерив, как часто это происходит с реальными пользователями.
Что такое ЦЛС?
CLS
Измеряется сумма всех индивидуальных оценок изменения макета для каждого неожиданного изменения стиля, происходящего за время существования страницы. Перемещение макета может произойти в любое время, когда видимый элемент меняет положение от одного кадра к другому. Чтобы обеспечить хороший пользовательский опыт, веб-сайты должны стремиться сделатьCLS
оценка меньше, чем0.1
.
Как рассчитать CLS?
оценка смещения макета
Чтобы вычислить значение смещения макета, браузер смотрит на размер области просмотра и перемещение нестабильных элементов в области просмотра между двумя визуализируемыми кадрами. Оценка смещения макета является произведением двух показателей для этого движения: оценки воздействия и оценки расстояния.
layout shift score = impact fraction * distance fraction
Оценка воздействия
Объединение видимых областей всех нестабильных элементов из предыдущего кадра и текущего кадра (как часть общей области окна просмотра) является оценкой воздействия для текущего кадра.
На изображении выше есть элемент, занимающий половину области просмотра в одном кадре. Затем в следующем кадре элемент перемещается вниз на высоту области просмотра.25%
. Красный пунктирный прямоугольник представляет объединение видимых областей элементов в двух кадрах, что в данном случае является общим окном просмотра.75%
, поэтому его показатель воздействия равен0.75
.
оценка расстояния
Другая часть уравнения значения смещения компоновки измеряет, насколько далеко перемещаются нестабильные элементы относительно области просмотра. Доля расстояния — это максимальное расстояние (по горизонтали или вертикали), на которое может перемещаться любой нестабильный элемент в кадре, деленное на максимальный размер окна просмотра (ширину или высоту, в зависимости от того, что больше).
В приведенном выше примере наибольший размер области просмотра — это высота, а нестабильный элемент перемещает высоту области просмотра на25%
, что делает оценку расстояния как0.25
.
Итак, в этом примере показатель воздействия равен0.75
, оценка расстояния0.25
, поэтому доля смещения макета равна0.75 * 0.25 = 0.1875
.
Как улучшить КЛС?
Не используйте безразмерные элементы
Всегда включайте такие элементы, как изображения и видеоwidth
а такжеheight
атрибут размера, современные браузеры будутwidth
а такжеheight
Свойство устанавливает соотношение сторон изображения по умолчанию. Знание соотношения сторон позволяет браузеру рассчитать и зарезервировать достаточно места для элемента.
В качестве альтернативы используйтеaspect-ratio
Соотношение сторон также можно указать заранее:
img {
aspect-ratio: attr(width) / attr(height);
}
Как насчет адаптивных изображений? можно использоватьsrcset
Определяет изображения, чтобы браузер мог выбирать между изображениями и размером каждого изображения.
<img
width="1000"
height="1000"
src="puppy-1000.jpg"
srcset="puppy-1000.jpg 1000w,
puppy-2000.jpg 2000w,
puppy-3000.jpg 3000w"
alt="ConardLi"
/>
- Никогда не вставляйте содержимое в верхней части существующего контента, кроме как в ответ на взаимодействие пользователя. Это обеспечивает ожидаемые изменения макета.
- Предпочитайте анимацию перехода, а не анимацию перехода свойств, которая инициирует изменение макета. Анимируйте переходы таким образом, чтобы обеспечить контекст и непрерывность от одного состояния к другому.
Забронируйте место заранее
Многие страничные объявления вставляются динамически, поэтому обязательно заранее зарезервируйте определенное место под рекламное место.
Будьте осторожны с изменениями шрифта
Шрифты часто представляют собой большие файлы, загрузка которых занимает некоторое время, некоторые браузеры не отображают текст до тех пор, пока шрифт не будет загружен.
font-display: swap
Укажите браузеру использовать системный шрифт для рендеринга по умолчанию и заменить его при загрузке пользовательского шрифта.
@font-face {
font-family: 'Pacifico';
font-style: normal;
font-weight: 400;
src: local('Pacifico Regular'), local('Pacifico-Regular'), url(https://fonts.gstatic.com/xxx.woff2) format('woff2');
font-display: swap;
}
Кроме того, вы можете использовать<link rel="preload">
Загружайте файлы шрифтов раньше.
Получите основные веб-показатели
Google считает, чтоCore Web Vitals
Необходим для любого веб-опыта. Поэтому он стремится отображать эти индикаторы в своих инструментах, а вот поддержка индикаторов в существующих инструментах:
Инструменты, которые еще не поддерживают эти показатели, будут поддерживаться в ближайшем будущем.
web-vitals
Теперь вы можете использовать стандартныйWeb API
существуетJavaScript
измерить каждую метрику.Google
предоставилnpm
Мешок:web-vitals
, эта библиотека предоставляет очень простойAPI
, измерение каждой метрики так же просто, как вызов обычной функции:
npm install web-vitals
Каждая функция измерения получаетreport
Функция обратного вызова в качестве параметра функция обратного вызова будет запущена после завершения измерения, кроме того, дляLCP
а такжеCLS
Такие индикаторы постоянно меняются, поэтому их callback-функции могут срабатывать несколько раз, если вы хотите получить значение каждого изменения за этот период, вы можете указать второй параметрreportAllChanges
, в противном случае функция обратного вызова сработает только один раз после завершения последнего измерения.
import {getCLS, getFID, getLCP} from 'web-vitals';
getCLS(console.log, true);
getFID(console.log); // Does not take a `reportAllChanges` param.
getLCP(console.log, true);
Если эти измененные индикаторы срабатывают несколько раз, они могут быть отправлены на ваш сервер несколько раз, поэтому в функции обратного вызова предусмотрены следующие три параметра:
-
name
: название индикатора -
id
: идентификатор локального анализа -
delta
: разница между текущим значением и последним полученным значением
Так что вам нужно только сообщать каждый разdelta
(разница между текущим значением и последним полученным значением) без сообщения нового значения. Затем сервер может получить окончательный результат, вычислив сумму соответствующих значений всех id.
import {getCLS, getFID, getLCP} from 'web-vitals';
function logDelta({name, id, delta}) {
console.log(`${name} matching ID ${id} changed by ${delta}`);
}
getCLS(logDelta, true);
getFID(logDelta);
getLCP(logDelta, true);
вы можете хорошо сочетатьGoogle Analytics
Чтобы записать показатели отчетности:
import {getCLS, getFID, getLCP} from 'web-vitals';
function sendToGoogleAnalytics({name, delta, id}) {
ga('send', 'event', {
eventCategory: 'Web Vitals',
eventAction: name,
eventValue: Math.round(name === 'CLS' ? delta * 1000 : delta),
eventLabel: id,
nonInteraction: true,
});
}
getCLS(sendToGoogleAnalytics);
getFID(sendToGoogleAnalytics);
getLCP(sendToGoogleAnalytics);
Используйте плагин Chrome
Если вы не хотите рассчитывать в программе, вы также можете использоватьChrome
Плагины более удобный способ,Google
Также предоставляется новый плагинweb-vitals-extension
чтобы помочь нам получить эти показатели:
Этот плагин очень прост, толькоCLS、FID、LCP
Эти три основных показателя могут значительно сфокусировать наше внимание и снизить стоимость понимания.
Цвет значка может сказать вам, преодолела ли страница порог, установленный по умолчанию:
- Серый: плагин не поддерживается или отключен.
- Зеленый: пройти все метрики
- Красный: один или несколько индикаторов не соответствуют стандарту.
Ссылаться на
- web.dev/vitals/
- web.dev/lcp/
- web.dev/fid/
- web.dev/cls/
- GitHub.com/Google CHROM…
- GitHub.com/Google CHROM…
- Developers.Google.com/Web/updates…
резюме
Наконец, хотите использовать вышеуказанные инструменты и индикаторы в своем браузере? обновить быстроChrome 83
версия, большеChrome 83
Обновления кода можно нажатьВыпущен Chrome 83, поддерживающий прямое чтение и запись локальных файлов! Новая междоменная политика!Проверить.
Если в статье есть ошибки, исправьте их в комментариях, если статья вам поможет, ставьте лайк и подписывайтесь.
Если вы хотите читать больше качественных статей, вы можете подписаться на меняблог на гитхабе, твоя звезда✨, лайки и внимание - движущая сила моего постоянного творчества!
Рекомендую обратить внимание на мой паблик WeChat [code secret garden], каждый день выкладывать качественные статьи, будем общаться и расти вместе.
Мы являемся научно-исследовательской командой ByteDance Interactive Entertainment, включая Douyin Short Video, Douyin Volcano, TikTok, Faceu, Qingyan, Jianying и т. д. По состоянию на январь 2020 года Douyin Daily Active (DAU) превысил 400 миллионов человек и продолжает поддерживать быстрый рост. . Вы будете поддерживать разработку продуктов и связанные с ними архитектурные работы, где каждая строка кода может повлиять на сотни миллионов пользователей.
Код набора в школу 2021:DRZUM5Z
Официальный сайт доставки:job.toutiao.com/s/JR8SthH