Disk Cache: шта је то, диск кеш iOS и принципи рада

Аутор: IT Sectr Објављено: 2026-07-11 Време читања: 7 мин

Disk Cache — је механизам привременог чувања података на диску уређаја, који омогућава iOS апликацијама да убрзају поновни приступ претходно учитаним ресурсима. Према Apple Developer Documentation, 2024, Disk Cache смањује употребу мреже, смањује оптерећење батерије и обезбеђује рад апликације у офлајн режиму. iOS пружа неколико уграђених механизама кеширања: URLCache за мрежне захтеве, NSCache за оперативну меморију и прилагођене имплементације преко директоријума Caches.

Главне тачке

  • Disk Cache — чување података на диску ради убрзања поновног приступа и смањења саобраћаја
  • URLCache — уграђени механизам кеширања HTTP захтева у iOS-у
  • Caches directory — посебан Sandbox директоријум за привремене податке апликације
  • Инвалидација кеша је критична за актуелност података — стратегије по времену, догађају и верзији
  • Систем може обрисати кеш при недостатку простора — кеш не сме садржати незаменљиве податке

Шта је Disk Cache у iOS-у?

Disk Cache — је технологија привременог чувања података на сталном медијуму уређаја (флеш меморији) ради убрзавања накнадних захтева ка истим подацима. За разлику од RAM кеша, Disk Cache чува податке након поновног покретања апликације, па чак и уређаја.

iOS пружа два главна нивоа кеширања: оперативни (NSCache, меморија) и диск (URLCache, систем датотека). Диск кеш је 10–100 пута спорији од оперативног, али значајно бржи од мрежног захтева — разлика може бити 2 до 3 реда величине. Оптимална стратегија користи двонивоски кеш: меморију за вруће податке и диск за хладне.

Према Apple Performance Optimization Guide, 2023, правилно конфигурисан Disk Cache смањује време учитавања садржаја за 60–80% за поновне прегледе и смањује потрошњу саобраћаја за 40–70%. За апликације са медијским садржајем (слике, видео, аудио), кеширање је критичан фактор UX-а.

URLCache: уграђени механизам кеширања

URLCache — је уграђена Foundation класа која имплементира комбиновани кеш за URLSession захтеве. Она аутоматски чува одговоре сервера на диску и у меморији, управљајући величином кеша и политикама инвалидације на основу HTTP заглавља Cache-Control, Expires и 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)

Политике кеширања URLCache одређују када користити кеширане податке, а када извршити нови захтев. Главне политике: useProtocolCachePolicy (према заглављима сервера), reloadIgnoringLocalCacheData (увек са сервера), returnCacheDataElseLoad (прво кеш), returnCacheDataDontLoad (само кеш — офлајн режим).

Cache-Control — HTTP заглавље које сервер шаље уз одговор, наводећи max-age (време живота у секундама), must-revalidate (провера актуелности), no-cache (не користи без провере) и no-store (не кеширај). iOS строго поштује ова заглавља аутоматски при коришћењу URLCache са политиком useProtocolCachePolicy.

Прилагођене стратегије кеширања и инвалидација

Прилагођени кеш је неопходан када уграђени URLCache није довољан: за чување обрађених слика, серијализованих модела података или резултата прорачуна. У таквим случајевима, програмер креира сопствени систем кеширања заснован на директоријуму Caches у Sandbox-у апликације.

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

Стратегије инвалидације кеша одређују када се ускладиштени подаци сматрају застарелим: TTL (Time-To-Live) — подаци живе фиксно време након уписа; event-driven — инвалидација по настанку догађаја (нпр. ажурирање података на серверу); version-based — инвалидација при промени верзије API-ја или формата података; LRU (Least Recently Used) — аутоматско уклањање најмање коришћених записа при прекорачењу лимита величине.

Практично правило: TTL је погодан за вести и садржај који застарева предвидљиво. Event-driven — за податке којима управља сервер путем push обавештења. Version-based — за конфигурације и кеш модела података. LRU — универзалан избор за медијске датотеке са ограниченим диском простором.

Перформансе и ограничења кеша

Перформансе Disk Cache-а мере се hit ratio-ом — проценат захтева задовољених из кеша без обраћања мрежи. Типичан hit ratio за добро конфигурисан кеш слика је 70–90%, за API одговоре — 40–60%, за стримовање видеа — 30–50%.

