Oppaat

Mikä on välimuisti? Selkokielinen opas sovellusrakentajille

Välimuisti tarkoittaa valmiin kopion säilyttämistä jostakin, jonka hankkiminen oli hidasta tai kallista, jotta seuraavan pyynnön siihen voidaan vastata nopeasti kopiosta. Tallennettua kopiota kutsutaan välimuistiksi (cache). Selaimesi tallentaa kuvia välimuistiin, jotta sivusto latautuu nopeammin toisella käyntikerralla; palvelin tallentaa hitaan tietokantakyselyn tuloksen, jotta sen ei tarvitse suorittaa sitä jokaiselle kävijälle.

Välimuisti tekee sovelluksista nopeampia ja halvempia ajaa. Sen suuri kompromissi on, että kopio voi vanhentua.

Miksi välimuisti on tärkeä, kun rakennat tekoälyllä

Törmäät välimuistiin tekoälyllä rakennetuissa sovelluksissa kolmella tavalla:

  • ”Päivitin sovelluksen, mutta näen yhä vanhan version.” Tämä on yleisin välimuistitilanne, ja se on yleensä vaaratonta – selaimesi tai CDN näyttää tallennettua kopiota.
  • Nopeus. Jos sivu on hidas, koska se laskee samat luvut uudelleen jokaiselle kävijälle, tuloksen välimuistiin tallentaminen voi saada sen tuntumaan välittömältä.
  • Kustannukset. Monet tekoälyrakentajat ja palvelimet veloittavat laskennasta, tietokantaajasta ja ulkoisista API-kutsuista. Jos tuhat kävijää laukaisee saman kalliin pyynnön, välimuisti antaa sinun maksaa siitä kerran.

Perusteiden tunteminen auttaa sinua pyytämään välimuistia siellä, missä siitä on hyötyä, ja tunnistamaan sen, kun se on syy jonkin näyttämiseen väärin.

Arkinen vertauskuva

Ajattele vilkkaan kahvilan keittiötä.

Joka aamu kokki voisi tehdä jokaisen kahvin tuoreista jauhetuista pavuista aina, kun se tilataan. Se on hidasta. Sen sijaan hän pitää valmiina kannullisen suodatinkahvia kuumalevyllä. Useimmat asiakkaat saavat kupin sekunneissa – se on välimuistiosuma (cache hit). Kun kannu loppuu, joku keittää uuden – se on välimuistiohi (cache miss).

Kahvi kuitenkin vanhenee, jos se seisoo liian kauan, joten kahvilalla on sääntö: heitä pois jokainen yli 30 minuuttia vanha kannu. Tuo sääntö on välimuistin vanhenemisaika. Kukaan ei pitäisi samaa kannua koko päivää, eikä kukaan esikeittäisi jonkun erikoistilausta kauramaidolla ja kolmella sokerilla – jotkin asiat eivät kuulu välimuistiin lainkaan.

Missä välimuistit sijaitsevat

Yksi sivulataus voi kulkea useiden välimuistien läpi, käyttäjästä kauimpana olevaan:

VälimuistiMissä se onMitä se yleensä tallentaaEsimerkki
Selaimen välimuistiKävijän laitteellaKuvat, tyylitiedostot, skriptit, fontitLogosi latautuu heti toisella sivulla
CDN-välimuistiYmpäri maailmaa palvelimilla, lähellä kävijöitäStaattiset tiedostot ja joskus koko sivutTokiolainen kävijä saa tiedostot lähellä olevalta palvelimelta, ei alkuperäpalvelimeltasi
SovellusvälimuistiPalvelimellasi tai sen vieressä, usein muistissa tai RedisissäHitaiden kyselyjen tai ulkoisten API-kutsujen tuloksetPäivän valuuttakurssit, haettu kerran tunnissa
TietokantavälimuistiTietokannan sisälläÄskettäin käytetty data ja kyselysuunnitelmatSuositut rivit pysyvät nopeassa muistissa

CDN (content delivery network) on käytännössä maailmanlaajuinen välimuistiverkosto sivustosi tiedostoille.

Miten välimuisti päättää, mitä säilyttää

Jokaisen välimuistin on vastattava samoihin kysymyksiin:

  • Mitä voidaan tallentaa? Julkinen, jaettu data (tuotekuva, blogikirjoitus) – kyllä. Yksityinen data (käyttäjän tilisivu, viestit) – ei koskaan jaetussa välimuistissa.
  • Kuinka kauan? Tämä on TTL (time to live). Logo voidaan tallentaa vuodeksi; varastosaldo ehkä 30 sekunniksi.
  • Miten se päivitetään? Joko kopio vanhenee ja haetaan uudelleen, tai sovellus poistaa sen tarkoituksella, kun data muuttuu – tätä kutsutaan invalidoinniksi.

Verkkosivustojen kohdalla palvelin kertoo selaimille ja CDN:ille, miten kukin tiedosto tallennetaan, Cache-Control-otsakkeella. Esimerkiksi Cache-Control: max-age=3600 tarkoittaa ”tätä kopiota voi käyttää uudelleen tunnin ajan”.

Nykyaikaiset rakennustyökalut hoitavat staattisten tiedostojen vaikeimman osan välimuistin ohittamisella (cache busting): aina kun tiedosto muuttuu, siitä tulee uusi nimi sormenjäljellä, kuten app.3f9a2c.js. Selaimet voivat tallentaa vanhan nimen pitkäksi aikaa, koska uudella versiolla on yksinkertaisesti eri nimi.

Esimerkki käytännössä: tuotekatalogi

Sinulla on pieni verkkokauppa. Etusivulla näytetään 50 tuotetta hintoineen ja varastosaldoineen tietokannasta, lisäksi ”trendaavat”-lista, joka vaatii hitaan laskennan kaikista tilauksista.

  1. Kuvat ja skriptit tallentuvat selaimeen ja CDN:ään pitkäksi aikaa. Jokainen uusi versio antaa muuttuneille tiedostoille uudet nimet, joten päivitykset näkyvät yhä.
  2. Trendaavat-lista lasketaan kerran 10 minuutin välein ja tallennetaan sovellusvälimuistiin. Jokainen kävijä noiden 10 minuutin aikana saa tallennetun tuloksen heti.
  3. Hinnat tallennetaan lyhyeksi ajaksi, ja välimuisti tyhjennetään aina, kun muokkaat tuotetta, joten asiakkaat eivät näe vanhaa hintaa pitkään.
  4. Varasto kassalla ei koskaan ole välimuistissa. Kun joku painaa ”Osta”, sovellus tarkistaa oikean tietokannan, joten se ei voi myydä tuotetta, joka on juuri loppunut.
  5. Ostoskori- ja tilisivut eivät koskaan tallennu jaettuihin välimuisteihin, koska ne ovat henkilökohtaisia.

Tulos: etusivu on nopea, tietokanta tekee paljon vähemmän työtä, eikä mikään rahan tai yksityisyyden kannalta tärkeä asia ole koskaan vanhentunut.

Keskeiset termit

TermiMerkitys
Välimuistiosuma / -ohiData löytyi välimuistista / se täytyi hakea lähteestä.
TTL (time to live)Kuinka kauan tallennettua kopiota pidetään tuoreena.
Vanhentunut dataTallennettu kopio, joka on vanhentunut.
InvalidointiTallennetun kopion tarkoituksellinen poistaminen, koska alkuperäinen muuttui.
Välimuistin ohittaminen (cache busting)Tiedoston nimen tai URL:n muuttaminen sen muuttuessa, jotta välimuistit hakevat uuden version.
Cache-ControlHTTP-otsake, joka kertoo selaimille ja CDN:ille, miten vastaus tallennetaan.
Kova päivitysSivun lataaminen niin, että selain jättää välimuistinsa huomiotta.
RedisSuosittu muistissa toimiva tietovarasto, usein käytettynä sovellusvälimuistina.

Yleisiä väärinkäsityksiä

  • ”Välimuisti on aina hyvä.” Väärän asian tallentaminen aiheuttaa todellisia virheitä: vanhoja hintoja, puuttuvia uusia julkaisuja tai pahimmillaan yhden käyttäjän yksityisen sivun näyttämisen toiselle. Tallenna harkiten.
  • ”Jos näen vanhan version, päivitykseni epäonnistui.” Yleensä ei. Kokeile kovaa päivitystä (Ctrl+Shift+R tai Cmd+Shift+R Macissa) tai yksityistä ikkunaa, ennen kuin oletat jotakin rikkinäiseksi.
  • ”Välimuisti korjaa hitaan sovelluksen.” Se peittää hitautta toistuvissa pyynnöissä. Ensimmäinen pyyntö on yhä hidas, ja jos taustalla on puuttuva tietokantaindeksi, korjaa sekin.
  • ”Minun pitäisi tallentaa kaikki mahdollisimman pitkään.” Pitkät välimuisti-ajat sopivat tiedostoille, jotka saavat uudet nimet muuttuessaan. HTML-sivuille ja datalle lyhyemmät ajat ovat turvallisempia.
  • ”Välimuistini tyhjentäminen korjaa asian kaikille.” Se tyhjentää vain sinun selaimesi. Kävijöillä ja CDN-välimuisteilla on yhä omat kopionsa.

