Optimizacija slika za web — Formati, kompresija, lazy loading

Kompletni vodic: kako smanjiti velicinu slika za 50-80% bez vidljivog gubitka kvaliteta

50%
Prosecna tezina stranice su slike
25-35%
WebP manji od JPEG
50%
AVIF manji od JPEG
97%
Browser podrska za WebP

1. Zasto su slike najveci problem za performanse

Prema HTTP Archive, slike cine prosecno 50% ukupne velicine web stranice. Na mnogim sajtovima to je i vise — e-commerce sa velikim fotografijama proizvoda moze imati 70-80% tezine u slikama.

  • Prosecna web stranica: ~2.5 MB ukupno, od cega ~1.2 MB su slike
  • Neoptimizovana hero slika: 2-5 MB sama — vise od cele stranice
  • LCP uticaj: hero slika je najcesci LCP element — ako je velika, LCP je los
  • Bandwidth: mobilni korisnici na 4G ucitavaju 1MB za ~0.8s. Svaki nepotreban MB = skoro sekunda kasnjenja
Cinjenica: Optimizacija slika je najlaksi i najefektivniji nacin za ubrzavanje sajta. Konverzija u WebP + pravilne dimenzije mogu smanjiti tezinu stranice za 50-70% bez ikakve promene dizajna.

2. Formati: JPEG, PNG, WebP, AVIF

FormatTipTransparentnostAnimacijaKompresijaPodrska
JPEGLossyNeNeDobra100%
PNGLosslessDaNe (APNG da)Slaba100%
WebPObaDaDa25-35% bolja od JPEG97%+
AVIFObaDaDa50% bolja od JPEG93%
GIFLosslessDa (1-bit)DaLosa100%
SVGVektorDaDa (CSS/JS)N/A (tekst)100%

Kada koristiti koji format

  • Fotografije: AVIF > WebP > JPEG. Koristite <picture> sa fallback-om.
  • Ikone, logotipi, ilustracije: SVG (vektorski, beskonacno skalabilan, mali).
  • Transparentne slike: WebP ili AVIF (zamena za PNG). PNG samo kao fallback.
  • Animacije: Video (MP4/WebM) umesto GIF-a. GIF od 5MB = MP4 od 500KB.
  • Screenshot-ovi: WebP lossless ili PNG (ostar tekst).
Preporuka 2026: WebP je bezbedan izbor za sve — 97%+ podrska, odlicna kompresija, transparentnost. AVIF je buducnost ali koristite ga sa <picture> fallback-om dok podrska ne dostigne 97%+.

3. Kompresija: lossy vs lossless

Lossy kompresija

Uklanja podatke koje ljudsko oko tesko primecuje. Svaka konverzija gubi kvalitet — ne kompresujte vec kompresovanu sliku ponovo.

  • JPEG kvalitet 80% — optimalan balans velicine i kvaliteta. 80% je vizuelno identicno 100% za vecinu fotografija.
  • WebP kvalitet 75-80% — ekvivalentan JPEG 85-90% po vizuelnom kvalitetu.
  • AVIF kvalitet 60-70% — ekvivalentan JPEG 85% ali dramaticno manji fajl.

Lossless kompresija

Smanjuje velicinu bez gubitka podataka. Za PNG, alati kao TinyPNG smanjuju velicinu za 40-70% lossless optimizacijom (uklanjanje metapodataka, bolja kompresija).

<!-- Primer velicina za istu fotografiju 1200x630 -->
Original PNG:      2.4 MB  (100%)
PNG optimizovan:   1.1 MB  (46%)
JPEG 80%:          180 KB  (7.5%)
WebP 80%:          130 KB  (5.4%)
AVIF 65%:           85 KB  (3.5%)

4. Responsive images: srcset i sizes

Ne servirajte istu 1200px sliku mobilnom korisniku na 400px ekranu. srcset i sizes dozvoljavaju browseru da izabere optimalnu velicinu.

<img
  src="photo-800.webp"
  srcset="photo-400.webp 400w,
         photo-800.webp 800w,
         photo-1200.webp 1200w,
         photo-1600.webp 1600w"
  sizes="(max-width: 600px) 100vw,
         (max-width: 1000px) 80vw,
         1200px"
  alt="Opis fotografije"
  width="1200" height="630"
  loading="lazy"
>

Kako radi

  • srcset — lista slika sa njihovom sirinom (400w = slika od 400px)
  • sizes — koliko prostora slika zauzima na razlicitim ekranima
  • Browser bira — na osnovu ekrana, DPI-ja i konekcije, browser sam izabere optimalnu sliku
  • src — fallback za stare browsere koji ne podrzavaju srcset
Vazno: Napravite 3-4 velicine svake slike: 400px, 800px, 1200px, 1600px (za Retina). Vise od toga je nepotreban overhead.

5. Art direction: picture element

<picture> element vam daje potpunu kontrolu — razlicit crop, format ili cak potpuno razlicita slika za razlicite ekrane:

