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 — 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 — 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.
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 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.
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.
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 turi | Odatiy hit ratio | Tavsiya etilgan kesh hajmi |
|---|---|---|
| Rasmlar | 70–90% | 100–500 MB |
| API JSON javoblari | 40–60% | 10–50 MB |
| Video/audio | 30–50% | 500 MB — 1 GB |
| Shriftlar va resurslar | 90–99% | 5–20 MB |
| Veb-kontent | 50–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.
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
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.
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.
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.
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.
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
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.