100 bodů v PageSpeed: Co jsme pro to změnili

Doba načtení je faktorem hodnocení, ale obvyklé rady málokdy pomohou. Tento článek popisuje, co jsme na vlastní stránce skutečně změnili, které opatření kolik přineslo a kde jsme odbočili špatně.

Zářící tvar zrychluje doprava, za ním se rozpouštějí tmavé bloky

To nejdůležitější

  • Největší jednotlivý zisk nepřišel ze zmenšování souborů, ale z nahrazení knihovny o velikosti 458 KB šesti kilobajty vlastního kódu.
  • Druhou největší příčinou byla napůl nastavená komprese: server komprimoval jen HTML, ne CSS a JavaScript.
  • Posun rozvržení s hodnotou 1 stál 24 bodů – způsobilo ho dodatečně načítané CSS, které se uplatnilo až po prvním vykreslení.
  • Co přineslo nejméně: formáty obrázků. Co přineslo nejvíc: vynechávání věcí.

Výchozí hodnota byla 58 ze 100 na mobilu. Není to špatná hodnota pro web s 3D efektem v záhlaví, ale hodnota, kterou Google v mobilním vyhledávání znatelně trestá. Nakonec stálo 100 bodů na desktopu a 98 na mobilu, při rovněž 100 za přístupnost.

Co následuje, není obecný kontrolní seznam, ale skutečný průběh – včetně míst, kde jsme se zmýlili.

Zářící tvar zrychluje doprava, za ním se rozpouštějí tmavé bloky
Rychlou se stránka nestane optimalizací, ale vynecháváním.

Výchozí stav

Naměřená hodnota (mobil)předpo
Výkon5898
Přístupnost95100
První vykreslení6,1 s1,4 s
Největší prvek viditelný11,1 s2,1 s
Přeneseno celkem298 KB184 KB
z toho JavaScript121 KB5 KB

Pět zásahů, které skutečně rozhodly

1. Knihovnu nahradit, ne optimalizovat

Záhlaví ukazuje oblak částic v 3D. K tomu běžela známá grafická knihovna – 458 KB po zmenšení. Měření ukázalo, že 51 KB z toho se nikdy vůbec nespustilo.

Rozhodujícím pohledem byla otázka, kolik toho skutečně potřebujeme. Bylo to jedenáct stavebních prvků: renderer, scéna, kamera, geometrie, materiál a pár pomocných tříd. Všechno z toho se dá naprogramovat přímo proti grafickému rozhraní prohlížeče.

Výsledek: ze 458 KB se stalo 6 KB. Zobrazení je totožné – převzali jsme tytéž shadery.

Pozor Dvě věci je přitom nutné napodobit, jinak výsledek vypadá špatně: knihovna přepočítává barvy z formátu hex na lineární světlo a mísí aditivně s předvynásobenou alfou. Bez obojího působil náš oblak částic výrazně křiklavěji než dřív.

2. Komprese byla zapnutá jen napůl

V konfiguraci serveru stála komprese na «zapnuto» – ale řádek s tím, které typy souborů se mají komprimovat, byl zakomentovaný. To je výchozí nastavení mnoha distribucí. Výsledek: komprimovalo se výhradně HTML.

Grafická knihovna tedy šla po lince nekomprimovaná. Po zapnutí: z 1243 KB se stalo 251 KB. Komprimované verze navíc nyní ukládáme předpočítané vedle, aby server nepočítal znovu při každém vyžádání.

Námaha: dva řádky konfigurace. Účinek: necelý megabajt při prvním načtení.

3. Animační knihovnu odstranit úplně

Pro prolínání při rolování běžela další knihovna, 114 KB. Měření ji navíc označilo za původkyni vynucených přepočtů rozvržení – během rolování se dotazovala na geometrii a nutila prohlížeč přepočítat rozvržení uprostřed pohybu.

Nahrazeno IntersectionObserver, který pouze nastaví třídu. Vlastní pohyb dělá CSS. O 114 KB méně, žádné přepočty, zhruba 40 řádků vlastního kódu.

4. Favicon měl 205 KB