Тип податакаТипичан hit ratioПрепоручена величина кеша
Слике70–90%100–500 MB
API JSON одговори40–60%10–50 MB
Видео/аудио30–50%500 MB — 1 GB
Фонтови и ресурси90–99%5–20 MB
Веб садржај50–70%50–200 MB

Ограничења Disk Cache-а у iOS-у: систем може обрисати садржај директоријума Caches у било ком тренутку при недостатку простора на диску. Ово понашање се не може конфигурисати — iOS сам одлучује када и које кеш датотеке обрисати. Због тога кеш не сме садржати податке који се не могу повратити из мреже или других извора.

Утицај на флеш меморију: често уписивање у Disk Cache убрзава хабање флеш меморије. iOS користи TRIM и wear leveling за минимизацију хабања, али програмерима се препоручује да избегавају претерано уписивање: не ажурирати кеш чешће од једном у 5 минута за исти фајл; груписати мале уписe у један; користити NSCache за привремене податке које није потребно чувати на диску.

Најбоље праксе кеширања у iOS-у

Двонивоски кеш — стандардна архитектура за iOS апликације: меморија (NSCache) за податке којима се често приступа и диск (URLCache или прилагођени) за податке које треба сачувати између сесија. Време живота у меморији — минути, на диску — сати или дани.

Кеширање слика: користите специјализоване библиотеке (Kingfisher, SDWebImage, Nuke) које имплементирају двонивоски кеш са аутоматском инвалидацијом, управљањем меморијом и асинхроним уписом на диск. Самостална имплементација кеша слика захтева узимање у обзир декодирања, простора боја и скалирања.

Кеш и безбедност: не кеширајте поверљиве податке (лозинке, токене, личне податке) на диску без шифровања. URLCache подразумевано не шифрује податке — користите NSFileProtection или шифровање на нивоу апликације за осетљив садржај. За мрежне захтеве са ауторизацијом користите политику .reloadIgnoringLocalCacheData.

Надгледање кеша: пратите hit ratio, тренутну величину кеша и број уписа у минуту. Ако hit ratio падне испод 30% — кеш је неефикасан и захтева преиспитивање стратегије или повећање величине. Према Point-Free (2024), надгледање кеша је једна од најпотцењенијих пракси оптимизације перформанси iOS апликација.

Често постављана питања

Шта је Disk Cache у iOS-у?

Disk Cache — технологија чувања података на диску уређаја ради убрзања поновног приступа. У iOS-у уграђени URLCache кешира HTTP одговоре, а програмери могу креирати прилагођене кешеве преко директоријума Caches.

Чим се Disk Cache разликује од RAM Cache-а?

RAM Cache (NSCache) чува податке у оперативној меморији — бржи је, али се губи при поновном покретању апликације. Disk Cache је спорији, али се чува између сесија. Оптимална стратегија користи оба нивоа: меморију за вруће податке, диск за хладне.

Може ли iOS обрисати мој кеш?

Да, систем може обрисати садржај директоријума Caches у било ком тренутку при недостатку простора. Зато никада не чувајте у кешу податке који се не могу повратити. За корисничке документе користите директоријум Documents.

Како изабрати праву величину кеша?

Величина кеша зависи од типа података: за слике 100–500 MB, за API одговоре 10–50 MB, за видео до 1 GB. Пратите hit ratio — ако падне испод 50%, повећајте величину кеша или промените стратегију инвалидације.

Како обрисати кеш у iOS апликацији?

URLCache.removeAllCachedResponses() брише уграђени кеш. За прилагођени кеш, обришите датотеке из директоријума Caches путем FileManager-а. Увек пружите кориснику могућност да обрише кеш у подешавањима апликације.

Закључак

  • Disk Cache — привремено чување података на диску ради убрзања поновног приступа и смањења саобраћаја
  • URLCache — уграђени Foundation механизам за кеширање HTTP захтева са подршком за Cache-Control
  • Caches directory — Sandbox директоријум за привремене податке, који систем брише при недостатку простора
  • Инвалидација кеша се врши путем TTL-а, догађаја, верзије или LRU-а — избор зависи од типа података
  • Hit ratio — кључна метрика ефикасности кеша: 70%+ за слике, 40–60% за API
  • Двонивоски кеш (RAM + Диск) — стандардна архитектура за iOS апликације
  • Безбедност — поверљиви подаци не смеју се кеширати на диску без шифровања

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође