Мобильный анализ в PageSpeed ​​Insights

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

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

Адаптация к мобильным сетям с высокой задержкой

Соблюдение критерия ATF в одну секунду на мобильных устройствах создает уникальные проблемы, которых нет в других сетях. Пользователи могут получать доступ к вашему сайту через различные сети 2G, 3G и 4G. Задержки в сети значительно выше, чем при проводном соединении, и на рендеринг контента ATF уходит значительная часть нашего бюджета в 1000 мс.

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

Имея это в виду, давайте теперь поработаем в обратном направлении. Если мы посмотрим на типичную последовательность обмена данными между браузером и сервером, то 300 мс из этого времени уже будут израсходованы накладными расходами сети: поиск DNS для преобразования имени хоста (например, google.com) в IP-адрес, сеть туда и обратно для выполнения TCP-квитирования и дополнительного TLS-соединения. Это оставляет нам 700 мс.

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

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

(1) Сервер должен предоставить ответ (< 200 мс)
Время ответа сервера — это время, необходимое серверу для возврата исходного HTML-кода, без учета времени сетевой транспортировки. Поскольку времени у нас очень мало, это время должно быть минимальным — в идеале в пределах 200 миллисекунд, а лучше даже меньше!
(2) Количество перенаправлений должно быть сведено к минимуму.
Дополнительные перенаправления HTTP могут добавить один или два дополнительных сетевых обхода (два, если требуется дополнительный поиск DNS), что приведет к увеличению задержки в сотни миллисекунд в сетях 4G. По этой причине мы настоятельно рекомендуем веб-мастерам минимизировать их количество, а в идеале — полностью исключить перенаправления — это особенно важно для HTML-документа (по возможности избегайте перенаправлений «m dot»).
(3) Количество обращений к первому рендерингу должно быть сведено к минимуму.

Из-за того, как TCP оценивает пропускную способность соединения (т. е. TCP Slow Start ), новое TCP-соединение не может сразу использовать всю доступную пропускную способность между клиентом и сервером. Из-за этого сервер может отправить до 10 TCP-пакетов по новому соединению (~ 14 КБ) в первом двустороннем режиме, а затем ему приходится ждать, пока клиент подтвердит эти данные, прежде чем он сможет увеличить свое окно перегрузки и продолжить доставку большего количества данных.

Также важно отметить, что ограничение в 10 пакетов ( IW10 ) — это недавнее обновление стандарта TCP: вам следует убедиться, что ваш сервер обновлен до последней версии, чтобы воспользоваться этим изменением. В противном случае лимит скорее всего будет 3-4 пакета!

Из-за такого поведения TCP важно оптимизировать контент, чтобы свести к минимуму количество циклов передачи данных, необходимых для доставки необходимых данных для выполнения первого рендеринга страницы. В идеале содержимое ATF должно умещаться в размере менее 98 КБ — это позволяет браузеру отрисовывать страницу всего за три обращения, чтобы иметь достаточно времени для задержки ответа сервера и рендеринга клиента.

(4) Избегайте внешней блокировки JavaScript и CSS в верхнем контенте.

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

В результате JavaScript и CSS, необходимые для визуализации указанной выше области сгиба, должны быть встроены, а JavaScript или CSS, необходимые для добавления дополнительных функций на страницу, должны загружаться после доставки содержимого ATF.

(5) Резервное время для верстки и рендеринга браузера (200 мс)
Процесс анализа HTML, CSS и выполнения JavaScript требует времени и ресурсов клиента! В зависимости от скорости мобильного устройства и сложности страницы этот процесс может занять сотни миллисекунд. Мы рекомендуем зарезервировать 200 миллисекунд для накладных расходов браузера.
(6) Оптимизировать выполнение JavaScript и время рендеринга.
Выполнение сложных сценариев и неэффективного кода может занять десятки и сотни миллисекунд — используйте встроенные в браузер инструменты разработчика для профилирования и оптимизации вашего кода. Для ознакомления ознакомьтесь с нашим интерактивным курсом по инструментам разработчика Chrome.

Часто задаваемые вопросы

Я использую библиотеку JavaScript, например JQuery, есть какие-нибудь советы?
Многие библиотеки JavaScript, такие как JQuery, используются для улучшения страницы, добавляя дополнительную интерактивность, анимацию и другие эффекты. Однако многие из этих вариантов поведения можно безопасно добавить после визуализации содержимого ATF. Исследуйте перемещение выполнения и загрузки такого JavaScript до тех пор, пока страница не загрузится.
Я использую фреймворк JavaScript для создания страницы. Есть какие-нибудь советы?
Если содержимое страницы создано с помощью клиентского JavaScript, вам следует изучить возможность встраивания соответствующих модулей JavaScript, чтобы избежать дополнительных сетевых обращений. Аналогичным образом, использование рендеринга на стороне сервера может значительно повысить производительность загрузки первой страницы: визуализировать шаблоны JS на сервере, встроить результаты в HTML, а затем использовать шаблоны на стороне клиента после загрузки приложения.
Как определить критический CSS на моей странице?
В инструментах разработчика Chrome откройте панель «Аудит» и запустите отчет «Производительность веб-страницы». В созданном отчете найдите «Удалить неиспользуемые правила CSS». Или используйте любой другой сторонний инструмент или скрипт, чтобы определить, какие селекторы CSS применяются на каждой странице.
Можно ли автоматизировать эти лучшие практики?
Абсолютно. Существует множество коммерческих продуктов и продуктов с открытым исходным кодом для оптимизации веб-производительности (WPO), которые могут помочь вам удовлетворить некоторые или все из приведенных выше критериев. Если вам нужны решения с открытым исходным кодом, обратите внимание на инструменты оптимизации PageSpeed .
Как мне настроить свой сервер так, чтобы он соответствовал этим критериям?
Во-первых, убедитесь, что на вашем сервере установлена ​​актуальная версия операционной системы. Чтобы воспользоваться увеличенным начальным размером окна перегрузки TCP (IW10), вам потребуется ядро ​​Linux 2.6.39+. Для других операционных систем обратитесь к документации.
Чтобы оптимизировать время ответа сервера, инструментируйте свой код или используйте решение для мониторинга приложений, чтобы выявить «узкие места» — например, время выполнения сценариев, вызовы базы данных, запросы RPC, рендеринг и т. д. Цель — отобразить ответ HTML в течение 200 миллисекунд.
А как насчет Политики безопасности контента?
Если вы используете CSP, вам может потребоваться обновить политику по умолчанию.
Во-первых, по возможности следует избегать встроенных атрибутов CSS в элементах HTML (например, < p style=...> ), поскольку они часто приводят к ненужному дублированию кода и по умолчанию блокируются с помощью CSP (отключено с помощью «unsafe inline» в «стиль-src»). Если CSP включен, он по умолчанию блокирует все встроенные теги скриптов. Если у вас есть встроенный JavaScript, вам нужно будет обновить политику CSP, чтобы либо использовать хэши сценариев или одноразовые номера , либо использовать «unsafe-inline», чтобы разрешить выполнение всех встроенных сценариев. Если у вас есть встроенные стили, вам необходимо обновить политику CSP, чтобы либо использовать хэши стилей или одноразовые номера , либо использовать «unsafe-inline», чтобы разрешить обработку всех блоков встроенных стилей.

Есть еще вопросы? Пожалуйста, не стесняйтесь задавать вопросы и оставлять отзывы в нашей дискуссионной группе по адресу pagespeed-insights-discuss .

Обратная связь

Была ли эта страница полезной?