Vodiči

Što je predmemoriranje? Vodič za izradu aplikacija bez žargona

Predmemoriranje (caching) znači čuvanje gotove kopije nečega što je bilo sporo ili skupo dobiti, pa se sljedeći zahtjev za tim može brzo poslužiti iz te kopije. Sačuvana kopija zove se cache (predmemorija). Vaš preglednik predmemorira slike pa se stranica pri drugom posjetu učitava brže; server predmemorira rezultat sporog upita prema bazi pa ga ne mora izvršavati za svakog posjetitelja.

Predmemoriranje čini aplikacije bržima i jeftinijima za rad. Njegov jedini veliki kompromis je to što kopija može zastarjeti.

Zašto je predmemoriranje važno kad gradite uz AI

S predmemorijom ćete se u aplikacijama izrađenim uz AI susresti na tri načina:

  • „Ažurirao sam aplikaciju, ali i dalje vidim staru verziju.” Ovo je najčešći slučaj predmemorije, i obično je bezopasan — vaš preglednik ili CDN prikazuje sačuvanu kopiju.
  • Brzina. Ako je stranica spora zato što za svakog posjetitelja ponovno računa iste brojke, predmemoriranje rezultata može je učiniti trenutačnom.
  • Trošak. Mnogi AI alati i hosting servisi naplaćuju računalnu snagu, vrijeme baze i vanjske API pozive. Ako tisuću posjetitelja pokrene isti skupi zahtjev, predmemoriranje vam omogućuje da ga platite jednom.

Poznavanje osnova omogućuje vam da zatražite predmemoriranje tamo gdje pomaže i da ga prepoznate kad je razlog zbog kojeg nešto izgleda krivo.

Svakodnevna analogija

Zamislite kuhinju zauzete kavane.

Svako jutro barista bi mogao svaku kavu mljeti i kuhati tek kad je naručena. To je sporo. Umjesto toga, drži spremnu pripremljenu filter kavu na grijaču. Većina gostiju dobije šalicu za nekoliko sekundi — to je pogodak u predmemoriji (cache hit). Kad kava u loncu ponestane, netko skuha novu — to je promašaj (cache miss).

Ali kava koja predugo stoji postaje ustajala, pa kavana ima pravilo: baci svaki lonac stariji od 30 minuta. To pravilo je vrijeme isteka predmemorije. Nitko ne bi držao isti lonac cijeli dan, i nitko ne bi unaprijed kuhao nečiju posebnu narudžbu s zobenim mlijekom i tri žlice šećera — neke stvari se uopće ne smiju predmemorirati.

Gdje žive predmemorije

Jedno učitavanje stranice može proći kroz nekoliko predmemorija, od najbliže korisniku do najdalje:

PredmemorijaGdje se nalaziŠto obično spremaPrimjer
Predmemorija preglednikaNa uređaju posjetiteljaSlike, stilske datoteke, skripte, fontoveVaš logo se učita odmah na drugoj stranici
CDN predmemorijaServeri širom svijeta, blizu posjetiteljaStatične datoteke i ponekad cijele stranicePosjetitelj u Tokiju dobiva datoteke s obližnjeg servera, a ne s vašeg izvornog servera
Predmemorija aplikacijeNa vašem serveru ili uz njega, često u memoriji ili RedisuRezultati sporih upita ili vanjskih API pozivaDanašnji tečajevi valuta, dohvaćeni jednom na sat
Predmemorija bazeUnutar baze podatakaNedavno korišteni podaci i planovi upitaPopularni redovi ostaju u brzoj memoriji

CDN (content delivery network) u biti je svjetska mreža predmemorija za datoteke vaše stranice.

Kako predmemorija odlučuje što zadržati

Svaka predmemorija mora odgovoriti na ista pitanja:

  • Što se smije predmemorirati? Javni, zajednički podaci (slika proizvoda, blog članak) — da. Privatni podaci (stranica računa korisnika, njegove poruke) — nikad u zajedničkoj predmemoriji.
  • Koliko dugo? Ovo je TTL (time to live). Logo se može predmemorirati godinu dana; razina zaliha 30 sekundi.
  • Kako se ažurira? Ili kopija istekne pa se ponovno dohvaća, ili aplikacija namjerno uklanja kopiju kad se podaci promijene — to se zove invalidacija.

Za web stranice server preglednicima i CDN-ovima govori kako predmemorirati svaku datoteku pomoću zaglavlja Cache-Control. Na primjer, Cache-Control: max-age=3600 znači „ovu kopiju možeš ponovno koristiti sat vremena.”

Moderni alati za izgradnju najteži dio rješavaju za statične datoteke pomoću cache bustinga: svaki put kad se datoteka promijeni, dobiva novo ime s otiskom, poput app.3f9a2c.js. Preglednici mogu dugo predmemorirati staro ime, jer nova verzija jednostavno ima drugo ime.

Primjer: katalog proizvoda

Imate mali online dućan. Početna stranica prikazuje 50 proizvoda s cijenama i zalihama iz baze, plus popis „u trendu” koji zahtijeva sporo računanje nad svim narudžbama.

  1. Slike i skripte preglednik i CDN predmemoriraju dugo vremena. Svaki novi build mijenja imena promijenjenih datoteka, pa se ažuriranja i dalje prikazuju.
  2. Popis „u trendu” računa se jednom svakih 10 minuta i sprema u predmemoriju aplikacije. Svaki posjetitelj u tih 10 minuta dobiva spremljeni rezultat odmah.
  3. Cijene se predmemoriraju kratko vrijeme, a predmemorija se čisti čim uredite proizvod, pa kupci nikad dugo ne vide staru cijenu.
  4. Zalihe pri naplati se nikad ne predmemoriraju. Kad netko klikne „Kupi”, aplikacija provjerava stvarnu bazu, pa ne može prodati artikl koji je upravo rasprodan.
  5. Stranice košarice i računa nikad se ne spremaju u zajedničku predmemoriju, jer su osobne.

Rezultat: početna stranica je brza, baza ima znatno manje posla i ništa što je važno za novac ili privatnost nikad nije zastarjelo.

Ključni pojmovi

PojamZnačenje
Pogodak / promašaj predmemorijePodatak je pronađen u predmemoriji / morao se dohvatiti iz izvora.
TTL (time to live)Koliko dugo se predmemorirana kopija smatra svježom.
Zastarjeli podaciPredmemorirana kopija koja nije aktualna.
InvalidacijaNamjerno uklanjanje predmemorirane kopije jer se original promijenio.
Cache bustingMijenjanje imena datoteke ili URL-a kad se ona promijeni, da predmemorije dohvate novu verziju.
Cache-ControlHTTP zaglavlje koje preglednicima i CDN-ovima govori kako predmemorirati odgovor.
Tvrdo osvježavanje (hard refresh)Ponovno učitavanje stranice uz uputu pregledniku da ignorira svoju predmemoriju.
RedisPopularna spremišna baza u memoriji, često korištena kao predmemorija aplikacije.

Česte zablude

  • „Predmemoriranje je uvijek dobro.” Predmemoriranje krive stvari uzrokuje stvarne greške: stare cijene, nedostajuće nove objave ili — najgori slučaj — privatnu stranicu jednog korisnika prikazanu drugome. Predmemorirajte namjerno.
  • „Ako vidim staru verziju, ažuriranje nije uspjelo.” Obično jest uspjelo. Pokušajte tvrdo osvježavanje (Ctrl+Shift+R, odnosno Cmd+Shift+R na Macu) ili privatni prozor prije nego što pretpostavite da nešto ne radi.
  • „Predmemoriranje popravlja sporu aplikaciju.” Ono skriva sporost za ponovljene zahtjeve. Prvi zahtjev je i dalje spor, a ako je pravi problem nedostajući indeks u bazi, popravite i to.
  • „Trebam predmemorirati sve što duže.” Dugi rokovi predmemorije odgovaraju datotekama koje dobivaju nova imena kad se promijene. Za HTML stranice i podatke kraći rokovi su sigurniji.
  • „Čišćenje moje predmemorije popravlja to svima.” Čisti samo vaš preglednik. Posjetitelji i CDN predmemorije i dalje imaju svoje kopije.

Što pitati svog AI alata za izradu

  • „Koji dijelovi ove aplikacije su spori i koji se mogu sigurno predmemorirati?”
  • „Predmemoriraj [popis u trendu / rezultat API-ja] na [N] minuta i očisti ga kad se podaci ispod promijene.”
  • „Pobrini se da nijedna stranica s osobnim ili računskim podacima ne može biti predmemorirana u CDN-u ni zajedničkoj predmemoriji.”
  • „Za statične datoteke s otiskom postavi duga vremena predmemorije, a za HTML kratka.”
  • „Predmemoriraj odgovore od [vanjskog API-ja] da ga ne zovemo pri svakom učitavanju stranice — i reci mi koliko podaci mogu zastarjeti.”
  • „Nakon objave vidim staru verziju. Je li to predmemorija mog preglednika ili nešto nije objavljeno?”

Predmemoriranje u Mythexu

Nakon što objavite ažuriranje Mythex aplikacije, dokumentacija navodi da CDN predmemorije mogu kratko kasniti, a tvrdo osvježavanje javnog URL-a prikazuje novu verziju — pogledajte Kako objaviti. Stranica Ograničenja hostinga također preporučuje predmemoriranje statičnih resursa, jer se hosting, vrijeme baze i propusnost plaćaju iz vašeg salda kredita. Sve iznad toga — predmemoriranje rezultata upita ili API odgovora — nešto je što zatražite od agenta da ugradi u vašu aplikaciju.

Srodno štivo: što je CDN, kako ubrzati web stranicu i što je ograničavanje broja zahtjeva.

Pitanja

Što je predmemoriranje jednostavnim riječima?

Predmemoriranje znači spremanje kopije nečega što je bilo sporo ili skupo dobiti, kako bi se sljedeći put kad je potrebno moglo brzo poslužiti iz spremljene kopije. Preglednici, CDN-ovi, serveri i baze podataka koriste predmemorije da aplikacije budu brže i jeftinije za rad.

Zašto i dalje vidim staru verziju svoje web stranice nakon ažuriranja?

Vaš preglednik ili CDN vjerojatno poslužuje predmemoriranu kopiju starih datoteka. Tvrdo osvježavanje (Ctrl+Shift+R na Windowsu, Cmd+Shift+R na Macu) obično to rješava. Za posjetitelje dobro izgrađene stranice daju ažuriranim datotekama nova imena, pa predmemorije automatski dohvaćaju novu verziju.

Što čisti predmemoriju?

Čišćenje predmemorije preglednika briše spremljene kopije datoteka i stranica koje je preglednik pohranio, pa sve ponovno preuzima sljedeći put. Može popraviti stranice koje izgledaju pokvareno ili zastarjelo, a stranice će se nakon toga prvi put učitati malo sporije.

Može li predmemoriranje uzrokovati probleme?

Da. Glavni rizik je posluživanje zastarjelih podataka — stare cijene ili zastarjele razine zaliha — ili, što je još gore, predmemoriranje privatne stranice jednog korisnika i njezino prikazivanje nekome drugome. Dobra pravila predmemoriranja odlučuju što se smije predmemorirati i koliko dugo te nikad ne predmemoriraju osobne podatke u zajedničkim predmemorijama.

Mythex · Pricing · Izradite bilo što uz AI · Predlošci za web stranice i aplikacije · Mythex u usporedbi · Rječnik izrade aplikacija uz AI · Besplatni alati za izradu aplikacija uz AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)