Maličkost s překvapivým účinkem, protože se načítá velmi brzy. Nahrazena souborem SVG o 6 KB, vytvořeným ze stávajícího loga.

Věděli jste, že…?

Pro zobrazení ve výsledcích vyhledávání Google je favicon ve formátu SVG k ničemu – Google tam přijímá jen rastrové formáty a obrázek musí být čtvercový s délkou hrany, která je násobkem 48 pixelů.

Kdo tedy uloží jen SVG, dostane ve výsledku vyhledávání šedý zástupný symbol místo vlastního loga. Správná cesta je uvést obojí vedle sebe.

5. Dotazovat se na geometrii v animačním snímku

Jeden skript při každé události rolování četl celkovou výšku dokumentu. Tuto vlastnost prohlížeč nemůže zodpovědět z paměti – musí kvůli ní přepočítat rozvržení celé stránky, uprostřed rolování.

Pravidlo, které z toho plyne a které platí všude: v události číst, v následujícím snímku zapisovat. Nikdy naopak. Od té doby se výška stránky změří jednou a zapamatuje, místo aby se zjišťovala šedesátkrát za sekundu znovu.

Chyba, která stála 24 bodů

Vlevo hustý stoh šedých bloků, směrem doprava zbývá jen pár zářících
O době načtení rozhoduje to, co zbude – ne to, jak dobře je zbytek zkomprimovaný.
Z praxe

Abychom se zbavili posledního blokujícího požadavku, rozdělili jsme stylopis: část potřebnou pro viditelnou oblast jsme vložili přímo do dokumentu, zbytek se donačítal. Běžný postup.

Řez ležel u značky ve zdrojovém souboru, za kterou jsme viditelnou oblast tušili. Ve skutečnosti za ní stála pravidla pro logo v záhlaví, pro odstupy pod ním a pro prolínání. Stránka se tedy vykreslila bez nich a o sekundu později se poskládala do správné podoby.

Výsledek: Cumulative Layout Shift 1,0 – a tím 76 místo 100 bodů na desktopu. Obzvlášť nepříjemné: lokálně s přibrzděnou linkou byla hodnota 0, protože stylopis tam dorazil dost brzy. Chyba byla vidět jen na rychlém spojení.

Ponaučení: buď celý stylopis do dokumentu, nebo žádný. Částečné vložení předpokládá, že přesně víte, které pravidlo je ve viditelné oblasti potřeba – a to u rostoucí stránky nikdy trvale nevíte.

Tip Při podezření na posuny rozvržení měřte bez brzdy. Kontrolní nástroj se simulovaným mobilním připojením dodá soubor dost brzy a posun neukáže. Kdo měří jen takhle, považuje problém za vyřešený.

Co přineslo málo

Pro úplnost opatření, která stojí v každém návodu a u nás byla sotva měřitelná:

Formáty obrázků. Naše úvodní stránka má obrázků málo – logo je soubor SVG. Kde se obrázky vyskytují, se převod samozřejmě vyplatí; jako hlavní páka slouží jen u stránek bohatých na obrázky.

Další zmenšování písem. Dvě rodiny písem hostujeme sami a ty potřebné ve viditelné oblasti přednačítáme. Další optimalizace by byla možná, hodnotou ale nepohne.

Umístění serveru. Často doporučované, v našem případě nepodstatné: doba do prvního bajtu byla už na 20 milisekundách. Kdo je tam už dobře, distribuční sítí nic nezíská.

Postup k napodobení

  1. Měřit dřív, než se cokoli změní. Mobil a desktop odděleně, hodnoty si zapsat.
  2. Najít největší přenášený soubor. Téměř vždy je to JavaScript. Otázkou není, jak ho zmenšit, ale jestli ho potřebujete.
  3. Zkontrolovat kompresi. Ne jestli je zapnutá, ale pro které typy souborů.
  4. Spočítat blokující požadavky. Každý soubor stylopisu v záhlaví zdržuje první vykreslení.
  5. Prověřit posuny rozvržení bez brzdy. Ten jediný test, který nám chyběl.
  6. Po každé změně měřit znovu. Jinak na konci nevíte, co zabralo.
