Kaj je predpomnjenje? Preprost vodnik za graditelje aplikacij
Predpomnjenje (caching) pomeni hranjenje pripravljene kopije nečesa, kar je bilo počasno ali drago pridobiti, tako da lahko naslednjo zahtevo za to odgovorimo hitro iz te kopije. Shranjeni kopiji pravimo predpomnilnik (cache). Vaš brskalnik predpomni slike, da se spletno mesto ob drugem obisku hitreje naloži; strežnik predpomni rezultat počasne poizvedbe v bazi, da je ni treba izvajati za vsakega obiskovalca.
Predpomnjenje naredi aplikacije hitrejše in cenejše za delovanje. Njegova velika slabost je, da lahko kopija zastari.
Zakaj je predpomnjenje pomembno, ko gradite z AI
V aplikacijah, zgrajenih z AI, boste s predpomnjenjem srečali na tri načine:
- »Posodobil sem aplikacijo, a še vedno vidim staro različico.« To je najpogostejši trenutek s predpomnjenjem in ponavadi nedolžen – vaš brskalnik ali CDN prikazuje shranjeno kopijo.
- Hitrost. Če je stran počasna, ker za vsakega obiskovalca znova računa iste številke, lahko predpomnjenje rezultata naredi, da se zdi takojšnja.
- Stroški. Mnogi graditelji z AI in gostitelji zaračunavajo računsko moč, čas baze in klice zunanjih API-jev. Če tisoč obiskovalcev sproži isto drago zahtevo, vam predpomnjenje omogoči, da plačate samo enkrat.
Poznavanje osnov vam omogoča zahtevati predpomnjenje tam, kjer pomaga, in ga prepoznati, kadar je razlog, da nekaj izgleda narobe.
Vsakdanja primerjava
Pomislite na kuhinjo zasedene kavarne.
Vsako jutro bi lahko kuhar vsako kavo skuhal iz sveže zmletih zrn, ko jo kdo naroči. To je počasno. Namesto tega ima pripravljen lonec filter kave na grelni plošči. Večina gostov dobi skodelico v nekaj sekundah – to je zadetek v predpomnilniku (cache hit). Ko lonec zmanjka, nekdo skuha svežega – to je zgrešitev (cache miss).
Toda kava, ki predolgo stoji, se pokvari, zato ima kavarna pravilo: vsak lonec, starejši od 30 minut, se zavrže. To pravilo je čas poteka predpomnilnika. Nihče ne bi ohranjal istega lonca cel dan, prav tako pa nihče ne bi vnaprej skuhal naročila po meri z ovseno mlekom in tremi žlicami sladkorja – nekatere stvari se sploh ne smejo predpomniti.
Kje so predpomnilniki
Ena naložitev strani lahko gre skozi več predpomnilnikov, od tistega najbližje uporabniku do najbolj oddaljenega:
| Predpomnilnik | Kje je | Kaj običajno shranjuje | Primer |
|---|---|---|---|
| Predpomnilnik brskalnika | Na napravi obiskovalca | Slike, slogovne datoteke, skripte, pisave | Vaš logotip se na drugi strani naloži takoj |
| CDN predpomnilnik | Strežniki po svetu, blizu obiskovalcev | Statične datoteke in včasih cele strani | Obiskovalec v Tokiu dobi datoteke z bližnjega strežnika, ne z vašega izvornega |
| Predpomnilnik aplikacije | Na strežniku ali zraven njega, pogosto v pomnilniku ali Redis | Rezultati počasnih poizvedb ali klicev zunanjih API-jev | Današnji menjalni tečaji, pridobljeni enkrat na uro |
| Predpomnilnik baze | Znotraj baze | Nedavno uporabljeni podatki in načrti poizvedb | Priljubljene vrstice ostanejo v hitrem pomnilniku |
CDN (omrežje za dostavo vsebine) je v bistvu svetovno omrežje predpomnilnikov za datoteke vašega spletnega mesta.
Kako predpomnilnik odloča, kaj obdržati
Vsak predpomnilnik mora odgovoriti na ista vprašanja:
- Kaj se lahko predpomni? Javni, deljeni podatki (slika izdelka, objava v blogu) – da. Zasebni podatki (stran računa uporabnika, njegova sporočila) – nikoli v deljenem predpomnilniku.
- Kako dolgo? To je TTL (time to live, čas življenja). Logotip se lahko predpomni za leto dni; stanje zalog za 30 sekund.
- Kako se posodablja? Bodisi kopija poteče in se znova pridobi, bodisi aplikacija kopijo namerno odstrani, ko se podatki spremenijo – to imenujemo invalidacija.
Za spletna mesta strežnik brskalnikom in CDN-jem sporoči, kako predpomniti vsako datoteko, z glavo Cache-Control. Na primer, Cache-Control: max-age=3600 pomeni »to kopijo lahko ponovno uporabite eno uro«.
Sodobna orodja za gradnjo rešijo najtežji del za statične datoteke s prilagajanjem predpomnilnika (cache busting): vsakič, ko se datoteka spremeni, dobi novo ime s prstnim odtisom, na primer app.3f9a2c.js. Brskalniki lahko staro ime shranijo dolgo, ker ima nova različica preprosto drugo ime.
Praktičen primer: katalog izdelkov
Imate majhno spletno trgovino. Domača stran prikazuje 50 izdelkov s cenami in zalogami iz baze ter seznam »v trendu«, ki zahteva počasen izračun vseh naročil.
- Slike in skripte predpomni brskalnik in CDN za dolgo časa. Vsaka nova gradnja da spremenjenim datotekam nova imena, tako da se posodobitve še vedno pojavijo.
- Seznam v trendu se izračuna enkrat na 10 minut in shrani v predpomnilnik aplikacije. Vsak obiskovalec v teh 10 minutah takoj dobi shranjen rezultat.
- Cene se predpomnijo za kratek čas, predpomnilnik pa se počisti, kadarkoli uredite izdelek, da stranke nikoli dolgo ne vidijo stare cene.
- Zaloga ob blagajni se nikoli ne predpomni. Ko nekdo klikne »Kupi«, aplikacija preveri pravo bazo, zato ne more prodati izdelka, ki je pravkar pošel.
- Strani košarice in računa se nikoli ne shranjujejo v deljenih predpomnilnikih, ker so osebne.
Rezultat: domača stran je hitra, baza dela bistveno manj in nič pomembnega za denar ali zasebnost ni nikoli zastarelo.
Ključni pojmi
| Pojem | Pomen |
|---|---|
| Zadetek / zgrešitev v predpomnilniku | Podatki so bili najdeni v predpomnilniku / morali so biti pridobljeni iz vira. |
| TTL (čas življenja) | Kako dolgo se predpomnjena kopija šteje za svežo. |
| Zastarel podatek | Predpomnjena kopija, ki ni več aktualna. |
| Invalidacija | Namerno odstranjevanje predpomnjene kopije, ker se je izvirnik spremenil. |
| Prilagajanje predpomnilnika (cache busting) | Spreminjanje imena datoteke ali URL-ja, ko se ta spremeni, da predpomnilniki pridobijo novo različico. |
| Cache-Control | HTTP glava, ki brskalnikom in CDN-jem pove, kako predpomniti odgovor. |
| Trda osvežitev | Ponovno nalaganje strani, pri čemer brskalniku naročite, naj ignorira predpomnilnik. |
| Redis | Priljubljena shramba podatkov v pomnilniku, pogosto uporabljena kot predpomnilnik aplikacije. |
Pogoste zmote
- »Predpomnjenje je vedno dobro.« Napačna stvar v predpomnilniku povzroči prave napake: stare cene, manjkajoče nove objave ali – najhujši primer – zasebno stran enega uporabnika, prikazano drugemu. Predpomnite namerno.
- »Če vidim staro različico, moja posodobitev ni uspela.« Ponavadi ni. Preden predpostavite, da je nekaj pokvarjeno, poskusite trdo osvežitev (Ctrl+Shift+R ali Cmd+Shift+R na Macu) ali zasebno okno.
- »Predpomnjenje popravi počasno aplikacijo.« Skrije počasnost pri ponovljenih zahtevah. Prva zahteva je še vedno počasna, in če je temeljni problem manjkajoči indeks v bazi, popravite tudi to.
- »Vse bi moral predpomniti čim dlje.« Dolgi časi predpomnjenja ustrezajo datotekam, ki dobijo nova imena, ko se spremenijo. Za strani HTML in podatke so krajši časi varnejši.
- »Čiščenje mojega predpomnilnika popravi to za vse.« Počisti samo vaš brskalnik. Obiskovalci in predpomnilniki CDN-jev imajo še vedno svoje kopije.
Kaj vprašati svojega graditelja z AI
- »Kateri deli te aplikacije so počasni in kateri bi lahko varno predpomnili?«
- »Predpomni [seznam v trendu / rezultat API-ja] za [N] minut in ga počisti, ko se osnovni podatki spremenijo.«
- »Poskrbi, da nobene strani z osebnimi ali računskimi podatki ne more predpomniti CDN ali deljeni predpomnilnik.«
- »Nastavi dolge čase predpomnjenja za datoteke s prstnimi odtisi in kratke za HTML.«
- »Predpomni odgovore iz [zunanjega API-ja], da ga ne kličemo ob vsaki naložitvi strani – in povej mi, kako zastareli so lahko ti podatki.«
- »Po objavi vidim staro različico. Ali je to predpomnilnik mojega brskalnika ali nekaj ni razporejeno?«
Predpomnjenje v Mythex
Po objavi posodobitve v aplikaciji Mythex dokumentacija pojasni, da se predpomnilniki CDN lahko na kratko zamaknejo, trda osvežitev javnega URL-ja pa prikaže novo različico – glejte Kako objaviti. Stran Omejitve gostovanja tudi priporoča predpomnjenje statičnih sredstev, saj se gostovanje, čas baze in pasovna širina plačujejo iz vašega kreditnega stanja. Vse, kar presega to – predpomnjenje rezultatov poizvedb ali odgovorov API-jev –, je nekaj, kar agenta prosite, naj vgradi v vašo aplikacijo.
Sorodno branje: kaj je CDN, kako narediti spletno mesto hitrejše in kaj je omejevanje hitrosti.
Vprašanja
Kaj je predpomnjenje na kratko?
Predpomnjenje pomeni shranjevanje kopije nečesa, kar je bilo počasno ali drago pridobiti, da jo je mogoče naslednjič hitro postreči iz shranjene kopije. Brskalniki, CDN-ji, strežniki in baze podatkov vsi uporabljajo predpomnilnike, da so aplikacije hitrejše in cenejše za delovanje.
Zakaj po posodobitvi spletnega mesta še vedno vidim staro različico?
Vaš brskalnik ali CDN verjetno streže shranjeno kopijo starih datotek. Trda osvežitev (Ctrl+Shift+R v sistemu Windows, Cmd+Shift+R na Macu) to običajno popravi. Za obiskovalce dobro narejena spletna mesta dajo posodobljenim datotekam nova imena, tako da predpomnilniki samodejno pridobijo novo različico.
Kaj počisti predpomnilnik?
Čiščenje predpomnilnika brskalnika izbriše shranjene kopije datotek in strani, ki jih je brskalnik shranil, zato jih naslednjič prenese vse znova. Lahko popravi strani, ki so videti pokvarjene ali zastarele; prvič po tem se bodo strani naložile nekoliko počasneje.
Ali lahko predpomnjenje povzroči težave?
Da. Glavno tveganje je postrežba zastarelih podatkov – stara cena, zastarela zaloga – ali, še huje, predpomnjenje zasebne strani enega uporabnika in prikaz nekomu drugemu. Dobra pravila predpomnjenja določajo, kaj se lahko predpomni, kako dolgo, in nikoli ne predpomnijo osebnih podatkov v deljenih predpomnilnikih.