Mitä pyytää tekoälyrakentajaltasi

  • ”Mitkä osat tästä sovelluksesta ovat hitaita, ja mitkä niistä voisi turvallisesti tallentaa välimuistiin?”
  • ”Tallenna [trendaava lista / API-tulos] [N] minuutiksi ja tyhjennä se, kun taustadata muuttuu.”
  • ”Varmista, ettei mitään sivua, jossa on henkilö- tai tilitietoja, voi tallentaa CDN:n tai jaetun välimuistin toimesta.”
  • ”Aseta pitkät välimuisti-ajat sormenjäljellisille staattisille tiedostoille ja lyhyet HTML:lle.”
  • ”Tallenna [ulkoisen API:n] vastaukset, jotta sitä ei kutsuta joka sivulatauksella – ja kerro, kuinka vanhentunutta data voi pahimmillaan olla.”
  • ”Näen julkaisun jälkeen vanhan version. Onko kyseessä selaimeni välimuisti vai onko jokin julkaisematta?”

Välimuisti Mythexissä

Kun julkaiset päivityksen Mythex-sovellukseen, dokumentaatio mainitsee, että CDN-välimuistit voivat jäädä hetkeksi jälkeen, ja julkisen URL:n kova päivitys näyttää uuden version – katso Kuinka julkaista. Sivu Hosting-rajat suosittelee myös staattisten resurssien tallentamista välimuistiin, koska hosting, tietokantaaika ja kaistanleveys maksetaan krediittisaldostasi. Tätä pidemmälle meneminen – kyselytulosten tai API-vastausten tallentaminen – on jotakin, mitä pyydät agentilta rakentamaan sovellukseesi.

Aiheeseen liittyvää: mikä CDN on, kuinka tehdä verkkosivustostasi nopeampi ja mikä on nopeusrajoitus.

Kysymykset

Mikä on välimuisti yksinkertaisesti selitettynä?

Välimuistiin tallennetaan kopio jostakin, jonka hankkiminen oli hidasta tai kallista, jotta seuraavalla kerralla se voidaan tarjota nopeasti tallennetusta kopiosta. Selaimet, CDN:t, palvelimet ja tietokannat käyttävät kaikki välimuisteja tehdäkseen sovelluksista nopeampia ja halvempia ajaa.

Miksi näen vielä verkkosivustoni vanhan version päivityksen jälkeen?

Selaimesi tai CDN todennäköisesti tarjoaa tallennetun kopion vanhoista tiedostoista. Kova päivitys (Ctrl+Shift+R Windowsissa, Cmd+Shift+R Macissa) korjaa yleensä asian. Kävijöille hyvin rakennetut sivustot antavat päivitetyille tiedostoille uudet nimet, jotta välimuisti hakee uuden version automaattisesti.

Mitä välimuistin tyhjentäminen tekee?

Selaimen välimuistin tyhjentäminen poistaa selaimen tallentamat kopiot tiedostoista ja sivuista, jolloin se lataa kaiken uudelleen seuraavalla kerralla. Se voi korjata sivuja, jotka näyttävät rikkinäisiltä tai vanhentuneilta, ja sivut latautuvat hieman hitaammin ensimmäisellä kerralla sen jälkeen.

Voiko välimuisti aiheuttaa ongelmia?

Kyllä. Pääriski on vanhentuneen datan tarjoaminen – vanha hinta tai vanhentunut varastosaldo – tai vielä pahempi: yksittäisen käyttäjän yksityisen sivun tallentaminen ja näyttäminen jollekin toiselle. Hyvät välimuistisäännöt päättävät, mitä voidaan tallentaa ja kuinka kauan, eikä henkilötietoja koskaan tallenneta jaettuihin välimuisteihin.

Mythex · Pricing · Rakenna mitä tahansa tekoälyllä · Verkkosivu- ja sovellusmallipohjat · Mythex vertailussa · Tekoälysovellusten rakentamisen sanasto · Ilmaiset työkalut tekoälysovellusten rakentamiseen · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Français Français (Canada) ગુજરાતી हिन्दी Hrvatski 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 简体中文 繁體中文(香港) 繁體中文(台灣)