Disk Cache: mi ez, iOS lemezgyorsítótár és működési elvek

Szerző: IT Sectr Megjelenés: 2026-07-11 Olvasási idő: 7 perc

Disk Cache — az adatok ideiglenes tárolásának mechanizmusa az eszköz lemezén, amely lehetővé teszi az iOS alkalmazások számára a korábban betöltött erőforrásokhoz való ismételt hozzáférés felgyorsítását. A Apple Developer Documentation, 2024 szerint a Disk Cache csökkenti a hálózathasználatot, mérsékli az akkumulátor terhelését és biztosítja az alkalmazás offline módban történő működését. Az iOS számos beépített gyorsítótárazási mechanizmust kínál: URLCache a hálózati kérésekhez, NSCache a RAM-hoz és egyedi implementációk a Caches könyvtáron keresztül.

Főbb pontok

  • Disk Cache — adatok tárolása a lemezen az ismételt hozzáférés felgyorsításához és a forgalom csökkentéséhez
  • URLCache — beépített mechanizmus HTTP-kérések gyorsítótárazásához iOS-ben
  • Caches directory — speciális Sandbox könyvtár az alkalmazás ideiglenes adatai számára
  • A gyorsítótár érvénytelenítése kritikus az adatok aktualitása szempontjából — idő-, esemény- és verzióalapú stratégiák
  • A rendszer törölheti a gyorsítótárat, ha kevés a hely — a gyorsítótár nem tartalmazhat pótolhatatlan adatokat

Mi az a Disk Cache iOS-ben?

Disk Cache — az adatok ideiglenes tárolásának technológiája az eszköz állandó tárolóján (flash memória) a későbbi, ugyanazon adatokra irányuló kérések felgyorsítása érdekében. A RAM gyorsítótárral ellentétben a Disk Cache megőrzi az adatokat az alkalmazás és akár az eszköz újraindítása után is.

Az iOS két fő gyorsítótárazási szintet kínál: operatív (NSCache, memória) és lemez (URLCache, fájlrendszer). A lemezgyorsítótár 10–100-szor lassabb, mint az operatív, de jelentősen gyorsabb, mint egy hálózati kérés — a különbség 2–3 nagyságrend lehet. Az optimális stratégia kétszintű gyorsítótárat használ: memóriát a forró adatokhoz és lemezt a hideg adatokhoz.

Az Apple Performance Optimization Guide, 2023 szerint a megfelelően konfigurált Disk Cache 60–80%-kal csökkenti a tartalom betöltési idejét ismételt megtekintéseknél és 40–70%-kal mérsékli a forgalomfogyasztást. Médiatartalommal rendelkező alkalmazásoknál (képek, videók, audió) a gyorsítótárazás kritikus UX-tényező.

URLCache: beépített gyorsítótárazási mechanizmus

URLCache — egy beépített Foundation osztály, amely kombinált gyorsítótárat valósít meg URLSession kérésekhez. Automatikusan menti a szerver válaszait a lemezre és a memóriába, kezelve a gyorsítótár méretét és az érvénytelenítési politikákat a Cache-Control, Expires és ETag HTTP fejlécek alapján.

swift
import Foundation

let cache = URLCache(
    memoryCapacity: 50 * 1024 * 1024,
    diskCapacity: 200 * 1024 * 1024,
    diskPath: "network-cache"
)

URLCache.shared = cache

let config = URLSessionConfiguration.default
config.urlCache = cache
config.requestCachePolicy = .returnCacheDataElseLoad

let session = URLSession(configuration: config)

Gyorsítótárazási politikák Az URLCache meghatározza, mikor használja a gyorsítótárazott adatokat és mikor hajtson végre új kérést. Főbb politikák: useProtocolCachePolicy (a szerver fejlécei alapján), reloadIgnoringLocalCacheData (mindig a szerverről), returnCacheDataElseLoad (először a gyorsítótár), returnCacheDataDontLoad (csak gyorsítótár — offline mód).

Cache-Control — HTTP fejléc, amelyet a szerver a válasszal együtt küld, jelezve a max-age (élettartam másodpercben), must-revalidate (aktualitás ellenőrzése), no-cache (ne használd ellenőrzés nélkül) és no-store (ne tárold gyorsítótárban) paramétereket. Az iOS szigorúan betartja ezeket a fejléceket automatikusan, ha az URLCache-t használja a useProtocolCachePolicy politikával.

