Što je cache i razlozi za implementaciju

Što je cache?

Što je cache ili predmemorija? Cache sadržaja je softver ili uređaj dizajniran da bude implementiran ispred poslužitelja. Posao predmemorije je presretati određene zahtjeve i odgovarati u ime aplikacije ili web stranice, čime se smanjuje broj zahtjeva poslanih na pozadinske servere ili procese.

Uobičajeno je da su presretnuti zahtjevi već viđeni, pa će predmemorija pohraniti odgovore na te zahtjeve. Ako presretne sličan ili isti zahtjev ponovno, može odgovoriti na isti način i prikazati informaciju koju ima spremljenu. Tako ne treba šlati novi zahtjev na pozadinsku bazu. Kada se implementira predmemoriranje na strani poslužitelja, prvi posjetitelj web stranice nakon isteka predmemorije zatražit će sadržaj od izvornog poslužitelja koji se zatim poslužuje predmemorijom i posjetiteljem. Svi sljedeći posjetitelji biti će posluženi iz predmemoriranog sadržaja izravno. Što više sadržaja na web stranici koja je predmemorirana, to će vrijeme učitavanja stranice biti brže.  Jednostavan primjer bila bi predmemorija slika na web stranici. Klijent (tj. Preglednik) će pitati web poslužitelj za sliku na stranici. Kada se neka slika zatraži prvi put, predmemorija će je morati preuzeti s web servera, no za sljedeće zahtjeve te iste slike jednostavno će je poslužiti izravno.

Ideja je da će web poslužitelj imati puno manje posla jer predmemorija može poslužiti velik dio sadržaja vrlo brzo.

Čemu služi cache?

Primarna svrha cache-a je da ubrza učitavanje web stranice, što je uglavnom bitno korisnicima i posjetiteljima stranice. Iako je vidljiv rezultat brže učitavanje i prikazivanje u stvari je najveći benefit smanjenje latencije i smanjenje prometa prema serveru.

Latencija se smanjuje jer se zahtjev izvršava iz cachea, koji je „bliži“ klijentu nego baza iz koje dolaze podaci i time je potrebno manje vremena da se učita. Ne ponavlja se zahtjev u bazu, ne opterećuje se dodatno procesor, a web stranica izgleda brža. Istovremeno se smanjuje i prometno opterećenje jer se koristi ista reprezentacija podataka iz cachea za više posjetitelja koji traže istu informaciju.

Ukratko, koristi od predmemorije bi bile

  1. Smanjuje opterećenje web  poslužitelja – omogućuje određene uštede na troškovima  poslužitelja i licenciranja.
  2. Smanjuje opterećenje posredničkog softvera i podržanih DB sustava.
  3. Poslužuje sadržaj brže – predmemorije mogu biti vrlo brze!
  4. Predmemorira sadržaj bliže svojim korisnicima. – Ovo je zanimljivo. Predmemorija ne mora uvijek biti na istom mjestu kao i ostatak sustava. Mogli biste koristiti dobru predmemoriju za izgradnju vlastitog jednostavnog sustava za distribuciju sadržaja (CDN) kako biste osigurali da korisnici dođu do sadržaja iz izvora što je bliže njima moguće. Neke tvrtke ulažu značajna sredstva da bi kreirale takve sustave na različitim lokacijama na svijetu kako bi predmemorirani sadržaj stvarno bio lokacijski bliže posjetiteljima.

Zašto implementirati cache na stranicu?

Čak i ako ništa ne razumijete o ovome, jednu stvar svakako trebate znati. Predmemoriranje web stranica jedna je od najkorisnijih dostupnih tehnologija. Učinkovito postavljanje predmemorije najvažnija je stvar koju jedna web stranica može učiniti kako bi što brže poslužila sadržaj posjetiteljima. Tako se poboljšava vrijeme učitavanja front-end i back-end informacija i smanjile opterećenje na server. Ukratko, web stranice čini izuzetno brzima, što dovodi do boljih SEO rezultata i povećanog zadovoljstva korisnika.  To svakako dovodi do boljih konverzija i samim time povećani prihod ako proizvode ili usluge prodajete putem interneta.

Kako podesiti cache?

Iako je predmemorija izvrsna stvar, neki vlasnici web stranica strahuju da može imati i negativne aspekte poput „Što ako sam update-ao stranicu a cache poslužuje zastarjelu verziju?“. To je svakako briga na mjestu jer ako je bilo neke promjene u bazi, a cache poslužuje iz svoje memorije posjetitelji neće vidjeti novi sadržaj.

No to se svakako da podesiti kako vama odgovara. Ovisno o tome kako implementirate cache, podešavanja se mogu raditi izravno u kodu ili u postavkama plugina ako predmemoriju koristite na taj način. U oba slučaja web stranica će u svom zaglavlju, a ispred HTML koda,  imati nekoliko linija koda koji utječu na to kako se kreira i koristi predmemorija. Ti kodovi su uglavnom automatski generirani od strane servera i daju upute i cache-u na serveru i vašem pregledniku kako da rukuje s informacijama, no do određene mjere možete imati kontrolu nad tim kodovima. Pogledajmo primjer jednog takvog koda:

HTTP/1.1 200 OK

Date: Fri, 23 Oct 2021 17:18:23 GMT

Server: Apache/1.3.3 (Unix)

Cache-Control: max-age=3600, must-revalidate

Expires: Fri, 30 Oct 2021 15:22:41 GMT

Last-Modified: Mon, 29 Jun 2020 04:18:12 GMT

ETag: “3f76-430-3117fbbc”

Content-Length: 1040

Content-Type: text/html

Što je sadržano u ovom kodu?

U ovom kodu su sadržane informacije o tome kada je bila posljednja promjena (Last-Modified) i kada je posljednji put cache povukao podatke (Date) te kada je vrijeme da se ponovno osvježe podaci u predmemoriji (Expires). Time su ovdje prisutne informacije o svježini informacija u predmemoriji. Također imamo i definirano koliko je maksimalno trajanje informacija u predmemoriji koje može koristiti prije nego ih mora ponovno zatražiti s poslužitelja (Cache-Control: max-age). Ti parametri se provjeravaju svaki put kada posjetitelj želi vidjeti određenu web stranicu. Provjerava se je li isteklo vrijeme trajanja informacija i postoji li novija verzija na serveru, ako postoji onda se povlači. Zbog tih definicija nema straha da će posjetitelj vidjeti zastarjelu verziju stranice.

S druge stranice ako se vrijeme obaveznog osvježavanja predmemorije postavi na prekratko, onda od toga nema svrhe jer će zahtjevi prema serveru i dalje biti prečesti, gotovo kao da i ne koristite cache.

Ako vam je izuzetno bitno da novi sadržaj bude dostupan odmah po ažuriranju sadržaja stranice, a ne tek nakon što cache istekne, uvijek postoji mogućnost ručnog čišćenja cache-a čime se prilikom prvog učitavanja stranice stvara novi zahtjev prema serveru i stvara  novi cache s novim ažuriranim informacijama.

Dodatno se može podesiti i ESI (Edge Side Includes). TO je metoda koja omogućuje da u sadržaju koji je spremljen u predmemoriju postoje mjesta koja nisu „cache-irana“. Na tom mjestu se prikazuje nešto što uvijek mora biti svježe i novo. Primjer toga je widget u kojem prikazujete novosti ili najnovije promo ponude.

Povezani članci

Odgovori