<picture>
  <!-- AVIF za browsere koji podrzavaju -->
  <source type="image/avif"
    srcset="photo-400.avif 400w, photo-800.avif 800w, photo-1200.avif 1200w"
    sizes="(max-width:600px) 100vw, 1200px">

  <!-- WebP fallback -->
  <source type="image/webp"
    srcset="photo-400.webp 400w, photo-800.webp 800w, photo-1200.webp 1200w"
    sizes="(max-width:600px) 100vw, 1200px">

  <!-- JPEG za stare browsere -->
  <img src="photo-800.jpg" alt="Opis" width="1200" height="630" loading="lazy">
</picture>

<!-- Art direction: razlicit crop za mobile -->
<picture>
  <source media="(max-width: 600px)" srcset="photo-mobile-crop.webp">
  <source media="(max-width: 1000px)" srcset="photo-tablet.webp">
  <img src="photo-desktop.webp" alt="Opis" width="1200" height="630">
</picture>

6. Lazy loading

Lazy loading odlaze ucitavanje slika dok korisnik ne skroluje do njih. Dramaticno smanjuje inicijalni page load.

Native lazy loading (preporuceno)

<!-- Jednostavno — samo dodajte atribut -->
<img src="photo.webp" alt="Opis" width="800" height="450" loading="lazy">

<!-- Iframe takodje -->
<iframe src="https://youtube.com/embed/..." loading="lazy"></iframe>

Pravila za lazy loading

  • NE stavljajte na hero sliku! Hero/LCP slika mora se ucitati odmah. loading="lazy" bi usporilo LCP.
  • NE stavljajte na above-the-fold slike — slike vidljive bez skrolovanja trebaju loading="eager" (default).
  • Koristite na svim ostalim slikama — galerije, clanci, footer slike.
  • fetchpriority="high" na hero slici za eksplicitno visok prioritet.
<!-- Hero slika — NE lazy, visok prioritet -->
<img src="hero.webp" alt="Hero" width="1200" height="630"
     fetchpriority="high" decoding="async">

<!-- Slike u clanku — lazy -->
<img src="diagram.webp" alt="Dijagram" width="800" height="450" loading="lazy">
<img src="screenshot.webp" alt="Screenshot" width="800" height="450" loading="lazy">
Browser podrska: loading="lazy" podrzava 96%+ modernih browsera (Chrome, Firefox, Safari 15.4+, Edge). Za starije, slike se ucitavaju normalno (graceful degradation).

7. Width i height — sprecavanje CLS

Bez width i height atributa, browser ne zna koliko prostora da rezervise. Kad slika stigne, sadrzaj se pomeri — to je layout shift (CLS). Detaljnije u Core Web Vitals vodicu.

<!-- LOSE — uzrokuje CLS -->
<img src="photo.webp" alt="Opis">

<!-- DOBRO — rezervise prostor, responsive -->
<img src="photo.webp" alt="Opis" width="1200" height="630"
     style="max-width:100%; height:auto;">

<!-- TAKODJE DOBRO — CSS aspect-ratio -->
<img src="photo.webp" alt="Opis" style="aspect-ratio:16/9; width:100%;">
Pravilo: SVAKA <img> na sajtu MORA imati width i height atribute. Ovo je najlaksi nacin za eliminaciju CLS problema.

8. CDN za slike

Image CDN automatski optimizuje, resizuje i konvertuje slike na letu. Ne morate rucno praviti 4 velicine u 3 formata.

ServisBesplatan tierAuto-formatResizeNapomena
Cloudinary25 kredita/mesecDa (f_auto)DaNajpopularniji, odlican API
imgixNe (trial)DaDaEnterprise fokus, brz
Cloudflare ImagesNe ($5/100K)DaDaIntegrisan sa Cloudflare CDN
Bunny Optimizer500 besplatnoDaDaNajjeftiniji za volume
Vercel Image1000/mesecDaDaAutomatski za Next.js
<!-- Cloudinary primer — automatski format i resize -->
<img src="https://res.cloudinary.com/vasnalog/image/upload/w_800,f_auto,q_auto/photo.jpg"
     alt="Opis" width="800" height="450" loading="lazy">

<!-- URL parametri: w_800 = sirina, f_auto = format, q_auto = kvalitet -->

9. Alati za optimizaciju

  • Squoosh — besplatan, radi u browseru. Vizuelno poredjenje pre/posle sa slider-om. Podrzava WebP, AVIF, MozJPEG. Najbolji za pojedinacne slike.
  • TinyPNG/TinyJPG — besplatan za do 20 slika odjednom. Odlican za batch PNG/JPEG optimizaciju. API za automatizaciju.
  • ImageOptim — macOS desktop app. Lossless optimizacija, batch processing, drag-and-drop.
  • Sharp — Node.js biblioteka za programsku konverziju. Najbrzi za build pipeline. sharp('input.jpg').webp({quality:80}).toFile('output.webp')
  • cwebp / avifenc — command-line alati za batch konverziju u WebP/AVIF.
  • Web Security Scanner — proverava da li slike na sajtu imaju alt tekst, lazy loading i optimalne dimenzije.

10. Najcesce greske

  • 4000px slike za 800px kontejner — #1 greska. Koristite srcset sa vise velicina.
  • PNG za fotografije — PNG je za ikone/ilustracije sa transparentnoscu. Za foto: WebP ili JPEG.
  • GIF za animacije — GIF od 5MB = MP4 od 500KB. Koristite <video autoplay loop muted>.
  • Lazy loading na hero slici — usporava LCP. Hero slika mora biti eager + fetchpriority="high".
  • Bez width/height — uzrokuje CLS. SVAKA slika mora imati dimenzije.
  • Bez alt teksta — lose za SEO i pristupacnost. Svaka slika treba opisni alt.
  • Jedan format za sve — koristite <picture> sa AVIF + WebP + JPEG fallback.
  • Re-kompresija — ucitavanje JPEG, editovanje, cuvanje kao JPEG ponovo. Svaka konverzija gubi kvalitet. Cuvajte originale.
  • Inline base64 slike — za sitne ikone OK (<1KB), ali za vece slike base64 je 33% veci od binarnog i ne kesira se zasebno.

11. Reference i resursi

Proverite optimizaciju slika na vasem sajtu →

Image Optimization for Web — Formats, Compression, Lazy Loading

Complete guide: how to reduce image size by 50-80% without visible quality loss

50%
Average page weight is images
25-35%
WebP smaller than JPEG
50%
AVIF smaller than JPEG
97%
Browser support for WebP

1. Why images are the biggest performance problem

According to HTTP Archive, images make up ~50% of total page weight. An unoptimized hero image alone (2-5MB) can be larger than the entire page should be.

Fact: Image optimization is the easiest and most effective way to speed up a site. Converting to WebP + proper dimensions can reduce page weight by 50-70% without any design changes.

2. Formats: JPEG, PNG, WebP, AVIF

FormatTypeTransparencyCompressionSupport
JPEGLossyNoGood100%
PNGLosslessYesPoor100%
WebPBothYes25-35% better than JPEG97%+
AVIFBothYes50% better than JPEG93%

Photos: AVIF > WebP > JPEG. Icons/logos: SVG. Transparency: WebP/AVIF. Animation: Video (MP4) not GIF.

2026 recommendation: WebP is the safe choice — 97%+ support, great compression, transparency. AVIF is the future but use with <picture> fallback.

3. Compression: lossy vs lossless

Lossy: JPEG 80% quality is visually identical to 100% for most photos. WebP 75-80% = JPEG 85-90%. AVIF 60-70% = JPEG 85%.

Lossless: TinyPNG reduces PNG by 40-70% without quality loss (removes metadata, better compression).

<!-- Same 1200x630 photo, different formats -->
PNG original:    2.4 MB (100%)
PNG optimized:   1.1 MB (46%)
JPEG 80%:        180 KB (7.5%)
WebP 80%:        130 KB (5.4%)
AVIF 65%:         85 KB (3.5%)

4. Responsive images: srcset and sizes

Don't serve 1200px images to 400px mobile screens.

<img src="photo-800.webp"
  srcset="photo-400.webp 400w, photo-800.webp 800w, photo-1200.webp 1200w"
  sizes="(max-width:600px) 100vw, (max-width:1000px) 80vw, 1200px"
  alt="Description" width="1200" height="630" loading="lazy">

srcset = list of images with widths. sizes = how much space the image takes. Browser picks the optimal size.

5. Art direction: picture element

<picture> gives full control — different crop, format, or image per screen size. Use for format fallback (AVIF → WebP → JPEG) and mobile-specific crops.

6. Lazy loading

<!-- Simply add the attribute -->
<img src="photo.webp" alt="Desc" width="800" height="450" loading="lazy">
  • DO NOT lazy load the hero/LCP image — it must load immediately
  • Use fetchpriority="high" on hero image
  • Lazy load everything below the fold
  • 96%+ browser support, graceful degradation

7. Width and height — CLS prevention

Without width and height, browser doesn't know how much space to reserve → layout shift when image loads → bad CLS. More in our Core Web Vitals guide.

Rule: EVERY <img> MUST have width and height attributes. Easiest CLS fix.

8. Image CDN

ServiceFree tierAuto-formatResize
Cloudinary25 credits/moYes (f_auto)Yes
Cloudflare ImagesNo ($5/100K)YesYes
Bunny Optimizer500 freeYesYes
Vercel Image1000/moYesYes

9. Optimization tools

  • Squoosh — free, browser-based, visual before/after comparison
  • TinyPNG — free batch optimization (20 images)
  • Sharp — Node.js library for build pipeline
  • cwebp / avifenc — CLI tools for batch conversion
  • Web Security Scanner — checks alt text, lazy loading, image optimization

10. Common mistakes

  • 4000px images for 800px containers — use srcset with multiple sizes
  • PNG for photos — PNG is for icons/illustrations. Use WebP/JPEG for photos.
  • GIF for animations — 5MB GIF = 500KB MP4. Use <video autoplay loop muted>.
  • Lazy loading hero image — slows LCP. Hero must be eager + fetchpriority="high".
  • Missing width/height — causes CLS.
  • Missing alt text — bad for SEO and accessibility.
  • Re-compression — each JPEG save loses quality. Keep originals.

11. References and resources

Check your image optimization →