Egyedi gyorsítótárazási stratégiák és érvénytelenítés

Egyedi gyorsítótár akkor szükséges, ha a beépített URLCache nem elegendő: feldolgozott képek, szerializált adatmodellek vagy számítási eredmények tárolásához. Ilyen esetekben a fejlesztő saját gyorsítótárazási rendszert hoz létre az alkalmazás Sandbox-jában található Caches könyvtár alapján.

swift
class DiskCache<T: Codable> {
    private let cacheDir: URL
    private let encoder = JSONEncoder()
    private let decoder = JSONDecoder()

    init() {
        let paths = FileManager.default
            .urls(for: .cachesDirectory,
                     in: .userDomainMask)
        cacheDir = paths[0].appendingPathComponent(
            "data-cache", isDirectory: true
        )
        try? FileManager.default
            .createDirectory(at: cacheDir,
                             withIntermediateDirectories: true)
    }

    func set(value: T, for key: String) {
        let url = cacheDir.appendingPathComponent(
            SHA256.hash(key)
        )
        if let data = try? encoder.encode(value) {
            try? data.write(to: url)
        }
    }

    func get(for key: String) -> T? {
        let url = cacheDir.appendingPathComponent(
            SHA256.hash(key)
        )
        guard let data = try? Data(contentsOf: url) else { return nil }
        return try? decoder.decode(T.self, from: data)
    }

    func clearAll() {
        try? FileManager.default
            .removeItem(at: cacheDir)
    }
}

Gyorsítótár érvénytelenítési stratégiák határozzák meg, mikor tekintendők elavultnak a tárolt adatok: TTL (Time-To-Live) — az adatok rögzített ideig élnek az írás után; event-driven — érvénytelenítés esemény bekövetkeztekor (pl. adatok frissítése a szerveren); version-based — érvénytelenítés az API verziójának vagy az adatformátumnak a változásakor; LRU (Least Recently Used) — a legkevésbé használt bejegyzések automatikus eltávolítása a méretkorlát túllépésekor.

Gyakorlati szabály: A TTL a hírek és a kiszámíthatóan elavuló tartalmak számára alkalmas. Event-driven — a push értesítéseken keresztül a szerver által kezelt adatokhoz. Version-based — konfigurációkhoz és adatmodell-gyorsítótárakhoz. LRU — univerzális választás korlátozott lemezterülettel rendelkező médiafájlokhoz.

A gyorsítótár teljesítménye és korlátai

A Disk Cache teljesítményét a hit ratio méri — a gyorsítótárból, hálózati hozzáférés nélkül kiszolgált kérések százalékos aránya. A jól konfigurált képgyorsítótár tipikus hit ratio-ja 70–90%, API-válaszok esetén 40–60%, streaming videó esetén 30–50%.

AdattípusTipikus hit ratioAjánlott gyorsítótár méret
Képek70–90%100–500 MB
API JSON válaszok40–60%10–50 MB
Videó/audió30–50%500 MB — 1 GB
Betűtípusok és erőforrások90–99%5–20 MB
Web tartalom50–70%50–200 MB

A Disk Cache korlátai iOS-ben: a rendszer bármikor törölheti a Caches könyvtár tartalmát, ha kevés a lemezterület. Ez a viselkedés nem konfigurálható — az iOS maga dönti el, mikor és mely gyorsítótárazott fájlokat távolítsa el. Ezért a gyorsítótár nem tartalmazhat olyan adatokat, amelyek nem állíthatók helyre a hálózatból vagy más forrásokból.

Hatás a flash memóriára: a gyakori írás a Disk Cache-be felgyorsítja a flash memória kopását. Az iOS TRIM-et és wear levelinget használ a kopás minimalizálására, de a fejlesztőknek ajánlott kerülni a túlzott írást: ne frissítsék a gyorsítótárat gyakrabban, mint 5 percenként ugyanazon fájl esetében; csoportosítsák a kis írásokat egyetlenbe; használják az NSCache-t az ideiglenes adatokhoz, amelyeket nem kell lemezen tárolni.

Legjobb gyakorlatok a gyorsítótárazáshoz iOS-ben