Prompt
Pomoz mi převést zprávu PageSpeed mé stránky do pořadí
podle důležitosti. Buď přísný; nechval nic.

Moje naměřené hodnoty:
- Mobil: [počet bodů], Desktop: [počet bodů]
- LCP, TBT, CLS pro každé zařízení: [hodnoty]
- Největší přenášené soubory s velikostí: [seznam]
- Požadavky blokující vykreslení: [seznam]
- Hlášení ze zprávy: [vložit text]

Ke stránce:
- Jak je postavená: [CMS / statická / stavebnice]
- Je JavaScript potřeba pro viditelný obsah? [ano/ne]
- Jak se doručuje CSS? [externě / předem / částečně předem]

Úkoly:
1. Přiřaď každé hlášení k příčině a řekni, kterou metriku
   ovlivňuje – LCP, TBT nebo CLS.
2. Seřaď opatření podle účinku na jednotku námahy. U každého
   uveď, kolik bodů reálně pohne a proč.
3. Uveď opatření ze zprávy, která u mého typu stavby
   prakticky nic nepřinesou – a zdůvodni to, místo abys je
   prostě vynechal.
4. U každého velkého souboru JavaScriptu se nejdřív zeptej,
   jestli je potřeba, než navrhneš zmenšování.
5. Upozorni, pokud se CSS doručuje předem jen částečně,
   a vysvětli, proč to pro CLS může být horší
   než vůbec.
6. Uveď, co bych měl po každé změně změřit znovu.

Nevymýšlej si naměřené hodnoty.

Závěr

Počet bodů sám o sobě není cílem – je to naměřená hodnota, ne obchodní výsledek. Co se počítá, je zkušenost za tím: stránku, která je čitelná po 1,4 sekundy, si přečte víc lidí než tu, která potřebuje šest sekund. U mobilních návštěvníků přes mobilní síť je ten rozdíl větší než jakákoli optimalizace textu.

Cesta k tomu vedla v našem případě přes jedinou opakující se otázku: potřebujeme to? Pět ze šesti zásahů spočívalo v tom něco odstranit, ne něco přidat.

Časté otázky

Jak se dosáhne 100 bodů v PageSpeed Insights?

U většiny webů třemi kroky: odstranit nebo nahradit největší soubor JavaScriptu, skutečně zapnout kompresi pro CSS a JavaScript a odstranit posuny rozvržení. Formáty obrázků a umístění serveru jsou úzkým hrdlem zřídka.

Jak důležitá je doba načtení pro hodnocení v Google?

Je to potvrzený faktor, ale ne silný – obsah a relevance váží víc. Větší efekt je nepřímý: pomalé stránky lidé častěji opustí, a toto chování se do hodnocení promítá.

Co je Cumulative Layout Shift a jak se odstraňuje?

Metrika pro prvky, které po prvním vykreslení mění svou polohu. Nejčastější příčiny: obrázky bez pevných rozměrů, dodatečně načítané stylopisy a písma s výrazně odlišnými metrikami. Odstraní se tím, že místo je dané předem – přes údaje o šířce a výšce nebo pevný poměr stran.

Má se CSS vkládat do HTML?

U malých stylopisů ano, ale pak celé. Částečné vložení s donačtením zbytku ušetří jeden požadavek a vykoupí to posuny rozvržení, jakmile chybí pravidlo z viditelné oblasti. U nás to bylo 7 KB zabalených – pro takový objem se úplné vložení vyplatí.

Kolik přinese vzdání se knihoven?

V našem případě největší jednotlivou položku: ze 458 KB grafické knihovny se stalo 6 KB vlastního kódu, k tomu 114 KB animační knihovny na nulu. Jestli se to vyplatí, závisí na tom, jak velkou část knihovny skutečně využíváte – měření ukazuje nevyužitý JavaScript.

Marketing, který se nastaví sám

Beta verze Studio Engine je otevřená. Zarezervujte si místo a podílejte se od začátku.

Zapojit se do bety →
← Zpět na přehled