Naslov je pomalo lukav — ne postoji jedna univerzalna postavka koja rješava sve. Ali postoji jedna kategorija promjene koja kod velike većine stranica donosi najveći skok performansi za najmanje uloženog truda, a redovito se zanemaruje: agresivno keširanje na rubu mreže (CDN cache).

Zašto baš ovo, a ne slike ili JavaScript

Slike i JavaScript su bitni (o njima smo pisali u tekstu o sporim stranicama), ali njihova optimizacija traži rad na svakom pojedinom resursu. Caching rješava nešto drugo i temeljnije: koliko puta vaš server uopće mora raditi posao da bi poslužio istu stranicu. Bez keša, svaki posjetitelj — čak i za identičnu, nepromijenjenu stranicu — tjera server da iznova sastavi HTML, ode do baze, izvrši logiku. S dobro postavljenim CDN cacheom, prvi posjetitelj plati taj trošak, a sljedećih deset tisuća dobiju gotovu kopiju s poslužitelja fizički najbližeg njima, u milisekundama.

Kako to konkretno izgleda

Ključna postavka je HTTP zaglavlje Cache-Control, koje govori i pregledniku i CDN-u (Cloudflare, Vercel, Fastly i slični) koliko dugo smiju čuvati kopiju stranice prije nego što je ponovno zatraže od servera:

Cache-Control: public, max-age=3600, s-maxage=86400

Za sadržaj koji se ne mijenja često — blog članci, dokumentacija, marketinške stranice — ova jedna linija konfiguracije zna prepoloviti vrijeme učitavanja i, jednako važno, drastično smanjiti opterećenje servera i bazu, jer većina zahtjeva nikad ne stigne do njih.

Najčešća greška: keširanje je "isključeno iz straha"

Ironično, mnogi timovi imaju keširanje ugašeno ili postavljeno na nekoliko sekundi — iz straha da će korisnici vidjeti zastarjeli sadržaj. Taj strah je opravdan samo za dinamični, personalizirani sadržaj (korisnički dashboard, košarica), ne za javni, isti-za-sve sadržaj. Rješenje nije "nema keša", nego dugački keš + mehanizam za trenutno osvježavanje kad se sadržaj stvarno promijeni (on-demand revalidacija/invalidacija), umjesto da se svi posjetitelji kažnjavaju sporošću zbog rijetkih izmjena.

Bonus postavka koja ide uz nju: keširanje statičnih resursa zauvijek

Za datoteke koje se ne mijenjaju kad se jednom objave (slike, fontovi, JS/CSS bundleovi s hashom u nazivu) postavka može biti ekstremna:

Cache-Control: public, max-age=31536000, immutable

Godinu dana keširanja je sigurno jer svaka nova verzija tih datoteka dobiva i novo ime (hash u nazivu), pa nema rizika da korisnik zaglavi sa starom verzijom.

Kako provjeriti radi li vam ovo već

Otvorite Developer alate u pregledniku, karticu Network, učitajte stranicu dvaput. Kod drugog učitavanja resursi bi trebali pokazivati status "from disk cache" ili "from memory cache", ili zaglavlje cf-cache-status: HIT (Cloudflare) odnosno x-vercel-cache: HIT (Vercel). Ako umjesto toga vidite MISS na svakom zahtjevu za identičan sadržaj — tu vam je najjeftiniji dobitak performansi koji ćete ove godine naći.

Zaključak

Optimizacija slika i JavaScripta je nužna, ali radi se resurs po resurs. Dobro keširanje je jedna postavka koja djeluje na cijelu stranicu odjednom, gotovo besplatno, i smanjuje opterećenje servera kao nusprodukt. Ako morate izabrati samo jednu stvar za ubrzati stranicu danas — neka to bude ova.