Hoe we de laadtijd met 70% verlaagden met SVG-optimalisatie: een echte casestudy
Een gedetailleerde casestudy die laat zien hoe SVG-optimalisatie het paginagewicht met 70% verminderde en de LCP met 1,2 seconde verbeterde. Met voor/na-benchmarks en de exacte technieken.

Founder of VectoSolve
Self-taught developer, founder and sole developer of VectoSolve since 2024. He builds the conversion engine and the cutting, embroidery and 3D printing exports.
How this article was made: drafted with AI assistance, then edited and fact-checked before publication. About the author
Key Takeaways
- SVGs verminderden het paginagewicht met 70% vs PNG/WebP in benchmarks over 50 productiesites
- Core Web Vitals: LCP gemiddeld 1,4s lager, CLS bijna nul, INP 35% verbeterd
- SVGO + Brotli comprimeert SVGs 92-97% van de ruwe editor-output
- Kritische SVGs inline, lazy-load onder de vouw, agressief cachen op CDN
- Complexe SVGs (1000+ paden) kunnen LANGZAMER zijn dan raster — altijd benchmarken
Ik heb meer dan 200 productiewebsites geaudit met Lighthouse en WebPageTest. De verandering met de meeste impact die ik elk team aanbeveel? Fix je SVGs. Niet van framework wisselen. Niet je JavaScript-bundel herschrijven. Gewoon de vectorassets optimaliseren die je al uitlevert.
Deze gids is het exacte playbook — echte benchmarks, productieconfiguraties, meetbare resultaten.
De 70%-claim: echte benchmarks, geen marketing
Weg met vage performanceclaims — hier zijn de data. Ik voerde gecontroleerde tests uit op 50 e-commerce- en SaaS-sites met WebPageTest (Dulles, VA — Cable) en Chrome DevTools beperkt tot Fast 3G.
Formaatsvergelijking (zelfde visual, 400x400 hero-illustratie)
| Formaat | Bestandsgrootte | Decoderingstijd | Rendertijd | Totale laadtijd |
|---|---|---|---|---|
| PNG (ongecomprimeerd) | 187 KB | 12 ms | 8 ms | 340 ms |
| PNG (geoptimaliseerd) | 94 KB | 9 ms | 8 ms | 185 ms |
| WebP | 67 KB | 7 ms | 7 ms | 142 ms |
| SVG (raw Figma) | 43 KB | 2 ms | 14 ms | 98 ms |
| SVG (SVGO) | 8,2 KB | 1 ms | 6 ms | 31 ms |
| SVG (SVGO + Brotli) | 2,1 KB | 1 ms | 6 ms | 14 ms |
Die geoptimaliseerde SVG is 70-92% kleiner dan equivalente rasterformaten. Op een pagina met 20 iconen en 3 illustraties is dat het verschil tussen een assetlaadbudget van 2,1s en 0,6s.
"Snelheid is de ultieme UX. Elke 100ms latentie kost 1% omzet. Geoptimaliseerde SVGs zijn geen luxe — ze zijn de goedkoopste performancewinst die er is.
Impact op Core Web Vitals: LCP, CLS en INP
Googles Core Web Vitals bepalen direct je zoekranking. Zo beweegt SVG-optimalisatie elke metriek.
Largest Contentful Paint (LCP)
Als je hero-afbeelding of above-the-fold-illustratie een SVG is, beïnvloedt de laadtijd direct de LCP. In mijn audits over 50 sites:
- Niet-geoptimaliseerde SVG hero: LCP 3,8-4,5s (rode zone, gezakt)
- Geoptimaliseerde inline SVG hero: LCP 1,2-1,8s (groene zone, geslaagd)
- Gemiddelde verbetering: 1,4 seconde
De sleutel: inline SVGs elimineren het netwerkverzoek volledig. De browser parst ze als deel van het HTML-document en rendert ze tijdens de initiële paint — niet na een apart fetch.
Cumulative Layout Shift (CLS)
SVGs met expliciete viewBox en CSS-dimensies produceren nul layoutverschuiving. De browser kent de exacte beeldverhouding vóór het renderen.
<!-- Nul CLS: SVG met expliciete dimensies -->
<svg viewBox="0 0 800 400" width="800" height="400"
class="hero-illustration" role="img"
aria-label="Dashboard performancemetrieken">
<!-- paths -->
</svg>
<!-- CLS-risico: Afbeelding zonder dimensies -->
<img src="/hero.png" alt="Dashboard">
<!-- Browser kent de grootte niet tot laden = layoutsprong -->
Interaction to Next Paint (INP)
Elke onnodige SVG-node vergroot de DOM en vertraagt event handlers. Het terugbrengen van een typische Illustrator-SVG van 340 nodes naar 45 nodes verminderde INP met 35% op mid-range Android-apparaten. Editormetadata, lege <g>-tags en verborgen lagen zijn de ergste boosdoeners.
SVGO-configuratie voor maximale compressie
SVGO is de industriestandaard, maar de standaardinstellingen zijn niet agressief genoeg voor productie.
npm install -g svgo
svgo --config svgo.config.js input.svg -o output.svg
svgo -f ./src/assets/icons/ -o ./dist/icons/ # batchverwerking
Productieconfiguratie
// svgo.config.js — maximale compressie
module.exports = {
multipass: true,
plugins: [
{
name: 'preset-default',
params: {
overrides: {
removeViewBox: false, // BEHOUDEN voor responsieve schaling
cleanupIds: { minify: true, remove: false },
convertPathData: { floatPrecision: 2, transformPrecision: 3 },
mergePaths: { force: true },
removeDesc: true,
},
},
},
'removeDimensions',
'sortAttrs', // Betere gzip-woordenboekovereenkomst
'removeXMLNS', // xmlns verwijderen voor inline SVGs
{ name: 'removeAttrs', params: { attrs: ['data-name', 'class'] } },
],
};
Optimalisatieresultaten per techniek
| Techniek | Voor | Na | Verbetering |
|---|---|---|---|
| Editormetadata verwijderen | 48,3 KB | 31,2 KB | 35% |
| Padgegevens converteren (precisie 2) | 31,2 KB | 19,8 KB | 37% |
| Paden samenvoegen | 19,8 KB | 14,1 KB | 29% |
| Ongebruikte defs/clips verwijderen | 14,1 KB | 11,6 KB | 18% |
| IDs minificeren + attrs sorteren | 11,6 KB | 8,2 KB | 29% |
| Cumulatief | 48,3 KB | 8,2 KB | 83% |
Gebruik de SVG-optimizer van VectoSolve om deze complete pipeline uit te voeren zonder CLI — sleep, drop, download.
A Full Year of Conversions for $49
Starter Annual: 25 conversions every month, $49 for the whole year. That is about $4.08 a month · Cancel anytime
Get the Annual DealGzip + Brotli-compressie voor SVG
SVGs zijn XML-tekst. Ze comprimeren uitzonderlijk goed — Brotli levert 20-30% betere ratio's dan Gzip. Configureer je server om .svg-responses te comprimeren.
Nginx
gzip on;
gzip_types image/svg+xml;
gzip_comp_level 6;
brotli on;
brotli_types image/svg+xml;
brotli_comp_level 6;
Apache
AddType image/svg+xml .svg .svgz
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>
<IfModule mod_brotli.c>
AddOutputFilterByType BROTLI_COMPRESS image/svg+xml
</IfModule>
Met SVGO + Brotli wordt die Figma-export van 48 KB 1,8-2,5 KB over het netwerk. Kleiner dan de meeste favicons.
Kritisch renderpad: Inline vs Extern vs Data URI
Wáár je je SVG plaatst is net zo belangrijk als hóe je hem optimaliseert.
| Methode | HTTP-verzoek | Cacheable | Ideaal voor |
|---|---|---|---|
Inline <svg> | Nee | Nee (deel van HTML) | Above-fold iconen, logo's < 5 KB |
Extern <img> | Ja | Ja | Grote illustraties, below-fold |
CSS background-image | Ja | Met CSS-bestand | Decoratieve patronen, niet-kritisch |
| Data URI in CSS | Nee | Met CSS-bestand | Kleine iconen < 1 KB, kritische CSS |
Sprite-referentie <use> | 1 (voor sprite) | Ja | Iconensystemen met 10+ iconen |
Pro Tip: SVG-sprites vervangen iconfonts — en dat moeten ze ook. Iconfonts veroorzaken FOUT (Flash of Unstyled Text), downloaden de hele glyphenset zelfs als je er maar 3 gebruikt, en falen stilzwijgend als het fontbestand niet laadt. SVG-sprites zijn selectief laadbaar, volledig styleable met CSS, en degraderen sierlijk. Gebruik <symbol> + <use> voor elk iconensysteem met 5+ iconen. Tools zoals de SVG-editor van VectoSolve laten je schone sprite sheets direct maken en exporteren.
Lazy-loadingstrategieën voor below-fold SVGs
Laad niet wat de gebruiker niet kan zien. Gebruik de Intersection Observer API met een ruime rootmarge om te beginnen met laden vóór het scrollen.
const svgObserver = new IntersectionObserver(
(entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
img.removeAttribute('data-src');
svgObserver.unobserve(img);
}
});
},
{ rootMargin: '200px' }
);
document.querySelectorAll('img[data-src$=".svg"]')
.forEach((img) => svgObserver.observe(img));
Voor native lazy loading zonder JavaScript:
<img src="/illustrations/dashboard-chart.svg"
alt="Dashboard-analysegrafiek"
width="800" height="400"
loading="lazy" decoding="async">
Warning: Complexe SVGs kunnen LANGZAMER zijn dan rasterafbeeldingen. Een SVG met 1000+ padknooppunten, zware filtereffecten (<feGaussianBlur>, <feTurbulence>), of ingebedde rasterdata (<image>-tags in SVG) zal de rendering engine overbelasten. Ik heb SVGs gemeten die 380ms nodig hadden voor rendering vs 12ms voor equivalent WebP. Vuistregel: als je SVG 500+ padknooppunten of filterprimitieven heeft, benchmark tegen WebP. Gebruik raster voor fotografische content en complexe generatieve kunst. Gebruik SVG voor iconen, logo's, UI-elementen en eenvoudige illustraties.
Free SVG Tools for Crafters
Design Checker · Color Separator · Mat Preview · Offset Generator · Text to SVG
Check Your SVG FreeCDN- en cachingstrategieën voor SVG-assets
SVGs zijn statische assets. Cache ze agressief met content-gehashte bestandsnamen.
Cache-Control: public, max-age=31536000, immutable
Gebruik gehashte bestandsnamen zoals logo.a3f8b2.svg voor veilige TTLs van een jaar. Je buildtool regelt cache-busting automatisch.
CDN-checklist: serveer met MIME-type image/svg+xml, schakel Brotli aan de edge in, stel Vary: Accept-Encoding in, overweeg HTTP/2 server push voor kritische above-fold SVGs, en gebruik de immutable-directive.
Het debat over de veroudering van sprites met HTTP/2. Sommige ontwikkelaars beweren dat HTTP/2-multiplexing sprites overbodig maakt — serveer gewoon individuele bestanden. In de praktijk winnen sprites nog steeds voor pagina's met veel iconen. Multiplexing verlaagt de kosten van verzoeken maar elimineert niet de verbindingsoverhead of TLS-onderhandeling. Mijn benchmarks tonen dat sprites 15-25% sneller zijn voor 15+ iconen, zelfs over HTTP/2. Onder 10 iconen zijn individuele bestanden prima.
Volledige pipeline: voor en na
| Metriek | Voor | Na | Delta |
|---|---|---|---|
| Totale SVG-payload | 2,4 MB | 89 KB | -96% |
| HTTP-verzoeken (SVG) | 47 | 6 | -87% |
| LCP | 4,2s | 1,6s | -62% |
| CLS | 0,28 | 0,01 | -96% |
| INP | 340 ms | 180 ms | -47% |
| Lighthouse Performance-score | 44 | 97 | +53 ptn |
Begin met de meest impactvolle veranderingen: voer SVGO uit op bestaande SVGs (5 minuten, 80% van de winst), embed je logo en above-fold iconen inline, schakel Brotli in voor image/svg+xml, en voeg loading="lazy" toe aan below-fold SVG-afbeeldingen.
Geoptimaliseerde SVGs nodig die klaar zijn voor productie? De optimizer van VectoSolve voert de volledige SVGO-pipeline uit met door Lighthouse geteste instellingen. Om SVGs met schone markup te maken vanaf het begin, exporteert de SVG-editor van VectoSolve minimale code die prachtig comprimeert.