Çfarë është cache-imi? Udhëzues i thjeshtë për ndërtuesit e aplikacioneve
Cache-imi do të thotë të mbash një kopje gati të diçkaje që ishte e ngadaltë ose e shtrenjtë për t'u marrë, në mënyrë që kërkesa tjetër për të të mund të përgjigjet shpejt nga ajo kopje. Kopja e ruajtur quhet cache. Shfletuesi juaj ruan imazhe në cache, që një sajt të ngarkohet më shpejt në vizitën e dytë; një server ruan në cache rezultatin e një kërkese të ngadaltë në bazën e të dhënave, që të mos e ekzekutojë për çdo vizitor.
Cache-imi i bën aplikacionet më të shpejta dhe më lirë për t'u drejtuar. Kompromisi i tij kryesor është se një kopje mund të vjetërohet.
Pse cache-imi ka rëndësi kur ndërtoni me AI
Do ta hasni cache-imin te aplikacionet e ndërtuara me AI në tri mënyra:
- „E përditësova aplikacionin, por ende shoh versionin e vjetër.“ Ky është momenti më i shpeshtë i cache-imit, dhe zakonisht është i padëmshëm — shfletuesi juaj ose një CDN po shfaq një kopje të ruajtur.
- Shpejtësia. Nëse një faqe është e ngadaltë sepse rillogarit të njëjtat numra për çdo vizitor, ruajtja e rezultatit në cache mund ta bëjë të duket e menjëhershme.
- Kostoja. Shumë ndërtues me AI dhe hostues paguhen për llogaritjen, kohën e bazës së të dhënave dhe thirrjet API të jashtme. Nëse një mijë vizitorë nxisin të njëjtën kërkesë të shtrenjtë, cache-imi ju lejon ta paguani vetëm një herë.
Njohja e bazave ju lejon të kërkoni cache-im aty ku ndihmon, dhe ta dalloni kur është arsyeja pse diçka duket e gabuar.
Një analogji e përditshme
Mendoni për kuzhinën e një kafeneje të zënshme.
Çdo mëngjes, kuvendari mund ta bënte çdo kafe nga e para, me kokrra të bluara të freskëta, sapo porositet. Kjo është e ngadaltë. Në vend të kësaj, ai mban gati një tenxhere kafe me filtër mbi pllakën e nxehtë. Shumicën e klientëve i shërben një filxhan në sekonda — kjo është një cache hit. Kur tenxhere mbaron, dikush bën një të re — një cache miss.
Por kafeja që qëndron shumë kohë vjetërohet, kështu që kafeneja ka një rregull: hidh çdo tenxhere më të vjetër se 30 minuta. Ai rregull është koha e skadimit të cache-it. Askush nuk do ta mbante të njëjtën tenxhere gjithë ditën, dhe askush nuk do ta para-bënte porosinë e veçantë të dikujt me qumësht bajame dhe tre lugë sheqer — disa gjëra nuk duhet fare të ruhen në cache.
Ku jetojnë cache-et
Një ngarkim i vetëm faqeje mund të kalojë nëpër disa cache-e, nga më afër përdoruesit deri më larg:
| Cache | Ku ndodhet | Çfarë ruan zakonisht | Shembull |
|---|---|---|---|
| Cache i shfletuesit | Në pajisjen e vizitorit | Imazhe, stil-skedarë, skripte, shkronja | Logoja juaj ngarkohet menjëherë në faqen e dytë |
| Cache i CDN-së | Serverë në mbarë botën, afër vizitorëve | Skedarë statikë dhe ndonjëherë faqe të tëra | Një vizitor në Tokio merr skedarët nga një server i afërt, jo nga origjina juaj |
| Cache i aplikacionit | Në ose pranë serverit tuaj, shpesh në memorie ose Redis | Rezultatet e kërkesave të ngadalta ose të thirrjeve API të jashtme | Kursi i sotëm i këmbimit, i marrë një herë në orë |
| Cache i bazës së të dhënave | Brenda bazës së të dhënave | Të dhëna të përdorura së fundmi dhe plane kërkesash | Rreshtat e popullarizuar qëndrojnë në memorie të shpejtë |
Një CDN (rrjet shpërndarjeje përmbajtjeje) është në thelb një rrjet global cache-esh për skedarët e sajtit tuaj.
Si vendos një cache çfarë të mbajë
Çdo cache duhet t'u përgjigjet të njëjtave pyetje:
- Çfarë mund të ruhet në cache? Të dhëna publike, të përbashkëta (një imazh produkti, një postim blogu) — po. Të dhëna private (faqja e llogarisë së një përdoruesi, mesazhet e tij) — asnjëherë në një cache të përbashkët.
- Për sa kohë? Ky është TTL (time to live). Një logo mund të ruhet në cache për një vit; një nivel stoku për 30 sekonda.
- Si përditësohet? Ose kopja skadon dhe merret përsëri, ose aplikacioni e heq me qëllim kur ndryshojnë të dhënat — quhet invalidim.
Për sajtet, serveri u tregon shfletuesve dhe CDN-ve si të ruajnë në cache çdo skedar, duke përdorur header-in Cache-Control. Për shembull, Cache-Control: max-age=3600 do të thotë „ky kopje mund të ripërdoret për një orë“.
Mjetet moderne të ndërtimit e trajtojnë pjesën më të vështirë për skedarët statikë me cache busting: sa herë që ndryshon një skedar, ai merr një emër të ri me një shenjë unike, si app.3f9a2c.js. Shfletuesit mund ta ruajnë në cache emrin e vjetër për kohë të gjatë, sepse versioni i ri thjesht ka një emër tjetër.
Një shembull i punuar: katalogu i një produkti
Keni një dyqan të vogël online. Faqja kryesore shfaq 50 produkte me çmime dhe nivele stoku nga baza e të dhënave, plus një listë „në trend“ që kërkon një llogaritje të ngadaltë mbi të gjitha porositë.
- Imazhet dhe skriptet ruhen në cache nga shfletuesi dhe CDN-ja për kohë të gjatë. Çdo ndërtim i ri u jep skedarëve të ndryshuar emra të rinj, kështu që përditësimet prapë shfaqen.
- Lista në trend llogaritet një herë çdo 10 minuta dhe ruhet në një cache aplikacioni. Çdo vizitor gjatë atyre 10 minutave merr rezultatin e ruajtur menjëherë.
- Çmimet ruhen në cache për pak kohë, dhe cache-i pastrohet sa herë që redaktoni një produkt, kështu që klientët nuk shohin kurrë një çmim të vjetër për gjatë kohe.
- Stoku në arkëtim nuk ruhet kurrë në cache. Kur dikush klikon „Bli“, aplikacioni kontrollon bazën reale të të dhënave, kështu që nuk mund të shesë një artikull që sapo mbaroi.
- Faqet e shportës dhe të llogarisë nuk ruhen kurrë në cache të përbashkëta, sepse janë personale.
Rezultati: faqja kryesore është e shpejtë, baza e të dhënave bën shumë më pak punë, dhe asgjë që ka rëndësi për paratë ose privatësinë nuk është kurrë e vjetëruar.
Termat kryesorë
| Termi | Kuptimi |
|---|---|
| Cache hit / miss | Të dhënat u gjetën në cache / duhej të merreshin nga burimi. |
| TTL (time to live) | Sa kohë konsiderohet e freskët një kopje e ruajtur. |
| Të dhëna të vjetëruara (stale) | Një kopje e ruajtur që nuk është më e përditësuar. |
| Invalidimi | Heqja e qëllimshme e një kopjeje të ruajtur, sepse origjinali ndryshoi. |
| Cache busting | Ndryshimi i emrit ose URL-së së një skedari kur ndryshon, që cache-et ta marrin versionin e ri. |
| Cache-Control | Header-i HTTP që u tregon shfletuesve dhe CDN-ve si ta ruajnë në cache një përgjigje. |
| Rifreskim i plotë (hard refresh) | Rifreskimi i një faqeje duke i thënë shfletuesit të injorojë cache-in e vet. |
| Redis | Një depo e njohur të dhënash në memorie, shpesh e përdorur si cache aplikacioni. |
Keqkuptime të zakonshme
- „Cache-imi është gjithmonë i mirë.“ Ruajtja në cache e gjënë së gabuar krijon gabime reale: çmime të vjetra, postime të reja që mungojnë, ose — rasti më i keq — faqja private e një përdoruesi u shfaq te një tjetër. Ruajeni në cache me qëllim.
- „Nëse shoh versionin e vjetër, përditësimi im dështoi.“ Zakonisht nuk dështoi. Provoni një rifreskim të plotë (Ctrl+Shift+R, ose Cmd+Shift+R në Mac) ose një dritare private para se të supozoni se diçka është prishur.
- „Cache-imi e rregullon një aplikacion të ngadaltë.“ Ai fsheh ngadalësinë për kërkesat e përsëritura. Kërkesa e parë është ende e ngadaltë, dhe nëse problemi themelor është një indeks që mungon në bazën e të dhënave, rregulloje edhe atë.
- „Duhet të ruaj çdo gjë në cache sa më gjatë që të jetë e mundur.“ Kohët e gjata të cache-imit i përshtaten skedarëve që marrin emra të rinj kur ndryshojnë. Për faqet HTML dhe të dhënat, kohët më të shkurtra janë më të sigurta.
- „Pastrimi i cache-it tim e rregullon për të gjithë.“ Ai pastron vetëm shfletuesin tuaj. Vizitorët dhe cache-et e CDN-ve kanë kopjet e tyre.
Çfarë t'i kërkoni ndërtuesit tuaj me AI
- „Cilat pjesë të këtij aplikacioni janë të ngadalta, dhe cilat mund të ruhen në cache me siguri?“
- „Ruaje në cache [listën në trend / rezultatin e API-t] për [N] minuta, dhe pastroje kur ndryshojnë të dhënat themelore.“
- „Sigurohu që asnjë faqe me të dhëna personale ose llogarie nuk mund të ruhet në cache nga një CDN ose cache i përbashkët.“
- „Vendos kohë të gjata cache-imi për skedarët statikë me shenja unike, dhe të shkurtra për HTML.“
- „Ruaj në cache përgjigjet nga [API e jashtme] që të mos e thërrasim në çdo ngarkim faqeje — dhe më thuaj sa të vjetëruara mund të bëhen ato të dhëna.“
- „Shoh një version të vjetër pas publikimit. A është cache i shfletuesit tim, apo diçka nuk është vendosur?“
Cache-imi në Mythex
Pasi publikoni një përditësim të një aplikacioni Mythex, dokumentacioni thekson se cache-et e CDN-ve mund të vonojnë për pak, dhe një rifreskim i plotë i URL-së publike tregon versionin e ri — shihni Si të publikoni. Faqja Kufijtë e hostimit gjithashtu rekomandon ruajtjen në cache të asteve statike, pasi hostimi, koha e bazës së të dhënave dhe bandwidth-i paguhen nga bilanci juaj i kredisë. Çdo gjë përtej kësaj — ruajtja në cache e rezultateve të kërkesave ose përgjigjeve API — është diçka që i kërkoni agjentit ta ndërtojë te aplikacioni juaj.
Lexim i lidhur: çfarë është një CDN, si ta bëni sajtin tuaj më të shpejtë dhe çfarë është kufizimi i shpejtësisë (rate limiting).
Pyetje
Çfarë është cache-imi me fjalë të thjeshta?
Cache-imi do të thotë të ruash një kopje të diçkaje që ishte e ngadaltë ose e shtrenjtë për t'u marrë, në mënyrë që herën tjetër kur nevojitet të shërbehet shpejt nga kopja e ruajtur. Shfletuesit, CDN-të, serverët dhe bazat e të dhënave përdorin të gjitha cache-e për ta bërë aplikacionet më të shpejta dhe më lirë për t'u drejtuar.
Pse ende shoh versionin e vjetër të faqes sime pasi e kam përditësuar?
Shfletuesi juaj ose një CDN ka shumë mundësi të po shërben një kopje të ruajtur të skedarëve të vjetër. Një rifreskim i plotë (Ctrl+Shift+R në Windows, Cmd+Shift+R në Mac) zakonisht e rregullon. Për vizitorët, faqet e ndërtuara mirë u japin skedarëve të përditësuar emra të rinj, që cache-et të marrin automatikisht versionin e ri.
Çfarë bën pastrimi i cache-it?
Pastrimi i cache-it të shfletuesit fshin kopjet e ruajtura të skedarëve dhe faqeve që shfletuesi i ka ruajtur, kështu që herën tjetër i shkarkon të gjitha nga e para. Mund të rregullojë faqe që duken të prishura ose të vjetëruara, dhe faqet do të ngarkohen pak më ngadalë herën e parë pas kësaj.
A mund të shkaktojë probleme cache-imi?
Po. Rreziku kryesor është shërbimi i të dhënave të vjetëruara — një çmim i vjetër, një nivel stoku i pasaktë — ose, më keq, ruajtja në cache e një faqeje private të një përdoruesi dhe shfaqja e saj te dikush tjetër. Rregullat e mira të cache-imit vendosin çfarë mund të ruhet, për sa kohë, dhe nuk ruajnë asnjëherë të dhëna personale në cache-e të përbashkëta.