Kétszintű gyorsítótár — szabványos architektúra iOS alkalmazásokhoz: memória (NSCache) a gyakran elért adatokhoz és lemez (URLCache vagy egyedi) a munkamenetek között megőrzendő adatokhoz. Élettartam a memóriában — percek, a lemezen — órák vagy napok.

Képek gyorsítótárazása: használjon specializált könyvtárakat (Kingfisher, SDWebImage, Nuke), amelyek automatikus érvénytelenítéssel, memóriakezeléssel és aszinkron lemezírásal rendelkező kétszintű gyorsítótárat valósítanak meg. A képgyorsítótár saját implementációja megköveteli a dekódolás, színtér és méretezés figyelembevételét.

Gyorsítótár és biztonság: ne tároljon bizalmas adatokat (jelszavak, tokenek, személyes adatok) titkosítás nélkül a lemezen. Az URLCache alapértelmezés szerint nem titkosítja az adatokat — használja az NSFileProtection-t vagy alkalmazásszintű titkosítást az érzékeny tartalomhoz. Hálózati kérésekhez engedélyezéssel használja a .reloadIgnoringLocalCacheData politikát.

Gyorsítótár figyelése: kövesse nyomon a hit ratio-t, a gyorsítótár aktuális méretét és az írások számát percenként. Ha a hit ratio 30% alá csökken — a gyorsítótár hatástalan, és felül kell vizsgálni a stratégiát vagy növelni a méretet. A Point-Free (2024) szerint a gyorsítótár figyelése az iOS alkalmazások teljesítményoptimalizálásának egyik leginkább alábecsült gyakorlata.

Gyakran ismételt kérdések

Mi az a Disk Cache iOS-ben?

Disk Cache — az adatok eszköz lemezén történő tárolásának technológiája az ismételt hozzáférés felgyorsítására. Az iOS-ben a beépített URLCache gyorsítótárazza a HTTP-válaszokat, a fejlesztők pedig egyéni gyorsítótárakat hozhatnak létre a Caches könyvtáron keresztül.

Miben különbözik a Disk Cache a RAM Cache-től?

RAM Cache (NSCache) a RAM-ban tárolja az adatokat — gyorsabb, de elveszik az alkalmazás újraindításakor. A Disk Cache lassabb, de megmarad a munkamenetek között. Az optimális stratégia mindkét szintet használja: memóriát a forró adatokhoz, lemezt a hideg adatokhoz.

Törölheti az iOS a gyorsítótáramat?

Igen, a rendszer bármikor törölheti a Caches könyvtár tartalmát, ha kevés a hely. Ezért soha ne tároljon a gyorsítótárban olyan adatokat, amelyek nem állíthatók helyre. A felhasználói dokumentumokhoz használja a Documents könyvtárat.

Hogyan válasszam ki a megfelelő gyorsítótár méretet?

A gyorsítótár mérete az adatok típusától függ: képeknél 100–500 MB, API-válaszoknál 10–50 MB, videónál akár 1 GB. Figyelje a hit ratio-t — ha 50% alá csökken, növelje a gyorsítótár méretét vagy változtassa meg az érvénytelenítési stratégiát.

Hogyan töröljem a gyorsítótárat egy iOS alkalmazásban?

Az URLCache.removeAllCachedResponses() törli a beépített gyorsítótárat. Egyedi gyorsítótár esetén törölje a fájlokat a Caches könyvtárból a FileManager segítségével. Mindig biztosítson lehetőséget a felhasználónak a gyorsítótár törlésére az alkalmazás beállításaiban.

Összefoglalás

  • Disk Cache — adatok ideiglenes tárolása a lemezen az ismételt hozzáférés felgyorsításához és a forgalom csökkentéséhez
  • URLCache — beépített Foundation mechanizmus HTTP-kérések gyorsítótárazásához Cache-Control támogatással
  • Caches directory — Sandbox könyvtár ideiglenes adatok számára, a rendszer által törölve, ha kevés a hely
  • Érvénytelenítés TTL, esemény, verzió vagy LRU útján történik — a választás az adatok típusától függ
  • Hit ratio — a gyorsítótár hatékonyságának kulcsmetrikája: 70%+ képeknél, 40–60% API-nál
  • Kétszintű gyorsítótár (RAM + Lemez) — szabványos architektúra iOS alkalmazásokhoz
  • Biztonság — a bizalmas adatokat nem szabad titkosítás nélkül a lemezen gyorsítótárazni

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is