Disk Cache: co to je, disková mezipaměť iOS a principy fungování

Autor: IT Sectr Publikováno: 2026-07-11 Doba čtení: 7 min

Disk Cache — je mechanismus dočasného ukládání dat na disk zařízení, který umožňuje aplikacím iOS urychlit opakovaný přístup k dříve načteným zdrojům. Podle Apple Developer Documentation, 2024 Disk Cache snižuje využití sítě, snižuje zatížení baterie a zajišťuje provoz aplikace v offline režimu. iOS poskytuje několik vestavěných mechanismů ukládání do mezipaměti: URLCache pro síťové požadavky, NSCache pro operační paměť a vlastní implementace prostřednictvím adresáře Caches.

Hlavní body

  • Disk Cache — ukládání dat na disk pro urychlení opakovaného přístupu a snížení provozu
  • URLCache — vestavěný mechanismus ukládání HTTP požadavků do mezipaměti v iOS
  • Caches directory — speciální adresář Sandbox pro dočasná data aplikace
  • Invalidace mezipaměti je kritická pro aktuálnost dat — strategie podle času, události a verze
  • Systém může vyčistit mezipaměť při nedostatku místa — mezipaměť by neměla obsahovat nenahraditelná data

Co je Disk Cache v iOS?

Disk Cache — je technologie dočasného ukládání dat na trvalé úložiště zařízení (flash paměť) za účelem urychlení následných požadavků na stejná data. Na rozdíl od mezipaměti RAM si Disk Cache uchovává data po restartu aplikace a dokonce i zařízení.

iOS poskytuje dvě hlavní úrovně ukládání do mezipaměti: operační (NSCache, paměť) a diskovou (URLCache, souborový systém). Disková mezipaměť je 10–100krát pomalejší než operační, ale výrazně rychlejší než síťový požadavek — rozdíl může být 2 až 3 řády. Optimální strategie využívá dvouúrovňovou mezipaměť: paměť pro horká data a disk pro studená data.

Podle Apple Performance Optimization Guide, 2023 správně nakonfigurovaná Disk Cache zkracuje dobu načítání obsahu o 60–80% pro opakovaná zobrazení a snižuje spotřebu provozu o 40–70%. Pro aplikace s multimediálním obsahem (obrázky, video, audio) je ukládání do mezipaměti kritickým faktorem UX.

URLCache: vestavěný mechanismus ukládání do mezipaměti

URLCache — je vestavěná třída Foundation, která implementuje kombinovanou mezipaměť pro požadavky URLSession. Automaticky ukládá odpovědi serveru na disk a do paměti, spravuje velikost mezipaměti a politiky invalidace na základě HTTP hlaviček Cache-Control, Expires a ETag.

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)

Politiky ukládání do mezipaměti URLCache určují, kdy použít data z mezipaměti a kdy provést nový požadavek. Hlavní politiky: useProtocolCachePolicy (podle hlaviček serveru), reloadIgnoringLocalCacheData (vždy ze serveru), returnCacheDataElseLoad (nejprve mezipaměť), returnCacheDataDontLoad (pouze mezipaměť — offline režim).

Cache-Control — HTTP hlavička, kterou server odesílá spolu s odpovědí, udávající max-age (životnost v sekundách), must-revalidate (kontrola aktuálnosti), no-cache (nepoužívat bez ověření) a no-store (neukládat do mezipaměti). iOS tato hlavičky striktně dodržuje automaticky při použití URLCache s politikou useProtocolCachePolicy.

Vlastní strategie ukládání do mezipaměti a invalidace

Vlastní mezipaměť je nezbytná, když vestavěný URLCache nestačí: pro ukládání zpracovaných obrázků, serializovaných datových modelů nebo výsledků výpočtů. V takových případech vývojář vytváří vlastní systém ukládání do mezipaměti založený na adresáři Caches v Sandboxu aplikace.

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)
    }
}

Strategie invalidace mezipaměti určují, kdy jsou uložená data považována za zastaralá: TTL (Time-To-Live) — data žijí pevně stanovenou dobu po zápisu; event-driven — invalidace po výskytu události (např. aktualizace dat na serveru); version-based — invalidace při změně verze API nebo formátu dat; LRU (Least Recently Used) — automatické odstranění nejméně používaných záznamů při překročení limitu velikosti.

Praktické pravidlo: TTL je vhodné pro zprávy a obsah, který zastarává předvídatelným způsobem. Event-driven — pro data spravovaná serverem prostřednictvím push oznámení. Version-based — pro konfigurace a mezipaměť datových modelů. LRU — univerzální volba pro multimediální soubory s omezeným místem na disku.

Výkon a omezení mezipaměti

Výkon Disk Cache se měří pomocí hit ratio — procento požadavků obsloužených z mezipaměti bez přístupu k síti. Typické hit ratio pro dobře nakonfigurovanou mezipaměť obrázků je 70–90%, pro odpovědi API — 40–60%, pro streamované video — 30–50%.

Typ datTypické hit ratioDoporučená velikost mezipaměti
Obrázky70–90%100–500 MB
Odpovědi API JSON40–60%10–50 MB
Video/audio30–50%500 MB — 1 GB
Písma a zdroje90–99%5–20 MB
Webový obsah50–70%50–200 MB

Omezení Disk Cache v iOS: systém může kdykoli odstranit obsah adresáře Caches při nedostatku místa na disku. Toto chování nelze konfigurovat — iOS sám rozhoduje, kdy a které soubory mezipaměti odstranit. Proto by mezipaměť neměla obsahovat data, která nelze obnovit ze sítě nebo jiných zdrojů.

Dopad na flash paměť: častý zápis do Disk Cache urychluje opotřebení flash paměti. iOS používá TRIM a wear leveling pro minimalizaci opotřebení, ale vývojářům se doporučuje vyhnout se nadměrnému zápisu: neaktualizovat mezipaměť častěji než jednou za 5 minut pro stejný soubor; seskupovat malé zápisy do jednoho; používat NSCache pro dočasná data, která není nutné ukládat na disk.

Nejlepší postupy ukládání do mezipaměti v iOS

Dvouúrovňová mezipaměť — standardní architektura pro iOS aplikace: paměť (NSCache) pro často přistupovaná data a disk (URLCache nebo vlastní) pro data, která by měla být zachována mezi relacemi. Životnost v paměti — minuty, na disku — hodiny nebo dny.

Ukládání obrázků do mezipaměti: používejte specializované knihovny (Kingfisher, SDWebImage, Nuke), které implementují dvouúrovňovou mezipaměť s automatickou invalidací, správou paměti a asynchronním zápisem na disk. Vlastní implementace mezipaměti obrázků vyžaduje zohlednění dekódování, barevného prostoru a škálování.

Mezipaměť a zabezpečení: neukládejte důvěrná data (hesla, tokeny, osobní údaje) na disk bez šifrování. URLCache ve výchozím nastavení data nešifruje — používejte NSFileProtection nebo šifrování na úrovni aplikace pro citlivý obsah. Pro síťové požadavky s autorizací používejte politiku .reloadIgnoringLocalCacheData.

Sledování mezipaměti: sledujte hit ratio, aktuální velikost mezipaměti a počet zápisů za minutu. Pokud hit ratio klesne pod 30% — mezipaměť je neefektivní a vyžaduje revizi strategie nebo zvětšení velikosti. Podle Point-Free (2024) je sledování mezipaměti jednou z nejvíce podceňovaných praktik optimalizace výkonu iOS aplikací.

Často kladené otázky

Co je Disk Cache v iOS?

Disk Cache — technologie ukládání dat na disk zařízení pro urychlení opakovaného přístupu. V iOS vestavěný URLCache ukládá HTTP odpovědi do mezipaměti a vývojáři mohou vytvářet vlastní mezipaměti prostřednictvím adresáře Caches.

Jak se liší Disk Cache od RAM Cache?

RAM Cache (NSCache) ukládá data do operační paměti — je rychlejší, ale ztrácí se při restartu aplikace. Disk Cache je pomalejší, ale uchovává se mezi relacemi. Optimální strategie využívá obě úrovně: paměť pro horká data, disk pro studená data.

Může iOS odstranit mou mezipaměť?

Ano, systém může kdykoli odstranit obsah adresáře Caches při nedostatku místa. Proto nikdy neukládejte do mezipaměti data, která nelze obnovit. Pro uživatelské dokumenty používejte adresář Documents.

Jak vybrat správnou velikost mezipaměti?

Velikost mezipaměti závisí na typu dat: pro obrázky 100–500 MB, pro odpovědi API 10–50 MB, pro video až 1 GB. Sledujte hit ratio — pokud klesne pod 50%, zvětšete velikost mezipaměti nebo změňte strategii invalidace.

Jak vyčistit mezipaměť v iOS aplikaci?

URLCache.removeAllCachedResponses() vyčistí vestavěnou mezipaměť. Pro vlastní mezipaměť odstraňte soubory z adresáře Caches pomocí FileManager. Vždy poskytněte uživateli možnost vyčistit mezipaměť v nastavení aplikace.

Shrnutí

  • Disk Cache — dočasné ukládání dat na disk pro urychlení opakovaného přístupu a snížení provozu
  • URLCache — vestavěný Foundation mechanismus pro ukládání HTTP požadavků do mezipaměti s podporou Cache-Control
  • Caches directory — adresář Sandbox pro dočasná data, čištěný systémem při nedostatku místa
  • Invalidace mezipaměti se provádí pomocí TTL, události, verze nebo LRU — výběr závisí na typu dat
  • Hit ratio — klíčová metrika účinnosti mezipaměti: 70%+ pro obrázky, 40–60% pro API
  • Dvouúrovňová mezipaměť (RAM + Disk) — standardní architektura pro iOS aplikace
  • Bezpečnost — důvěrná data by neměla být ukládána do mezipaměti na disk bez šifrování

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také