Маяк: оптимизируйте скорость сайта

София Емельянова
Sofia Emelianova

Цель урока

Из этого туториала вы узнаете, как использовать Chrome DevTools, чтобы найти способы ускорить загрузку ваших веб-сайтов.

Читайте дальше или посмотрите видеоверсию этого урока:

Предварительные условия

У вас должен быть базовый опыт веб-разработки, аналогичный тому, который преподается на курсе «Введение в веб-разработку» .

Вам не нужно ничего знать о производительности нагрузки.

Введение

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

Кот Тони.

Шаг 1. Аудит сайта

Всякий раз, когда вы намереваетесь улучшить производительность загрузки сайта, всегда начинайте с аудита. Аудит выполняет две важные функции:

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

Настраивать

Для начала вам необходимо настроить новую рабочую среду для сайта Тони , чтобы потом можно было вносить в нее изменения:

  1. Ремикс проекта сайта на Glitch . Ваш новый проект откроется на вкладке. Эта вкладка будет называться вкладкой редактора .

    Исходный источник и вкладка редактора после нажатия Remix.

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

  2. В нижней части вкладки редактора нажмите «Просмотр» > «Просмотр в новом окне» . Демо откроется в новой вкладке. Эта вкладка будет называться демонстрационной вкладкой . Загрузка сайта может занять некоторое время.

    Вкладка «Демо».

  3. Откройте DevTools рядом с демо-версией.

    DevTools и демо-версия.

Установите базовый уровень

Базовый показатель — это запись того, как работал сайт до того, как вы внесли какие-либо улучшения производительности.

  1. Откройте панель Маяк . Он может быть скрыт за . Дополнительные панели .

    Панель «Маяк».

  2. Сопоставьте настройки конфигурации отчета Lighthouse с настройками на снимке экрана. Вот объяснение различных вариантов:

    • check_box Очистить хранилище . Установка этого флажка очищает все хранилище, связанное со страницей, перед каждым аудитом. Оставьте этот параметр включенным, если вы хотите отслеживать, как посетители впервые посещают ваш сайт. Отключите этот параметр, если хотите, чтобы сайт повторялся.
    • check_box Включить выборку JS . По умолчанию эта опция отключена. При включении он добавляет подробные стеки вызовов JavaScript в трассировку производительности, но может замедлить создание отчетов. Трассировка доступна в меню «Инструменты more_vert» > «Просмотреть нерегулируемую трассировку» после создания отчета Lighthouse . Трассировка производительности без (слева) и с (справа) выборкой JS.
    • Имитированное регулирование (по умолчанию) . Эта опция имитирует типичные условия просмотра на мобильном устройстве. Это называется «моделируемым», потому что Lighthouse фактически не регулирует скорость во время процесса аудита. Вместо этого он просто экстраполирует, сколько времени потребуется для загрузки страницы в мобильных условиях. С другой стороны, настройка регулирования DevTools (расширенная) фактически ограничивает ваш процессор и сеть за счет более длительного процесса аудита.
    • Режим > Навигация (по умолчанию) . Этот режим анализирует загрузку одной страницы, и это то, что нам нужно в этом уроке. Дополнительную информацию см. в разделе «Три режима» .
    • Устройство > Мобильное . Опция mobile меняет строку пользовательского агента и имитирует мобильную область просмотра. Вариант для настольного компьютера практически просто отключает изменения для мобильных устройств.
    • Категории > check_box Производительность . Если включена одна категория, Lighthouse генерирует отчет только с соответствующим набором проверок. Вы можете оставить другие категории включенными, если хотите видеть типы рекомендаций, которые они предоставляют. Отключение нерелевантных категорий немного ускоряет процесс аудита.
  3. Нажмите «Анализ загрузки страницы» . Через 10–30 секунд на панели Lighthouse появится отчет о производительности сайта.

    Отчет Lighthouse о работе сайта.

Обработка ошибок в отчетах

Если вы когда-нибудь получите сообщение об ошибке в отчете Lighthouse, попробуйте запустить демонстрационную вкладку из окна инкогнито , когда другие вкладки не открыты. Это гарантирует, что вы запустите Chrome из чистого состояния. Расширения Chrome, в частности, могут мешать процессу аудита.

Отчет с ошибкой.

Понимание вашего отчета

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

Общий балл производительности.

Метрики

Прокрутите вниз до раздела «Метрики» и нажмите « Развернуть представление» . Чтобы прочитать документацию по метрике, нажмите «Подробнее...» .

Раздел «Метрики».

В этом разделе представлены количественные измерения производительности сайта. Каждая метрика дает представление о различных аспектах производительности. Например, First Contentful Paint сообщает вам, когда контент впервые отображается на экране, что является важной вехой в восприятии пользователем загрузки страницы, тогда как Time To Interactive отмечает момент, в котором страница кажется достаточно готовой для обработки взаимодействия с пользователем.

Скриншоты

Далее идет коллекция снимков экрана, показывающих, как страница выглядела при загрузке.

Скриншоты того, как страница выглядела во время загрузки.

Возможности

Далее следует раздел «Возможности» , в котором представлены конкретные советы о том, как улучшить производительность загрузки этой конкретной страницы.

Раздел «Возможности».

Нажмите на возможность, чтобы узнать об этом больше.

Подробнее о возможности сжатия текста.

Нажмите «Подробнее...», чтобы просмотреть документацию о том, почему возможность важна, а также конкретные рекомендации по ее устранению.

Диагностика

В разделе «Диагностика» представлена ​​дополнительная информация о факторах, влияющих на время загрузки страницы.

Раздел Диагностика.

Пройденные проверки

В разделе «Пройденные проверки» показано, что сайт делает правильно. Нажмите, чтобы развернуть раздел.

Раздел Пройденные проверки.

Шаг 2: Экспериментируйте

В разделе «Возможности» вашего отчета Lighthouse вы найдете советы о том, как улучшить производительность страницы. В этом разделе вы вносите рекомендуемые изменения в базу кода, проверяя сайт после каждого изменения, чтобы измерить, как оно влияет на скорость сайта.

Включить сжатие текста

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

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

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

Откройте панель «Сеть» и проверьте Настройки > Использовать большие строки запросов .

Столбец «Размер» на панели «Сеть» показывает большие строки запросов.

В каждой ячейке размера отображаются два значения. Верхнее значение — это размер загруженного ресурса. Нижнее значение — это размер несжатого ресурса. Если два значения одинаковы, ресурс не сжимается при отправке по сети. В этом примере верхнее и нижнее значения для bundle.js равны 1.4 MB .

Вы также можете проверить сжатие, проверив HTTP-заголовки ресурса:

  1. Нажмите Bundle.js и откройте вкладку «Заголовки» .

    Вкладка «Заголовки».

  2. Найдите в разделе «Заголовки ответов» заголовок content-encoding . Вы не должны его увидеть, это означает, что bundle.js не был сжат. Когда ресурс сжимается , этому заголовку обычно присваивается значение gzip , deflate или br . См. Директивы для объяснения этих значений.

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

  1. На вкладке редактора откройте server.js и добавьте следующие две (выделенные) строки:

    ...
    const fs = require('fs');
    const compression = require('compression');
    
    app.use(compression());
    app.use(express.static('build'));
    ...
    
  2. Обязательно поставьте app.use(compression()) перед app.use(express.static('build')) .

    Редактирование server.js.

  3. Подождите, пока Glitch развернет новую сборку сайта. Счастливый смайлик в левом нижнем углу указывает на успешное развертывание.

Используйте рабочие процессы, которые вы изучили ранее, чтобы вручную проверить, работает ли сжатие:

  1. Вернитесь на вкладку демо и перезагрузите страницу.

    В столбце «Размер» теперь должно отображаться два разных значения для текстовых ресурсов, таких как bundle.js . Верхнее значение 269 KB для bundle.js — это размер файла, отправленного по сети, а нижнее значение 1.4 MB — размер несжатого файла.

    В столбце «Размер» теперь отображаются два разных значения для текстовых ресурсов.

  2. Раздел «Заголовки ответов» для bundle.js теперь должен включать заголовок content-encoding: gzip .

    Раздел «Заголовки ответов» теперь содержит заголовок кодирования содержимого.

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

  1. Откройте панель «Маяк» и нажмите Добавлять. Выполните аудит... на панели действий вверху.

    Кнопка «Выполнить аудит».

  2. Оставьте настройки такими же, как и раньше, и нажмите «Анализ загрузки страницы» .

    Отчет Lighthouse после включения сжатия текста.

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

Сжатие текста в реальном мире

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

Изменение размера изображений

В вашем новом отчете говорится, что правильный размер изображений — это еще одна большая возможность.

Изменение размера изображений помогает ускорить загрузку за счет уменьшения размера файла изображений. Если ваш пользователь просматривает ваши изображения на экране мобильного устройства шириной 500 пикселей, нет смысла отправлять изображение шириной 1500 пикселей. В идеале вы должны отправить изображение шириной не более 500 пикселей.

  1. В своем отчете нажмите «Правильный размер изображений» , чтобы увидеть, какие изображения следует изменить. Похоже, что все 4 изображения больше, чем нужно.

    Подробности о возможности «изображения правильного размера»

  2. Вернувшись на вкладку редактора, откройте src/model.js .

  3. Замените const dir = 'big' на const dir = 'small' . Этот каталог содержит копии тех же изображений, размер которых был изменен.

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

    Отчет Lighthouse после изменения размера изображений.

Похоже, что это изменение лишь незначительно повлияет на общий показатель производительности. Однако одна вещь, которую оценка не показывает четко, — это то, сколько сетевых данных вы сохраняете для своих пользователей. Общий размер старых фотографий составлял около 6,1 МБ, а сейчас всего около 633 КБ. Вы можете проверить это в строке состояния внизу панели «Сеть» .

Объем данных, передаваемых до и после изменения размера изображений.

Изменение размера изображений в реальном мире

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

  • Измените размер изображений во время процесса сборки.
  • Создайте несколько размеров каждого изображения в процессе сборки, а затем используйте srcset в своем коде. Во время выполнения браузер сам выбирает, какой размер лучше всего подходит для устройства, на котором он работает. См. Изображения относительного размера .
  • Используйте CDN изображений, который позволяет динамически изменять размер изображения по вашему запросу.
  • По крайней мере, оптимизируйте каждое изображение. Часто это может привести к огромной экономии. Оптимизация — это когда вы запускаете образ через специальную программу, уменьшающую размер файла образа. Дополнительные советы см. в разделе «Основная оптимизация изображений» .

Устраните ресурсы, блокирующие рендеринг

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

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

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

  1. Нажмите «Удалить ресурсы, блокирующие рендеринг» , чтобы просмотреть блокирующие ресурсы: lodash.js и jquery.js .

    Дополнительная информация о возможности «уменьшить ресурсы, блокирующие рендеринг».

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

    • На Mac: Command + Shift + P.
    • В Windows, Linux или ChromeOS: Control + Shift + P.
  3. Начните вводить Coverage и выберите « Показать покрытие» .

    Открытие командного меню с панели «Маяк».

    В ящике откроется вкладка «Покрытие» .

    Вкладка «Покрытие».

  4. Нажмите Перезагрузить. Перезагрузить . На вкладке «Покрытие» представлен обзор того, какая часть кода в bundle.js , jquery.js и lodash.js выполняется во время загрузки страницы.

    Отчет о покрытии.

    На этом снимке экрана видно, что около 74% и 30% файлов jQuery и Lodash не используются соответственно.

  5. Щелкните строку jquery.js . DevTools открывает файл на панели «Источники» . Строка кода была выполнена, если рядом с ней имеется зеленая полоса. Красная полоса рядом со строкой кода означает, что она не была выполнена и определенно не требуется при загрузке страницы.

    Просмотр файла jQuery на панели «Источники».

  6. Прокрутите немного код jQuery. Некоторые из строк, которые «исполняются», на самом деле являются просто комментариями. Запуск этого кода через минификатор, удаляющий комментарии, — это еще один способ уменьшить размер файла.

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

