Disk Cache — cihazın diskində məlumatların müvəqqəti saxlanması mexanizmidir, iOS tətbiqlərinə əvvəllər yüklənmiş resurslara təkrar girişi sürətləndirməyə imkan verir. Apple Developer Documentation, 2024-ə görə, Disk Cache şəbəkə istifadəsini azaldır, batareya yükünü aşağı salır və tətbiqin oflayn rejimdə işləməsini təmin edir. iOS bir neçə daxili keşləşdirmə mexanizmi təqdim edir: şəbəkə sorğuları üçün URLCache, operativ yaddaş üçün NSCache və Caches kataloqu vasitəsilə fərdi tətbiqlər.
Əsas məqamlar
Disk Cache — eyni məlumatlara sonrakı sorğuları sürətləndirmək məqsədilə məlumatların cihazın daimi yaddaşında (flash yaddaş) müvəqqəti saxlanması texnologiyasıdır. RAM keşdən fərqli olaraq, Disk Cache tətbiq və hətta cihaz yenidən başladıldıqdan sonra da məlumatları qoruyur.
iOS iki əsas keşləşdirmə səviyyəsi təqdim edir: operativ (NSCache, yaddaş) və disk (URLCache, fayl sistemi). Disk keşi operativ keşdən 10–100 dəfə yavaşdır, lakin şəbəkə sorğusundan əhəmiyyətli dərəcədə sürətlidir — fərq 2–3 sıra təşkil edə bilər. Optimal strategiya iki səviyyəli keşdən istifadə edir: isti məlumatlar üçün yaddaş, soyuq məlumatlar üçün disk.
Apple Performance Optimization Guide, 2023-ə görə, düzgün konfiqurasiya edilmiş Disk Cache təkrar baxışlarda məzmun yükləmə vaxtını 60–80% azaldır və trafik istehlakını 40–70% aşağı salır. Media məzmunu olan tətbiqlər üçün (şəkillər, video, audio) keşləşdirmə UX üçün kritik amildir.
URLCache — URLSession sorğuları üçün birləşdirilmiş keşi tətbiq edən daxili Foundation sinifidir. O, server cavablarını avtomatik olaraq diskdə və yaddaşda saxlayır, Cache-Control, Expires və ETag HTTP başlıqları əsasında keş ölçüsünü və invalidasiya siyasətlərini idarə edir.
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)
Keşləşdirmə siyasətləri URLCache keşlənmiş məlumatlardan nə vaxt istifadə ediləcəyini və nə vaxt yeni sorğu yerinə yetiriləcəyini müəyyən edir. Əsas siyasətlər: useProtocolCachePolicy (server başlıqları əsasında), reloadIgnoringLocalCacheData (həmişə serverdən), returnCacheDataElseLoad (əvvəlcə keş), returnCacheDataDontLoad (yalnız keş — oflayn rejim).
Cache-Control — serverin cavabla birlikdə göndərdiyi HTTP başlığıdır, max-age (saniyələrlə ömür müddəti), must-revalidate (aktuallığı yoxlamaq), no-cache (yoxlamadan istifadə etmə) və no-store (keşləmə) göstərir. iOS useProtocolCachePolicy siyasəti ilə URLCache istifadə edərkən bu başlıqlara avtomatik olaraq ciddi riayət edir.
Fərdi keş daxili URLCache kifayət etmədikdə lazımdır: işlənmiş şəkillərin, seriallaşdırılmış məlumat modellərinin və ya hesablama nəticələrinin saxlanması üçün. Belə hallarda tərtibatçı tətbiqin Sandbox-dakı Caches kataloqu əsasında öz keşləşdirmə sistemini yaradır.
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)
}
}
Keşin invalidasiya strategiyaları saxlanılan məlumatların nə vaxt köhnəlmiş sayılacağını müəyyən edir: TTL (Time-To-Live) — məlumatlar yazıldıqdan sonra sabit müddət yaşayır; event-driven — hadisənin baş verməsi ilə invalidasiya (məsələn, serverdə məlumatların yenilənməsi); version-based — API versiyası və ya məlumat formatı dəyişdikdə invalidasiya; LRU (Least Recently Used) — ölçü limiti aşıldıqda ən az istifadə olunan qeydlərin avtomatik silinməsi.
Praktiki qayda: TTL proqnozlaşdırıla bilən şəkildə köhnələn xəbərlər və məzmun üçün uyğundur. Event-driven — push bildirişləri vasitəsilə server tərəfindən idarə olunan məlumatlar üçün. Version-based — konfiqurasiyalar və məlumat modelləri keşi üçün. LRU — məhdud disk sahəsi olan media faylları üçün universal seçimdir.
Disk Cache performansı hit ratio ilə ölçülür — şəbəkəyə müraciət etmədən keşdən ödənilən sorğuların faizi. Yaxşı konfiqurasiya edilmiş şəkil keşi üçün tipik hit ratio 70–90%, API cavabları üçün 40–60%, axın videoları üçün 30–50% təşkil edir.
| Məlumat növü | Tipik hit ratio | Tövsiyə olunan keş ölçüsü |
|---|---|---|
| Şəkillər | 70–90% | 100–500 MB |
| API JSON cavabları | 40–60% | 10–50 MB |
| Video/audio | 30–50% | 500 MB — 1 GB |
| Şriftlər və resurslar | 90–99% | 5–20 MB |
| Veb məzmun | 50–70% | 50–200 MB |
iOS-da Disk Cache məhdudiyyətləri: sistem diskdə yer çatışmazlığı olduqda istənilən vaxt Caches kataloqunun məzmununu silə bilər. Bu davranış konfiqurasiya edilə bilməz — iOS keş fayllarının nə vaxt və hansının silinəcəyinə özü qərar verir. Buna görə də keş şəbəkədən və ya digər mənbələrdən bərpa edilə bilməyən məlumatları ehtiva etməməlidir.
Flash yaddaşa təsir: Disk Cache-ə tez-tez yazma flash yaddaşın aşınmasını sürətləndirir. iOS aşınmanı minimuma endirmək üçün TRIM və wear leveling istifadə edir, lakin tərtibatçılara həddindən artıq yazmadan qaçmaq tövsiyə olunur: eyni fayl üçün keşi 5 dəqiqədən tez yeniləməmək; kiçik yazmaları bir yerdə qruplaşdırmaq; diskdə saxlanması tələb olunmayan müvəqqəti məlumatlar üçün NSCache istifadə etmək.
İki səviyyəli keş — iOS tətbiqləri üçün standart arxitektura: tez-tez müraciət edilən məlumatlar üçün yaddaş (NSCache) və seanslar arasında saxlanmalı olan məlumatlar üçün disk (URLCache və ya fərdi). Yaddaşda ömür müddəti — dəqiqələr, diskdə — saatlar və ya günlər.
Şəkillərin keşləşdirilməsi: avtomatik invalidasiya, yaddaş idarəetməsi və asinxron disk yazması ilə iki səviyyəli keş tətbiq edən ixtisaslaşmış kitabxanalardan (Kingfisher, SDWebImage, Nuke) istifadə edin. Şəkil keşinin müstəqil tətbiqi dekodlaşdırma, rəng məkanı və miqyaslamanın nəzərə alınmasını tələb edir.
Keş və təhlükəsizlik: məxfi məlumatları (şifrələr, tokenlər, şəxsi məlumatlar) şifrələmədən diskdə keşləməyin. URLCache standart olaraq məlumatları şifrələmir — həssas məzmun üçün NSFileProtection və ya tətbiq səviyyəsində şifrələmədən istifadə edin. Avtorizasiya ilə şəbəkə sorğuları üçün .reloadIgnoringLocalCacheData siyasətindən istifadə edin.
Keş monitorinqi: hit ratio, cari keş ölçüsü və dəqiqədə yazma sayını izləyin. Əgər hit ratio 30% -dən aşağı düşərsə, keş səmərəsizdir və strategiya nəzərdən keçirilməli və ya ölçü artırılmalıdır. Point-Free (2024)-ə görə, keş monitorinqi iOS tətbiqlərinin performans optimallaşdırmasının ən az qiymətləndirilən təcrübələrindən biridir.
Tez-tez verilən suallar
Disk Cache — təkrar girişi sürətləndirmək üçün məlumatların cihazın diskində saxlanması texnologiyasıdır. iOS-da daxili URLCache HTTP cavablarını keşləyir, tərtibatçılar isə Caches kataloqu vasitəsilə fərdi keşlər yarada bilərlər.
RAM Cache (NSCache) məlumatları operativ yaddaşda saxlayır — daha sürətlidir, lakin tətbiq yenidən başladıqda itir. Disk Cache daha yavaşdır, lakin seanslar arasında qorunur. Optimal strategiya hər iki səviyyədən istifadə edir: isti məlumatlar üçün yaddaş, soyuq məlumatlar üçün disk.
Bəli, sistem yer çatışmazlığı olduqda istənilən vaxt Caches kataloqunun məzmununu silə bilər. Buna görə də keşdə bərpa edilə bilməyən məlumatları heç vaxt saxlamayın. İstifadəçi sənədləri üçün Documents kataloqundan istifadə edin.
Keş ölçüsü məlumat növündən asılıdır: şəkillər üçün 100–500 MB, API cavabları üçün 10–50 MB, video üçün 1 GB-a qədər. Hit ratio-nu izləyin — əgər 50% -dən aşağı düşərsə, keş ölçüsünü artırın və ya invalidasiya strategiyasını dəyişdirin.
URLCache.removeAllCachedResponses() daxili keşi təmizləyir. Fərdi keş üçün FileManager vasitəsilə Caches kataloqundakı faylları silin. Həmişə istifadəçiyə tətbiq parametrlərində keşi təmizləmək imkanı verin.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun