Чому ми Послуги Портфоліо Блог Технології Процес розробки Розпочати проєкт →
UA EN RU
← Всі статті
Розробка · 30.10.2019 · 6 хв читання

Повертаємо показники Google PageSpeed у зелену зону

З 2017 року Google оцінює реальну швидкість завантаження — і більшість сайтів просіла. Розбираємо кроки, які повернули показники в «зелену» зону: скрипти, модулі, шрифти, зображення та GTM.
Повертаємо показники Google PageSpeed у зелену зону

З 2017 року Google змінив політику оцінювання швидкості завантаження сторінок. Раніше бали нараховували за виконання рекомендацій, які інструмент показував після аудиту: стиснув зображення, CSS і JS, позбувся ресурсів, що блокують рендеринг, — молодець, пункти виконано, бали набрано. Тепер інструмент вимірює фактичну швидкість завантаження, момент першої появи контенту й те, як швидко користувач може почати взаємодіяти зі сторінкою. За новими критеріями більшість сайтів просіла за показниками, тож ми провели низку заходів, щоб повернути оцінки сайтів замовників у «зелену» зону.

Що змінилося в оцінці Google

Різниця між старою та новою логікою підрахунку принципова: раніше вимірювали старанність, тепер — результат, який бачить жива людина з живим пристроєм і живим каналом зв'язку.

Як було до 2017 року

Бали нараховували за виконання рекомендацій, які інструмент показував після аудиту. Стиснув зображення, CSS і JS, позбувся ресурсів, що блокують рендеринг сторінки, — пункт закрито, бали зараховано. За такого підходу набрати «зелену зону» було неважко.

Як стало зараз

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

Що таке «зелена зона». Це понад 90 балів зі 100. Після зміни критеріїв оцінювання більшість сайтів просіла за показниками, і повернення в зелене перетворилося на окрему технічну роботу.

CSS і JS: головні ресурси, що блокують відображення

Найбільшу просадку за швидкістю дають скрипти, зображення та CSS — саме вони є ресурсами, що блокують відображення сторінки.

Добрий приріст продуктивності дало підключення JS через тег <script> з атрибутами async і defer, коли завантаження скриптів відбувається разом із завантаженням сторінки, а розбір і виконання — після.

Але тут варто розуміти, з яким саме скриптом ми маємо справу. Перед тим як вішати атрибути, перевіряємо три речі:

  • чи самодостатній цей скрипт;
  • чи є в нього залежності від інших скриптів;
  • чи покладається він на повністю розібраний DOM.
Обережно. У випадках, коли скрипт не самодостатній, підключення з атрибутами async і defer викликатиме помилки.

Другий момент — підключення засобами фреймворка

Більшість скриптів підключається методами самого фреймворка: у корпоративних CMS для цього передбачено власну конструкцію. За такого підключення ми отримуємо всі «плюшки» — автоматичне об'єднання скриптів, стиснення й підключення gzip-версії скрипта, якщо відповідні опції увімкнено в адмінпанелі, а сервер налаштовано з можливістю віддавати .gz файли.

Підключаючи скрипти через тег <script>, ми цих переваг позбавляємося. Рішення — CompressionWebpackPlugin: він створить стиснуту gzipped-копію JS-білду поряд з основною. Результат — файли, стиснуті більш ніж утричі.

Порівняння розміру JS-файлів до і після gzip-стиснення білду
Стиснута gzipped-копія JS-білду лежить поряд з основною: файли меншають більш ніж утричі.

Що ще варто зробити з CSS і JS

  • підключати JS і CSS, які використовуються лише на конкретних сторінках, якщо така можливість є;
  • мінімізувати CSS і JS — це обов'язкова умова, а не побажання;
  • за можливості робити відкладене завантаження зовнішніх скриптів.

У сумі асинхронне підключення скриптів додало близько 15 балів у PageSpeed, а мінімізація CSS і JS — ще 12.

Підключення тільки потрібних модулів

Бібліотеки компонентів дозволяють імпортувати окремі компоненти. Замість усієї бібліотеки, з якої ми використовуємо лише кілька форм і кнопок, підключаємо тільки ті компоненти, які нам потрібні.

Це може заощадити до 300 КБ у фінальному білді — вага, яку користувач інакше качав би даремно.

Шрифти

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

  1. Підключення. Шрифти підключаємо через @font-face.
  2. Асинхронне підвантаження. За нього відповідає властивість font-display.
  3. Вибір значення. У font-display є різні значення, але найкращі показники за швидкістю отримуємо з font-display: fallback.

Підключення шрифтів у такий спосіб може дати 15–20 балів.

Зображення

Логічно, що чим менше важить картинка, тим швидше вона завантажується. Google просуває власний формат зображень .webp, тому для зображень на сайті потрібно зробити їхні webp-копії, а підключати в шаблонах через тег <picture>, вказавши всередині два джерела — звичайну картинку й картинку .webp. Новий формат працює в більшості сучасних браузерів, але не в Safari — саме тому друге джерело обов'язкове.

Також можна зробити відкладене завантаження зображень — за допомогою плагіна jQuery Lazy або через IntersectionObserver.

Відкладене завантаження GTM

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

Тож підключення GTM можна виконати через setTimeout, секунди на три, з атрибутами async і defer.

Не самотужки. Такий варіант підключення варто попередньо обговорити з фахівцями з SEO — рішення стосується не лише швидкості.

Скільки балів дав кожен крок

90+
балів зі 100 — межа «зеленої зони»
~15
балів дало асинхронне підключення скриптів
12
балів додала мінімізація CSS і JS
15–20
балів дає правильне підключення шрифтів
300 КБ
економії на імпорті окремих компонентів
×3
стиснення JS-білду gzip-копією

Підсумок на прикладі intertop.ua

Ось як усі перелічені заходи виглядають разом на реальному проєкті.

Показники Google PageSpeed для intertop.ua після оптимізації
Показники Google PageSpeed для intertop.ua після проведених робіт.
Деталізація звіту Google PageSpeed для intertop.ua
Деталізація звіту: швидкість завантаження й момент, коли сторінка стає доступною для взаємодії.

Чек-лист і що далі

ЗахідЩо робимоЩо це дає
CSS і JSasync і defer, мінімізація, посторінкове підключення, gzipped-копія білдублизько 15 балів за асинхронність і ще 12 за мінімізацію
Модуліімпортуємо окремі компоненти замість цілої бібліотекидо 300 КБ економії у фінальному білді
Шрифти@font-face плюс font-display: fallback15–20 балів
Зображенняwebp-копії через <picture> і відкладене завантаженняменша вага сторінки й швидший показ контенту
GTMпідключення через setTimeout з async і deferзнімає просадку від зовнішніх маркетингових скриптів

Головний висновок з цієї історії простий: доганяти показники постфактум завжди дорожче, ніж закласти їх у проєкт одразу.

Тепер ми проводимо оптимізацію під PageSpeed ще на етапі створення сайтів, щоб одразу досягати найкращих показників.Богдан Панасенко / Front-end розробник