Нужны ли файлы jquery.js и lodash.js для загрузки страницы? Вкладка «Блокировка запросов» может показать вам, что происходит, когда ресурсы недоступны.

  1. Перейдите на вкладку «Сеть» и снова откройте командное меню .
  2. Начните вводить blocking , а затем выберите « Показать блокировку запроса» . Откроется вкладка Блокировка запросов .

    Вкладка «Блокировка запросов».

  3. Нажмите Добавлять. Добавьте шаблон , введите /libs/* в текстовое поле и нажмите Enter для подтверждения.

    Добавление шаблона для блокировки любого запроса к каталогу libs.

  4. Перезагрузите страницу. Запросы jQuery и Lodash выделены красным, что означает, что они заблокированы. Страница по-прежнему загружается и является интерактивной, поэтому похоже, что эти ресурсы вообще не нужны!

    На панели «Сеть» отображается, что запросы заблокированы.

  5. Нажмите Удалять. Удалите все шаблоны , чтобы удалить шаблон блокировки /libs/* .

В общем, вкладка «Блокировка запросов» полезна для моделирования поведения вашей страницы, когда какой-либо ресурс недоступен.

Теперь удалите ссылки на эти файлы из кода и повторите аудит страницы:

  1. Вернувшись на вкладку редактора, откройте template.html .
  2. Удалите соответствующие теги <script> :

    <head>
        ...
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <script src="/libs/lodash.js"></script>
        <script src="/libs/jquery.js"></script>
        <title>Tony's Favorite Foods</title>
    </head>
    
  3. Подождите, пока сайт будет перестроен и повторно развернут.

  4. Еще раз проверьте страницу на панели Lighthouse . Ваш общий балл должен снова улучшиться.

    Отчет Lighthouse после удаления ресурсов, блокирующих рендеринг.

Оптимизация критического пути рендеринга в реальном мире

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

  • Маловероятно, что вы найдете сценарии, которые можно будет удалить сразу, но вы часто обнаружите, что многие сценарии не нужно запрашивать во время загрузки страницы, и вместо этого их можно запрашивать асинхронно. См. Использование async или defer .
  • Если вы используете фреймворк, проверьте, есть ли у него производственный режим. В этом режиме может использоваться такая функция, как встряхивание дерева , чтобы исключить ненужный код, блокирующий критический рендеринг.

Делайте меньше работы в основном потоке

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

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

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

  1. Открыть производительность > Настройки. Запишите настройки и установите для сети значение «Медленный 3G» , а для процессоразамедление в 6 раз .

    Настройки регулирования ЦП и сети на панели «Производительность»

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

  2. Нажмите Перезагрузить. Перезагрузить . DevTools перезагружает страницу, а затем визуализирует все, что нужно было сделать для загрузки страницы. Эта визуализация будет называться трассировкой .

    Трассировка загрузки страницы на панели «Производительность».

Трассировка показывает активность в хронологическом порядке, слева направо. Диаграммы FPS, CPU и NET вверху дают вам обзор кадров в секунду, активности процессора и сетевой активности.

Раздел Обзор трассировки.

Желтая стена, которую вы видите в разделе «Обзор» , означает, что процессор был полностью занят выполнением сценариев. Это подсказка о том, что вы можете ускорить загрузку страницы, выполняя меньше работы с JavaScript.

Изучите трассировку, чтобы найти способы сократить объем работы с JavaScript:

  1. Нажмите на раздел «Время» , чтобы развернуть его.

    Раздел Тайминги.

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

  2. Нажмите «Тайминги» еще раз, чтобы свернуть этот раздел.

  3. Просмотрите основной раздел. В этом разделе показан хронологический журнал активности основного потока слева направо. Ось Y (сверху вниз) показывает, почему произошли события.

    Основной раздел.

    В этом примере событие Evaluate Script вызвало выполнение (anonymous) функции, что привело к выполнению __webpack__require__ , что привело к выполнению ./src/index.jsx и так далее.

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

    Деятельность mineBitcoin.

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

  5. Откройте вкладку «Снизу вверх» внизу. На этой вкладке показано, какие действия заняли больше всего времени. Если вы ничего не видите в разделе «Снизу вверх» , щелкните метку « Основной раздел».

    Вкладка «Снизу вверх».

    В разделе «Снизу вверх» отображается информация только для любого действия или группы действий, которые вы выбрали в данный момент. Например, если вы щелкнули одно из действий mineBitcoin , в разделе «Снизу вверх» будет показана информация только для этого одного действия.

    Столбец «Время на себя» показывает, сколько времени было потрачено непосредственно на каждое занятие. В этом случае около 82% времени основного потока было потрачено на функцию mineBitcoin .

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

  1. На вкладке редактора откройте webpack.config.js .
  2. Измените "mode":"development" на "mode":"production" .
  3. Подождите, пока развернется новая сборка.
  4. Проверьте страницу еще раз.

    Отчет Lighthouse после настройки веб-пакета для использования производственного режима.

Уменьшите активность JavaScript, удалив вызов mineBitcoin :

  1. На вкладке редактора откройте src/App.jsx .
  2. Закомментируйте вызов this.mineBitcoin(1500) в constructor .
  3. Подождите, пока развернется новая сборка.
  4. Проверьте страницу еще раз.

Отчет Lighthouse после удаления ненужной работы с JavaScript.

Как всегда, есть еще над чем поработать, например, уменьшить метрики Largest Contentful Paint и Cumulative Layout Shift .

Меньше работы с основным потоком в реальном мире

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

Если вы предпочитаете подход, который больше похож на console.log() , API User Timing позволяет произвольно размечать определенные этапы жизненного цикла вашего приложения, чтобы отслеживать, сколько времени занимает каждый из этих этапов.

Краткое содержание

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

Следующие шаги

Проводите аудит на своем сайте! Если вам нужна помощь в интерпретации отчета или поиске способов повышения производительности нагрузки, ознакомьтесь со всеми способами получения помощи от сообщества DevTools:

  • Сообщите об ошибках в этом документе в репозитории Developer.chrome.com .
  • Отчеты об ошибках в DevTools можно отправлять на странице Chromium Bugs .
  • Обсуждайте функции и изменения в списке рассылки . Пожалуйста, не используйте список рассылки для вопросов поддержки. Вместо этого используйте переполнение стека.
  • Получите общую справку о том, как использовать DevTools при переполнении стека . Чтобы отправлять запросы об ошибках, всегда используйте Chromium Bugs.
  • Напишите нам в Твиттере @ChromeDevTools .
,

София Емельянова
Sofia Emelianova

Цель урока

Из этого туториала вы узнаете, как использовать Chrome DevTools, чтобы найти способы ускорить загрузку ваших веб-сайтов.

Читайте дальше или посмотрите видеоверсию этого урока:

Предварительные условия

У вас должен быть базовый опыт веб-разработки, аналогичный тому, который преподается на курсе «Введение в веб-разработку» .

Вам не нужно ничего знать о производительности нагрузки.

Введение

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

Кот Тони.

Шаг 1. Аудит сайта

Всякий раз, когда вы намереваетесь улучшить производительность загрузки сайта, всегда начинайте с аудита. Аудит выполняет две важные функции:

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

Настраивать

Для начала вам необходимо настроить новую рабочую среду для сайта Тони , чтобы потом можно было вносить в нее изменения:

  1. Ремикс проекта сайта на Glitch . Ваш новый проект откроется на вкладке. Эта вкладка будет называться вкладкой редактора .

    Исходный источник и вкладка редактора после нажатия Remix.

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

  2. В нижней части вкладки редактора нажмите «Просмотр» > «Просмотр в новом окне» . Демо откроется в новой вкладке. Эта вкладка будет называться демонстрационной вкладкой . Загрузка сайта может занять некоторое время.

    Вкладка «Демо».

  3. Откройте DevTools рядом с демо-версией.

    DevTools и демо.

Установите базовый уровень

Базовый показатель — это запись того, как работал сайт до того, как вы внесли какие-либо улучшения производительности.

  1. Откройте панель Маяк . Он может быть скрыт за . Дополнительные панели .

    Панель «Маяк».

  2. Сопоставьте настройки конфигурации отчета Lighthouse с настройками на снимке экрана. Вот объяснение различных вариантов:

    • check_box Очистить хранилище . Установка этого флажка очищает все хранилище, связанное со страницей, перед каждым аудитом. Оставьте этот параметр включенным, если вы хотите отслеживать, как посетители впервые посещают ваш сайт. Отключите этот параметр, если хотите, чтобы сайт повторялся.
    • check_box Включить выборку JS . По умолчанию эта опция отключена. При включении он добавляет подробные стеки вызовов JavaScript в трассировку производительности, но может замедлить создание отчетов. Трассировка доступна в меню «Инструменты more_vert» > «Просмотреть нерегулируемую трассировку» после создания отчета Lighthouse . Трассировка производительности без (слева) и с (справа) выборкой JS.
    • Имитированное регулирование (по умолчанию) . Эта опция имитирует типичные условия просмотра на мобильном устройстве. Это называется «моделируемым», потому что Lighthouse фактически не регулирует скорость во время процесса аудита. Вместо этого он просто экстраполирует, сколько времени потребуется для загрузки страницы в мобильных условиях. С другой стороны, настройка регулирования DevTools (расширенная) фактически ограничивает ваш процессор и сеть за счет более длительного процесса аудита.
    • Режим > Навигация (по умолчанию) . Этот режим анализирует загрузку одной страницы, и это то, что нам нужно в этом уроке. Дополнительную информацию см. в разделе «Три режима» .
    • Устройство > Мобильное . Опция mobile меняет строку пользовательского агента и имитирует мобильную область просмотра. Вариант для настольного компьютера практически просто отключает изменения для мобильных устройств.
    • Категории > check_box Производительность . Если включена одна категория, Lighthouse генерирует отчет только с соответствующим набором проверок. Вы можете оставить другие категории включенными, если хотите видеть типы рекомендаций, которые они предоставляют. Отключение нерелевантных категорий немного ускоряет процесс аудита.
  3. Нажмите «Анализ загрузки страницы» . Через 10–30 секунд на панели Lighthouse появится отчет о производительности сайта.

    Отчет Lighthouse о работе сайта.

Обработка ошибок в отчетах

Если вы когда-нибудь получите сообщение об ошибке в отчете Lighthouse, попробуйте запустить демонстрационную вкладку из окна инкогнито , когда другие вкладки не открыты. Это гарантирует, что вы запустите Chrome из чистого состояния. Расширения Chrome, в частности, могут мешать процессу аудита.

Отчет с ошибкой.

Понимание вашего отчета

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

Общий балл производительности.

Метрики

Прокрутите вниз до раздела «Метрики» и нажмите « Развернуть представление» . Чтобы прочитать документацию по метрике, нажмите «Подробнее...» .

Раздел «Метрики».

В этом разделе представлены количественные измерения производительности сайта. Каждая метрика дает представление о различных аспектах производительности. Например, First Contentful Paint сообщает вам, когда контент впервые отображается на экране, что является важной вехой в восприятии пользователем загрузки страницы, тогда как Time To Interactive отмечает момент, в котором страница кажется достаточно готовой для обработки взаимодействия с пользователем.

Скриншоты

Далее идет коллекция снимков экрана, показывающих, как страница выглядела при загрузке.

Скриншоты того, как страница выглядела во время загрузки.

Возможности

Далее следует раздел «Возможности» , в котором представлены конкретные советы о том, как улучшить производительность загрузки этой конкретной страницы.

Раздел «Возможности».

Нажмите на возможность, чтобы узнать об этом больше.

Подробнее о возможности сжатия текста.

Нажмите «Подробнее...», чтобы просмотреть документацию о том, почему возможность важна, а также конкретные рекомендации по ее устранению.

Диагностика

В разделе «Диагностика» представлена ​​дополнительная информация о факторах, влияющих на время загрузки страницы.

Раздел Диагностика.

Пройденные проверки

В разделе «Пройденные проверки» показано, что сайт делает правильно. Нажмите, чтобы развернуть раздел.

Раздел Пройденные проверки.

Шаг 2: Экспериментируйте

В разделе «Возможности» вашего отчета Lighthouse вы найдете советы о том, как улучшить производительность страницы. В этом разделе вы вносите рекомендуемые изменения в базу кода, проверяя сайт после каждого изменения, чтобы измерить, как оно влияет на скорость сайта.

Включить сжатие текста

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

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

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

Откройте панель «Сеть» и проверьте Настройки > Использовать большие строки запросов .

Столбец «Размер» на панели «Сеть» показывает большие строки запросов.

В каждой ячейке размера отображаются два значения. Верхнее значение — это размер загруженного ресурса. Нижнее значение — это размер несжатого ресурса. Если два значения одинаковы, ресурс не сжимается при отправке по сети. В этом примере верхнее и нижнее значения для bundle.js равны 1.4 MB .

Вы также можете проверить сжатие, проверив HTTP-заголовки ресурса:

  1. Нажмите Bundle.js и откройте вкладку «Заголовки» .

    Вкладка «Заголовки».

  2. Найдите в разделе «Заголовки ответов» заголовок content-encoding . Вы не должны его увидеть, это означает, что bundle.js не был сжат. Когда ресурс сжимается , этому заголовку обычно присваивается значение gzip , deflate или br . См. Директивы для объяснения этих значений.

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

  1. На вкладке редактора откройте server.js и добавьте следующие две (выделенные) строки:

    ...
    const fs = require('fs');
    const compression = require('compression');
    
    app.use(compression());
    app.use(express.static('build'));
    ...
    
  2. Обязательно поставьте app.use(compression()) перед app.use(express.static('build')) .

    Редактирование server.js.

  3. Подождите, пока Glitch развернет новую сборку сайта. Счастливый смайлик в левом нижнем углу указывает на успешное развертывание.

Используйте рабочие процессы, которые вы изучили ранее, чтобы вручную проверить, работает ли сжатие:

  1. Вернитесь на вкладку демо и перезагрузите страницу.

    В столбце «Размер» теперь должно отображаться два разных значения для текстовых ресурсов, таких как bundle.js . Верхнее значение 269 KB для bundle.js — это размер файла, отправленного по сети, а нижнее значение 1.4 MB — размер несжатого файла.

    В столбце «Размер» теперь отображаются два разных значения для текстовых ресурсов.

  2. Раздел «Заголовки ответов» для bundle.js теперь должен включать заголовок content-encoding: gzip .

    Раздел заголовков ответов теперь содержит заголовок, кодирующий контент.

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

  1. Откройте панель маяка и нажмите Добавлять. Выполните аудит ... на панели действий наверху.

    Выполните кнопку аудита.

  2. Оставьте настройки такими же, как и раньше, и нажмите «Анализировать загрузку страницы» .

    Отчет маяка после включения сжатия текста.

Уууу! Это выглядит как прогресс. Ваш общий показатель производительности должен был увеличиться, что означает, что сайт становится быстрее.

Сжатие текста в реальном мире

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

Изменить размер изображений

В вашем новом отчете говорится, что правильные размеры изображений - еще одна большая возможность.

Изменение размера изображений помогает ускорить время загрузки, уменьшая размер файла изображений. Если ваш пользователь просматривает ваши изображения на экране мобильного устройства, который имеет ширину 500 пикселей, на самом деле нет смысла отправлять изображение шириной 1500 пикселей. В идеале вы бы отправили изображение шириной 500 пикселей, самое большее.

  1. В своем отчете нажмите «Правильно размер изображения» , чтобы увидеть, какие изображения следует изменить. Похоже, что все 4 изображения больше, чем необходимо.

    Подробная информация о возможности изображений правильного размера

  2. Вернувшись на вкладке «Редактор», откройте src/model.js .

  3. Замените const dir = 'big' с const dir = 'small' . Этот каталог содержит копии тех же изображений, которые были изменены.

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

    Отчет маяка после изменения размера изображений.

Похоже, изменение оказывает незначительное влияние на общий показатель производительности. Тем не менее, одна вещь, которую показатель не показывает ясно, это то, сколько сетевых данных вы сохраняете своих пользователей. Общий размер старых фотографий составлял около 6,1 МБ, тогда как теперь это всего около 633 КБ. Вы можете проверить это на строке состояния в нижней части сетевой панели.

Количество данных, передаваемых до и после изменения размера изображений.

Изменение размера изображений в реальном мире

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

  • Измените размер изображений во время процесса сборки.
  • Создайте несколько размеров каждого изображения в процессе сборки, а затем используйте srcset в вашем коде. Во время выполнения браузер заботится о выборе того, какой размер лучше всего подходит для устройства, на котором он работает. Смотрите изображения относительного размера .
  • Используйте изображение CDN, которое позволяет динамически изменять размер изображения при его просьбе.
  • По крайней мере, оптимизируйте каждое изображение. Это часто может создать огромные сбережения. Оптимизация - это когда вы запускаете изображение через специальную программу, которая уменьшает размер файла изображения. См. Оптимизация основной оптимизации изображения для получения дополнительных советов.

Устранить ресурсы блокировки рендеринга

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

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

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

  1. Нажмите «Устранение ресурсов», блокирующих рендеринг , чтобы увидеть блокирующие ресурсы: lodash.js и jquery.js .

    Больше информации о возможности «уменьшить ресурсы блокировки рендеринга».

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

    • На Mac, команда + shift + p
    • В Windows, Linux или Chromeos, Control + Shift + P
  3. Начните печатать Coverage и выберите «Показать покрытие» .

    Открытие меню команд с панели маяка.

    Вкладка покрытия открывается в ящике .

    Вкладка покрытия.

  4. Нажмите Перезагрузить Перезагрузить Вкладка «Покрытие» содержит обзор того, сколько кода в bundle.js , jquery.js и lodash.js выполняется во время загрузки страницы.

    Отчет о покрытии.

    В этом скриншоте говорится, что около 74% и 30% файлов jQuery и Lodash не используются соответственно.

  5. Нажмите на jQuery.js Row. Devtools открывает файл на панели источников . Строка кода была выполнена, если рядом с ней есть зеленая полоса. Красная полоса рядом с строкой кода означает, что она не была выполнена, и определенно не нужна при загрузке страницы.

    Просмотр файла jQuery на панели источников.

  6. Прокрутите код jQuery немного. Некоторые из строк, которые «выполнены», на самом деле просто комментарии. Запуск этого кода через минивер, который лишает комментариев, является еще одним способом уменьшить размер этого файла.

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

Необходимы ли файлы jquery.js и lodash.js даже для загрузки страницы? Вкладка «Блокировка запроса» может показать вам, что происходит, когда ресурсы недоступны.

  1. Нажмите на вкладку «Сеть» и снова откройте меню команд .
  2. Начните набирать blocking , а затем выберите блокировку запроса шоу . Откроется вкладка блокировки запроса .

    Вкладка «Запрос».

  3. Нажмите Добавлять. Добавьте шаблон , type /libs/* в текстовом поле и нажмите Enter, чтобы подтвердить.

    Добавление шаблона для блокировки любого запроса в каталог "libs".

  4. Перезагрузить страницу. Запросы jQuery и Lodash красные, что означает, что они были заблокированы. Страница все еще загружается и интерактивна, поэтому, похоже, эти ресурсы вообще не нужны!

    Сетевая панель показывает, что запросы были заблокированы.

  5. Нажмите Удалять. Удалите все шаблоны , чтобы удалить шаблон блокировки /libs/* .

В целом, вкладка «Блокировка запроса» полезна для моделирования того, как ведет себя ваша страница, когда какой -либо ресурс недоступен.

Теперь удалите ссылки на эти файлы из кода и снова проверяйте страницу:

  1. Вернувшись на вкладке «Редактор», Open template.html .
  2. Удалите соответствующие теги <script> :

    <head>
        ...
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <script src="/libs/lodash.js"></script>
        <script src="/libs/jquery.js"></script>
        <title>Tony's Favorite Foods</title>
    </head>
    
  3. Подождите, пока сайт повторно заработает и повторно развертывается.

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

    Отчет Маяка после удаления ресурсов блокировки рендеринга.

Оптимизация критического пути рендеринга в реальном мире

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

  • Маловероятно, что вы найдете сценарии, которые сможете сразу же удалить, но вы часто обнаружите, что многие сценарии не нужно запрашивать во время загрузки страницы, и вместо этого может быть запрошено асинхронно. Смотрите , используя Async или SEFER .
  • Если вы используете структуру, проверьте, имеет ли он производственный режим. В этом режиме могут использовать такую ​​функцию, как встряхивание дерева , чтобы устранить ненужный код, который блокирует критический рендерин.

Делать меньше основной работы по ветру

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

Основной поток - это то, где браузер выполняет большую часть работы, необходимой для отображения страницы, такой как анализ и выполнение HTML, CSS и JavaScript.

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

  1. Открытая производительность > Настройки. Захват настройки и установите сеть для замедления 3G и процессора на 6x замедление .

    Настройки процессора и дросселя сети в панели производительности

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

  2. Нажмите Перезагрузить Перезагрузить Devtools перезагружает страницу, а затем создает визуализацию всего, что она должна была сделать, чтобы загрузить страницу. Эта визуализация будет упоминаться как след .

    Трассия панели Performance на загрузке страницы.

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

Обзор раздел трассировки.

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

Изучите трассировку, чтобы найти способы выполнения меньше работы JavaScript:

  1. Нажмите на раздел «Время» , чтобы расширить его.

    Время раздела.

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

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

  3. Просмотрите основной раздел. В этом разделе показан хронологический журнал активности основного потока слева направо. Ось Y (сверху вниз) показывает, почему произошли события.

    Основной раздел.

    В этом примере событие Evaluate Script привело к выполнению (anonymous) функции, которая заставила выполнять __webpack__require__ , что заставило выполнить ./src/index.jsx и так далее.

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

    Minebitcoin Activity.

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

  5. Откройте вкладку снизу внизу внизу. Эта вкладка разбивает, какие действия заняли больше всего времени. Если вы ничего не видите в разделе «снизу вверх» , нажмите на этикетку для основного раздела.

    Вкладка «снизу вверх».

    В разделе «снизу вверх» показана только информация только для любой деятельности или группы деятельности, которую вы в настоящее время выбрали. Например, если вы нажали на одно из мероприятий mineBitcoin , раздел «снизу вверх» будет показывать информацию только для этого одного действия.

    Столбец Self Time показывает вам, сколько времени было проведено непосредственно в каждом занятии. В этом случае около 82% основного времени потока было потрачено на функцию mineBitcoin .

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

  1. На вкладке редактора откройте webpack.config.js .
  2. Изменить "mode":"development" на "mode":"production" .
  3. Подождите, пока новая сборка развернет.
  4. Проверьте страницу еще раз.

    Отчет о маяке после настройки WebPack для использования производственного режима.

Уменьшите активность JavaScript, удалив вызов mineBitcoin :

  1. На вкладке редактора откройте src/App.jsx .
  2. Прокомментируйте призыв к this.mineBitcoin(1500) в constructor .
  3. Подождите, пока новая сборка развернет.
  4. Проверьте страницу еще раз.

Отчет Маяка после удаления ненужной работы JavaScript.

Как всегда, еще предстоит сделать, например, уменьшить самые большие удовлетворенные краски и кумулятивные метрики смены макета .

Делать меньше основной работы в реальном мире

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

Если вы предпочитаете подход, который больше похож на console.log() , API пользователя позволяет произвольно отмечать определенные этапы жизненного цикла вашего приложения, чтобы отслеживать, как долго занимает каждый из этих этапов.

Краткое содержание

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

Следующие шаги

Запустите аудиты на своем собственном сайте! Если вам нужна помощь в интерпретации вашего отчета или поиск способов повышения производительности нагрузки, ознакомьтесь с всеми способами получить помощь от сообщества Devtools:

  • Файл ошибки на этот документ в репозитории Developer.chrome.com .
  • Отчеты об ошибках файлов на DevTools на Chromium Bugs .
  • Обсудите функции и изменения в списке рассылки . Пожалуйста, не используйте список рассылки для вопросов поддержки. Вместо этого используйте переполнение стека.
  • Получите общую помощь о том, как использовать Devtools в переполнении стека . Чтобы подать запросы на ошибку, всегда используйте ошибки хрома.
  • Твитнуть нас на @chromedevtools .