Šta je keširanje? Vodič jednostavnim jezikom za graditelje aplikacija
Keširanje znači čuvanje gotove kopije nečega što je bilo sporo ili skupo za dobiti, tako da se sljedeći zahtjev za tim može brzo odgovoriti iz te kopije. Sačuvana kopija se zove keš. Vaš browser kešira slike da se sajt brže učita pri drugoj posjeti; server kešira rezultat sporog upita ka bazi da ga ne mora izvršavati za svakog posjetioca.
Keširanje čini aplikacije bržim i jeftinijim za rad. Njegov glavni kompromis je to što kopija može zastarjeti.
Zašto je keširanje važno kad gradite uz AI
S keširanjem ćete se u aplikacijama izgrađenim uz AI susresti na tri načina:
- „Ažurirao sam aplikaciju, ali i dalje vidim staru verziju.“ Ovo je najčešći susret s keširanjem, i obično je bezopasno: vaš browser ili CDN prikazuje sačuvanu kopiju.
- Brzina. Ako je stranica spora jer ponovo računa iste brojeve za svakog posjetioca, keširanje rezultata može je učiniti da djeluje trenutno.
- Trošak. Mnogi AI alati i hostovi naplaćuju računarske resurse, vrijeme baze i vanjske API pozive. Ako hiljadu posjetilaca pokrene isti skupi zahtjev, keširanje vam omogućava da ga platite jednom.
Poznavanje osnova omogućava vam da zatražite keširanje tamo gdje pomaže i da ga prepoznate kada je razlog zašto nešto izgleda pogrešno.
Svakodnevna analogija
Zamislite kuhinju zauzete kafeterije.
Svakog jutra bi kuhar mogao svaku kafu praviti od svježe mljevenih zrna kada se naruči. To je sporo. Umjesto toga drži pripremljen lonac filter kafe na plotni. Većina gostiju dobije šolju za nekoliko sekundi, to je pogodak u kešu (cache hit). Kada lonac ponestane, neko skuha svježi, to je promašaj u kešu (cache miss).
Ali kafa koja predugo stoji postaje ustajala, pa kafeterija ima pravilo: baci svaki lonac stariji od 30 minuta. To pravilo je vrijeme isteka keša. Niko ne bi držao isti lonac cijeli dan, i niko ne bi unaprijed kuhao nečiju posebnu narudžbu s ovsenim mlijekom i tri kašičice šećera. Neke stvari se uopće ne smiju keširati.
Gdje žive kešovi
Jedno učitavanje stranice može proći kroz nekoliko keševa, od onog najbližeg korisniku do onog najdaljeg:
| Keš | Gdje se nalazi | Šta obično čuva | Primjer |
|---|---|---|---|
| Browser keš | Na uređaju posjetioca | Slike, stilovi, skripte, fontovi | Vaš logo se učita odmah na drugoj stranici |
| CDN keš | Serveri širom svijeta, blizu posjetilaca | Statički fajlovi i ponekad cijele stranice | Posjetilac u Tokiju dobije fajlove s obližnjeg servera, a ne s vašeg izvornog servera |
| Keš aplikacije | Na serveru ili pored njega, često u memoriji ili Redisu | Rezultati sporih upita ili vanjskih API poziva | Današnji kursevi valuta, preuzeti jednom na sat |
| Keš baze podataka | Unutar baze | Nedavno korišteni podaci i planovi upita | Popularni redovi ostaju u brzoj memoriji |
CDN (content delivery network) je u suštini svjetska mreža keševa za fajlove vašeg sajta.
Kako keš odlučuje šta da zadrži
Svaki keš mora odgovoriti na ista pitanja:
- Šta se može keširati? Javni, dijeljeni podaci (slika proizvoda, objava na blogu) mogu. Privatni podaci (stranica računa korisnika, njegove poruke) nikada ne idu u dijeljeni keš.
- Koliko dugo? Ovo je TTL (time to live). Logo se može keširati godinu dana; nivo zaliha 30 sekundi.
- Kako se ažurira? Ili kopija istekne pa se ponovo preuzima, ili aplikacija namjerno uklanja kopiju kada se podaci promijene. To se zove invalidacija.
Za web sajtove server kaže browserima i CDN-ovima kako da keširaju svaki fajl koristeći Cache-Control header. Na primjer, Cache-Control: max-age=3600 znači „ovu kopiju možeš ponovo koristiti sat vremena“.
Moderni alati za build rješavaju najteži dio za statičke fajlove putem cache busting: svaki put kada se fajl promijeni, dobije novo ime s otiskom, poput app.3f9a2c.js. Browseri mogu dugo keširati staro ime, jer nova verzija jednostavno ima drugo ime.
Praktičan primjer: katalog proizvoda
Imate mali online shop. Početna stranica prikazuje 50 proizvoda s cijenama i zalihama iz baze, plus listu „u trendu“ koja zahtijeva sporo računanje nad svim narudžbama.
- Slike i skripte keširaju browser i CDN na dugo vremena. Svaki novi build daje promijenjenim fajlovima nova imena, pa se ažuriranja i dalje pojavljuju.
- Lista u trendu se računa jednom na svakih 10 minuta i čuva u kešu aplikacije. Svaki posjetilac u tih 10 minuta dobija sačuvani rezultat odmah.
- Cijene se keširaju kratko, a keš se briše kad god uredite proizvod, pa kupci nikada dugo ne vide staru cijenu.
- Zalihe na blagajni se nikada ne keširaju. Kada neko klikne „Kupi“, aplikacija provjerava stvarnu bazu, pa ne može prodati artikl koji je upravo rasprodat.
- Stranice korpe i računa se nikada ne čuvaju u dijeljenim kešovima, jer su lične.
Rezultat: početna stranica je brza, baza radi mnogo manje, a ništa što je važno za novac ili privatnost nikada ne zastari.
Ključni pojmovi
| Pojam | Značenje |
|---|---|
| Pogodak / promašaj u kešu | Podatak je pronađen u kešu / morao je biti preuzet iz izvora. |
| TTL (time to live) | Koliko dugo se keširana kopija smatra svježom. |
| Zastarjeli podaci | Keširana kopija koja više nije ažurna. |
| Invalidacija | Namjerno uklanjanje keširane kopije jer se original promijenio. |
| Cache busting | Promjena imena fajla ili URL-a kada se promijeni, da keševi preuzmu novu verziju. |
| Cache-Control | HTTP header koji govori browserima i CDN-ovima kako da keširaju odgovor. |
| Hard refresh | Ponovno učitavanje stranice uz uputu browseru da ignoriše svoj keš. |
| Redis | Popularna memorijska baza podataka, često korištena kao keš aplikacije. |
Česte zablude
- „Keširanje je uvijek dobro.“ Keširanje pogrešne stvari uzrokuje stvarne greške: stare cijene, nedostajuće nove objave ili, najgori slučaj, privatnu stranicu jednog korisnika prikazanu drugome. Keširajte namjerno.
- „Ako vidim staru verziju, moje ažuriranje nije uspjelo.“ Obično nije. Probajte hard refresh (Ctrl+Shift+R, ili Cmd+Shift+R na Macu) ili privatni prozor prije nego pretpostavite da nešto nije u redu.
- „Keširanje popravlja sporu aplikaciju.“ Ono sakriva sporost kod ponovljenih zahtjeva. Prvi zahtjev je i dalje spor, a ako je osnovni problem nedostajući indeks u bazi, popravite i to.
- „Trebao bih keširati sve što duže moguće.“ Duga vremena keširanja odgovaraju fajlovima koji dobiju nova imena kada se promijene. Za HTML stranice i podatke kraća vremena su sigurnija.
- „Brisanje keša popravlja stvari za sve.“ Briše samo vaš browser. Posjetioci i CDN kešovi i dalje imaju svoje kopije.
Šta tražiti od vašeg AI alata za izradu
- „Koji dijelovi ove aplikacije su spori, a koji se mogu sigurno keširati?“
- „Keširaj [listu u trendu / rezultat API-ja] na [N] minuta, i obriši je kada se osnovni podaci promijene.“
- „Pobrini se da nijedna stranica s ličnim ili računskim podacima ne može biti keširana od strane CDN-a ili dijeljenog keša.“
- „Postavi duga vremena keširanja za fajlove s otiskom, a kratka za HTML.“
- „Keširaj odgovore iz [vanjskog API-ja] da ga ne zovemo na svakom učitavanju stranice, i reci mi koliko podaci mogu zastarjeti.“
- „Nakon objavljivanja vidim staru verziju. Je li to keš mog browsera ili nešto nije deployovano?“
Keširanje u Mythexu
Nakon što objavite ažuriranje Mythex aplikacije, dokumentacija navodi da CDN keševi mogu kratko kasniti, a hard refresh javnog URL-a prikazuje novu verziju. Pogledajte Kako objaviti. Stranica Ograničenja hostinga također preporučuje keširanje statičkih resursa, jer se hosting, vrijeme baze i propusnost plaćaju iz vašeg kredit salda. Sve što ide dalje, poput keširanja rezultata upita ili API odgovora, zatražite od agenta da ugradi u vašu aplikaciju.
Povezano štivo: šta je CDN, kako učiniti vaš sajt bržim i šta je rate limiting.
Pitanja
Šta je keširanje jednostavnim riječima?
Keširanje znači čuvanje kopije nečega što je bilo sporo ili skupo za dobiti, pa se sljedeći put kada je potrebno može brzo poslužiti iz sačuvane kopije. Browseri, CDN-ovi, serveri i baze podataka svi koriste keševe da aplikacije budu brže i jeftinije za rad.
Zašto i dalje vidim staru verziju sajta nakon ažuriranja?
Vaš browser ili CDN vjerovatno poslužuje sačuvanu kopiju starih fajlova. Hard refresh (Ctrl+Shift+R na Windowsu, Cmd+Shift+R na Macu) to obično riješi. Za posjetioce, dobro napravljeni sajtovi daju ažuriranim fajlovima nova imena, pa keševi automatski preuzimaju novu verziju.
Šta radi brisanje keša?
Brisanje keša u browseru uklanja sačuvane kopije fajlova i stranica koje je browser zapamtio, pa sve ponovo preuzima sljedeći put. Može riješiti stranice koje izgledaju pokvareno ili zastarjelo, a stranice se nakon toga prvi put učitavaju malo sporije.
Može li keširanje uzrokovati probleme?
Može. Glavni rizik je posluživanje zastarjelih podataka, poput stare cijene ili neažurirane zalihe, ili, još gore, keširanje privatne stranice jednog korisnika i prikazivanje drugom. Dobra pravila keširanja određuju šta se može keširati i koliko dugo, i nikada ne keširaju lične podatke u dijeljenim kešovima.