Výkon· čtení na 8 min

Soubor SVG je příliš velký? 8 tipů na kompresi a optimalizaci

Je váš SVG příliš velký? 8 optimalizačních technik: méně kotev, sloučené cesty, bez metadat, nižší přesnost, komprese SVGO, znovupoužití symbolů, méně vrstev a gzip.

SVG, který váží stovky kB nebo i několik MB, bývá důsledkem příliš mnoha kotev, nadbytečných cest, metadat z editoru a zbytečně vysoké přesnosti desetinných míst. Níže uvedených 8 tipů je seřazeno podle pořadí „od zdroje po předání“ a všechny se dají reálně použít.

1. Úroveň cest: méně kotev, slučení cest

Tip 1: omezte počet kotev (zjednodušte cesty)

Čím více kotev má cesta, tím větší je soubor a tím pomalejší vykreslování. Při převodu mírně zvyšte vyhlazení a omezte kotev už ve zdroji; u existujícího SVG použijte v Illustratoru „Objekt → Cesta → Zjednodušit“ nebo v Inkscape „Cesta → Zjednodušit“ (Ctrl+L) a odstraňte nadbytečné kotvy. Úpravou vyhlazení a počtu barev v konverzním nástroji PolySVG můžete v reálném čase vážit kvalitu proti objemu souboru.

Tip 2: slučujte cesty a vrstvy

Slučte více cest se stejnou výplní do jedné, abyste odstranili opakující se atributy, zplošťte bezúčelné vnoření skupin a odstraňte skryté vrstvy i prázdné prvky. V grafických programech k tomu slouží funkce sjednocení v nástroji cest nebo sloučení vrstev před exportem.

2. Obsah souboru: odstraňte metadata, snižte přesnost

Tip 3: odstraňte metadata z editoru

SVG exportované z Illustratoru nebo Inkscape často obsahuje jmenné prostory editoru, <metadata>, komentáře a nastavení exportu, které vykreslování neovlivňují, takže je lze odstranit ručně nebo nechat uklízit SVGO. Zachovejte ale <title> a <desc> — pomáhají přístupnosti.

Tip 4: snižte přesnost desetinných míst

Souřadnice cest mívají šest až osm desetinných míst, zatímco pro vykreslení na obrazovce stačí jedno až dvě. Když v konfiguraci SVGO nastavíte přesnost čísel (floatPrecision) na 1–2, soubor se viditelně zmenší bez jakéhokoli rozdílu. U velmi malých ikon pozor, abyste souřadnice nestlačili příliš a grafika se nedeformovala.

3. Automatizace: komprese jedním příkazem se SVGO

Tip 5: optimalizujte automaticky pomocí SVGO

SVGO je de facto standardní nástroj pro optimalizaci SVG a má zabudovaných desítky pluginů: odstraňování komentářů a metadat, slučování cest, optimalizaci příkazů cest a uklízění čísel. Základní použití:

npx svgo input.svg -o output.svg

Běžné soubory se zmenší o 30–70 %. Na dvě věci pozor: neodstraňujte atribut viewBox, jinak se rozbije škálování; a u ikon, které chcete přebarvovat přes CSS, ponechte barvu děděnou, nikoli zapsanou napevno.

Porovnejte velikost souboru a skutečnou přenášenou velikost v nástrojích pro vývojáře v prohlížeči před optimalizací a po ní, abyste si potvrdili přínos; měňte vždy jen jeden druh parametrů, takže případný problém snadno lokalizujete.

4. Struktura a znovupoužití: symboly a počet vrstev

Tip 6: opakované tvary znovupoužívejte pomocí defs a use

Když se na stránce opakuje stejná ikona, definujte ji jednou pomocí <defs> a odkazujte na ni vícekrát pomocí <use>, nebo sestavte SVG sprite sheet — objem souboru i počet požadavků klesnou společně.

Tip 7: hlídejte počet barevných vrstev a vyhněte se vloženým bitmapám

Při vektorizaci snižte počet barev, abyste omezili počet vrstev, a všude, kde to jde, použijte jednobarevný výplň místo složitého přechodu. Především se vyhněte vkládání bitmap v base64 do SVG — tím by se vektorový soubor změnil v nosič bitmap a objem by vystřelil. Zbylé nečisté cesty po převodu lze kliknutím odstranit v online editoru.

5. Předání: komprese při přenosu a mezipaměť

Tip 8: zapněte gzip/Brotli a nastavte mezipaměť

SVG je text, takže zapnutí gzip nebo Brotli na serveru obvykle zkrátí přenášený objem ještě o 60–80 %; statickým souborům SVG přidělte dlouhé hlavičky mezipaměti. Velmi malé ikony lze vložit přímo do HTML, čímž ušetříte požadavek. Princip je popsán v výhodách SVG; chcete-li objem řídit už ve fázi převodu, přečtěte způsoby převodu obrázku na SVG.

Pořadí je důležité: nejprve omezte kotev a počet vrstev ve zdroji, pak uklízte metadata a přesnost v souboru, následně spusťte SVGO a nakonec zapněte kompresi při přenosu. Při všech čtyřech vrstvách se objem SVG běžně zmenší o řád.

Časté dotazy

Změní komprese přes SVGO vzhled grafiky?

Při výchozím nastavení je vizuální rozdíl zanedbatelný. Zachovejte viewBox, u malých ikon nesnižujte příliš přesnost souřadnic a v případě potřeby vypínejte agresivní pluginy postupně.

Jak moc lze SVG obvykle zkomprimovat?

Záleží na redundanci, běžně se objem zmenší o 30–70 %; po přidání gzip nebo Brotli na serveru se přenášená velikost sníží ještě o 60–80 %.

Vyzkoušejte hned

Máte hotovo? Procvičte si to s bezplatnými nástroji PolySVG:

Čtěte dál