Disk Cache: bu nima, iOS disk keshi va ishlash tamoyillari

Muallif: IT Sectr Nashr etilgan: 2026-07-11 O'qish vaqti: 7 daq

Disk Cache — bu qurilma diskida ma'lumotlarni vaqtincha saqlash mexanizmi bo'lib, iOS ilovalariga avval yuklangan resurslarga qayta kirishni tezlashtirish imkonini beradi. Apple Developer Documentation, 2024 ma'lumotlariga ko'ra, Disk Cache tarmoqdan foydalanishni kamaytiradi, batareya yukini pasaytiradi va ilovaning oflayn rejimda ishlashini ta'minlaydi. iOS bir nechta o'rnatilgan keshlashtirish mexanizmlarini taqdim etadi: tarmoq so'rovlari uchun URLCache, operativ xotira uchun NSCache va Caches katalogi orqali maxsus implementatsiyalar.

Asosiy fikrlar

  • Disk Cache — qayta kirishni tezlashtirish va trafikni kamaytirish uchun ma'lumotlarni diskda saqlash
  • URLCache — iOS-da HTTP so'rovlarini keshlashtirish uchun o'rnatilgan mexanizm
  • Caches directory — ilovaning vaqtinchalik ma'lumotlari uchun maxsus Sandbox katalogi
  • Keshni bekor qilish ma'lumotlarning dolzarbligi uchun juda muhim — vaqt, hodisa va versiya strategiyalari
  • Tizim keshnii tozalashi mumkin joy yetishmovchiligi bo'lganda — kesh almashtirib bo'lmaydigan ma'lumotlarni o'z ichiga olmasligi kerak

iOS-da Disk Cache nima?

Disk Cache — bu bir xil ma'lumotlarga keyingi so'rovlarni tezlashtirish maqsadida ma'lumotlarni qurilmaning doimiy xotirasida (flesh-xotira) vaqtincha saqlash texnologiyasidir. RAM keshdan farqli o'laroq, Disk Cache ma'lumotlarni ilova va hatto qurilma qayta ishga tushirilgandan keyin ham saqlaydi.

iOS ikkita asosiy keshlashtirish darajasini taqdim etadi: operativ (NSCache, xotira) va disk (URLCache, fayl tizimi). Disk keshi operativ keshdan 10–100 marta sekinroq, ammo tarmoq so'rovidan sezilarli darajada tezroq — farq 2 dan 3 gacha tartibni tashkil qilishi mumkin. Optimal strategiya ikki darajali keshdan foydalanadi: issiq ma'lumotlar uchun xotira, sovuq ma'lumotlar uchun disk.

Apple Performance Optimization Guide, 2023 ma'lumotlariga ko'ra, to'g'ri sozlangan Disk Cache takroriy ko'rishlarda kontentni yuklash vaqtini 60–80% ga qisqartiradi va trafik sarfini 40–70% ga kamaytiradi. Media kontentli ilovalar uchun (rasmlar, video, audio) keshlashtirish UX uchun muhim omildir.

URLCache: o'rnatilgan keshlashtirish mexanizmi

URLCache — bu URLSession so'rovlari uchun birlashtirilgan keshnii amalga oshiruvchi o'rnatilgan Foundation sinfidir. U server javoblarini avtomatik ravishda diskda va xotirada saqlaydi, Cache-Control, Expires va ETag HTTP sarlavhalari asosida kesh hajmini va bekor qilish siyosatlarini boshqaradi.

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)

Keshlashtirish siyosatlari URLCache keshlashtirilgan ma'lumotlardan qachon foydalanishni va qachon yangi so'rovni bajarishni belgilaydi. Asosiy siyosatlar: useProtocolCachePolicy (server sarlavhalari asosida), reloadIgnoringLocalCacheData (har doim serverdan), returnCacheDataElseLoad (avval kesh), returnCacheDataDontLoad (faqat kesh — oflayn rejim).

Cache-Control — server javob bilan birga yuboradigan HTTP sarlavhasi bo'lib, max-age (soniyalarda yashash muddati), must-revalidate (dolzarblikni tekshirish), no-cache (tekshirmasdan foydalanma) va no-store (keshlama) ni ko'rsatadi. iOS useProtocolCachePolicy siyosati bilan URLCache dan foydalanganda ushbu sarlavhalarga avtomatik ravishda qat'iy rioya qiladi.

Maxsus keshlashtirish strategiyalari va bekor qilish

Maxsus kesh o'rnatilgan URLCache yetarli bo'lmaganda zarur: qayta ishlangan rasmlarni, seriyalashtirilgan ma'lumot modellarini yoki hisoblash natijalarini saqlash uchun. Bunday hollarda dasturchi ilovaning Sandbox-dagi Caches katalogi asosida o'zining keshlashtirish tizimini yaratadi.

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

Keshni bekor qilish strategiyalari saqlangan ma'lumotlar qachon eskirgan deb hisoblanishini belgilaydi: TTL (Time-To-Live) — ma'lumotlar yozilgandan keyin belgilangan vaqt davomida yashaydi; event-driven — hodisa yuz berganda bekor qilish (masalan, serverda ma'lumotlarni yangilash); version-based — API versiyasi yoki ma'lumot formati o'zgarganda bekor qilish; LRU (Least Recently Used) — hajm chegarasidan oshib ketganda eng kam ishlatilgan yozuvlarni avtomatik o'chirish.

Amaliy qoida: TTL bashorat qilinadigan tarzda eskiradigan yangiliklar va kontent uchun mos keladi. Event-driven — push bildirishnomalari orqali server tomonidan boshqariladigan ma'lumotlar uchun. Version-based — konfiguratsiyalar va ma'lumot modellari keshi uchun. LRU — cheklangan disk maydoniga ega media fayllar uchun universal tanlovdir.

Keshning ishlashi va cheklovlari

Disk Cache ishlashi hit ratio bilan o'lchanadi — tarmoqqa murojaat qilmasdan keshdan qondirilgan so'rovlarning foizi. Yaxshi sozlangan rasm keshi uchun odatiy hit ratio 70–90%, API javoblari uchun 40–60%, oqimli video uchun 30–50% ni tashkil qiladi.

Ma'lumot turiOdatiy hit ratioTavsiya etilgan kesh hajmi
Rasmlar70–90%100–500 MB
API JSON javoblari40–60%10–50 MB
Video/audio30–50%500 MB — 1 GB
Shriftlar va resurslar90–99%5–20 MB
Veb-kontent50–70%50–200 MB

iOS-da Disk Cache cheklovlari: tizim diskda joy yetishmovchiligi bo'lganda istalgan vaqtda Caches katalogining mazmunini o'chirishi mumkin. Bu xatti-harakat sozlanmaydi — iOS kesh fayllarini qachon va qaysilarini o'chirishni o'zi hal qiladi. Shuning uchun kesh tarmoqdan yoki boshqa manbalardan tiklab bo'lmaydigan ma'lumotlarni o'z ichiga olmasligi kerak.

Flesh-xotiraga ta'siri: Disk Cache-ga tez-tez yozish flesh-xotiraning eskirishini tezlashtiradi. iOS eskirishni minimallashtirish uchun TRIM va wear leveling dan foydalanadi, ammo dasturchilarga haddan tashqari yozishdan qochish tavsiya etiladi: bir fayl uchun keshnii 5 daqiqadan tez-tez yangilamaslik; kichik yozishlarni birlashtirish; diskda saqlanishi shart bo'lmagan vaqtinchalik ma'lumotlar uchun NSCache dan foydalanish.

iOS-da keshlashtirishning eng yaxshi amaliyotlari

Ikki darajali kesh — iOS ilovalari uchun standart arxitektura: tez-tez murojaat qilinadigan ma'lumotlar uchun xotira (NSCache) va seanslar orasida saqlanishi kerak bo'lgan ma'lumotlar uchun disk (URLCache yoki maxsus). Xotirada yashash muddati — daqiqalar, diskda — soatlar yoki kunlar.

Rasmlarni keshlashtirish: avtomatik bekor qilish, xotira boshqaruvi va asinxron diskka yozish bilan ikki darajali keshnii amalga oshiradigan ixtisoslashtirilgan kutubxonalardan (Kingfisher, SDWebImage, Nuke) foydalaning. Rasm keshnii mustaqil amalga oshirish dekodlash, rang fazosi va masshtablashni hisobga olishni talab qiladi.

Kesh va xavfsizlik: maxfiy ma'lumotlarni (parollar, tokenlar, shaxsiy ma'lumotlar) shifrlamasdan diskda keshlamang. URLCache sukut bo'yicha ma'lumotlarni shifrlamaydi — nozik kontent uchun NSFileProtection yoki ilova darajasida shifrlashdan foydalaning. Avtorizatsiyali tarmoq so'rovlari uchun .reloadIgnoringLocalCacheData siyosatidan foydalaning.

Kesh monitoringi: hit ratio, joriy kesh hajmi va daqiqada yozish sonini kuzatib boring. Agar hit ratio 30% dan pastga tushsa — kesh samarasiz va strategiyani qayta ko'rib chiqish yoki hajmini oshirish talab etiladi. Point-Free (2024) ma'lumotlariga ko'ra, kesh monitoringi iOS ilovalari ishlashini optimallashtirishning eng kam baholangan amaliyotlaridan biridir.

Tez-tez so'raladigan savollar

iOS-da Disk Cache nima?

Disk Cache — qayta kirishni tezlashtirish uchun ma'lumotlarni qurilma diskida saqlash texnologiyasi. iOS-da o'rnatilgan URLCache HTTP javoblarini keshlashtiradi, dasturchilar esa Caches katalogi orqali maxsus kesh yaratishlari mumkin.

Disk Cache RAM Cache-dan qanday farq qiladi?

RAM Cache (NSCache) ma'lumotlarni operativ xotirada saqlaydi — tezroq, lekin ilova qayta ishga tushirilganda yo'qoladi. Disk Cache sekinroq, ammo seanslar orasida saqlanadi. Optimal strategiya ikkala darajadan foydalanadi: issiq ma'lumotlar uchun xotira, sovuq ma'lumotlar uchun disk.

iOS mening keshnii o'chira oladimi?

Ha, tizim joy yetishmovchiligi bo'lganda istalgan vaqtda Caches katalogining mazmunini o'chirishi mumkin. Shuning uchun keshdda tiklab bo'lmaydigan ma'lumotlarni hech qachon saqlamang. Foydalanuvchi hujjatlari uchun Documents katalogidan foydalaning.

To'g'ri kesh hajmini qanday tanlash mumkin?

Kesh hajmi ma'lumot turiga bog'liq: rasmlar uchun 100–500 MB, API javoblari uchun 10–50 MB, video uchun 1 GB gacha. Hit ratio ni kuzatib boring — agar 50% dan pastga tushsa, kesh hajmini oshiring yoki bekor qilish strategiyasini o'zgartiring.

iOS ilovasida keshnii qanday tozalash mumkin?

URLCache.removeAllCachedResponses() o'rnatilgan keshnii tozalaydi. Maxsus kesh uchun FileManager orqali Caches katalogidagi fayllarni o'chiring. Har doim foydalanuvchiga ilova sozlamalarida keshnii tozalash imkoniyatini bering.

Xulosa

  • Disk Cache — qayta kirishni tezlashtirish va trafikni kamaytirish uchun ma'lumotlarni diskda vaqtincha saqlash
  • URLCache — Cache-Control qo'llab-quvvatlashi bilan HTTP so'rovlarini keshlashtirish uchun o'rnatilgan Foundation mexanizmi
  • Caches directory — vaqtinchalik ma'lumotlar uchun Sandbox katalogi, tizim tomonidan joy yetishmovchiligida tozalanadi
  • Bekor qilish TTL, hodisa, versiya yoki LRU orqali amalga oshiriladi — tanlov ma'lumot turiga bog'liq
  • Hit ratio — kesh samaradorligining asosiy ko'rsatkichi: rasmlar uchun 70%+, API uchun 40–60%
  • Ikki darajali kesh (RAM + Disk) — iOS ilovalari uchun standart arxitektura
  • Xavfsizlik — maxfiy ma'lumotlar shifrlamasdan diskda keshlashtirilmasligi kerak

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing