Disk Cache डिवाइस की डिस्क पर डेटा को अस्थायी रूप से संग्रहीत करने का एक तंत्र है, जो iOS एप्लिकेशनों को पहले से लोड की गई संसाधनों तक बार-बार पहुंचने में तेजी लाने में सक्षम बनाता है। Apple Developer Documentation, 2024 के अनुसार, Disk Cache नेटवर्क उपयोग कम करता है, बैटरी पर भार कम करता है और ऑफलाइन मोड में एप्लिकेशन का संचालन सक्षम करता है। iOS कई अंतर्निर्मित कैशिंग तंत्र प्रदान करता है: नेटवर्क अनुरोधों के लिए URLCache, RAM के लिए NSCache और Caches निर्देशिका के माध्यम से कस्टम कार्यान्वयन।
मुख्य बातें
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 एक निर्मित Foundation क्लास है जो URLSession अनुरोधों के लिए एक संयुक्त कैश को लागू करता है। यह Cache-Control, Expires और ETag जैसे HTTP हेडर्स के आधार पर कैश आकार और अमान्यकरण नीतियों का प्रबंधन करते हुए, सर्वर प्रतिक्रियाओं को स्वचालित रूप से डिस्क और मेमरी में सहेज करता है।
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 (कैश न करें) निर्दिष्ट करता है। useProtocolCachePolicy नीति के साथ URLCache का उपयोग करते समय iOS स्वचालित रूप से इन हेडर्स का सत्यतापूर्वक पालन करता है।
कस्टम कैशिंग तब आवश्यक होती है जब निर्मित URLCache अपर्याप्त हो — संसोधित छवियों, सीरियलाइज़ड डेटा मॉडल या गणना परिणामों को संग्रहीत करने के लिए। ऐसे मामलों में, डिवेलपर्स एप्लिकेशन के Sandbox में Caches निर्देशिका के आधार पर अपनी खुद की कैशिंग प्रणाली बनाते हैं।
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) — डेटा लिखने के बाद एक निश्चित समय तक रहता है; इवेंट-ड्रिव्न — किसी घटना (जैसे सर्वर पर डेटा अपडेट) के आधार पर अमान्यकरण; संस्करण-आधारित — API संस्करण या डेटा प्रारूप बदलने पर अमान्यकरण; LRU (Least Recently Used) — आकार सीमा पार करने पर सबसे कम उपयोग की गई प्रविष्टियों को स्वचालित हटाना।
व्यावहारिक नियम: TTL समाचार और उस सामग्री के लिए उपयुक्त है जो पूर्वानुमान रूप से पुरानी हो जाती है। इवेंट-ड्रिव्न पुश नॉटिफिकेशन के माध्यम से सर्वर प्रबंधित डेटा के लिए है। संस्करण-आधारित कॉन्फ़िगरेशन और डेटा मॉडल कैश के लिए है। 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 |
iOS में Disk Cache की सीमाएँ: सिस्टम जब डिस्क स्थान कम होता है तब किसी भी समय Caches निर्देशिका की सामग्री को हटा सकता है। यह व्यवहार कॉन्फ़िगर करने योग्य नहीं है — iOS तय करता है कि कब और कौन सी कैश फ़ाइलें हटानी हैं। इसलिए, कैश में ऐसा डेटा नहीं होना चाहिए जो नेटवर्क या अन्य स्रोतों से प्राप्त नहीं किया जा सकता।
फ्लैश मेमरी पर प्रभाव: Disk Cache में बार-बार लिखने से फ्लैश स्टोरेज का घिसाव तेज़ होता है। iOS घिसाव कम करने के लिए TRIM और wear leveling का उपयोग करता है, लेकिन डिवेलपर्स को अत्यधिक लेखन से बचने की सलाह दी जाती है: एक ही फ़ाइल के लिए हर 5 मिनट में एक से अधिक बार कैश अपडेट न करें; छोटी लेखण को एक साथ समूहबद्ध करें; अस्थायी डेटा के लिए NSCache का उपयोग करें जिसे डिस्क पर बनाए रखने की आवश्यकता नहीं है।
दो-स्तरीय कैश iOS एप्लिकेशनों के लिए मानक आर्किटेक्चर है: बार-बार एक्सेस किए जाने वाले डेटा के लिए मेमरी (NSCache), और सत्रों के बीच बनाए रखने वाले डेटा के लिए डिस्क (URLCache या कस्टम)। मेमरी में जीवनकाल — मिनट, डिस्क पर — घंटे या दिन।
छवि कैशिंग: विशेषज्ञ लाइब्रेरी (Kingfisher, SDWebImage, Nuke) का उपयोग करें जो स्वचालित अमान्यकरण, मेमरी प्रबंधन और अतुल्यकालिक डिस्क लेखन के साथ दो-स्तरीय कैश लागू करती हैं। कस्टम इमेज कैश को लागू करने के लिए डिकोडिंग, रंग स्थान और स्केलिंग पर विचार करने की आवश्यकता होती है।
कैश और सुरक्षा: एन्क्रिप्शन के बिना संवेदनशील डेटा (पासवर्ड, टोकन, व्यक्तिगत डेटा) को डिस्क पर कैश न करें। URLCache डिफ़ॉल्ट रूप से डेटा को एन्क्रिप्ट नहीं करता है — संवेदनशील सामग्री के लिए NSFileProtection या एप्लिकेशन-स्तरीय एन्क्रिप्शन का उपयोग करें। प्राधिकृत नेटवर्क अनुरोधों के लिए, .reloadIgnoringLocalCacheData नीति का उपयोग करें।
कैश निगरानी: hit ratio, वर्तमान कैश आकार और प्रति मिनट लेखन की संख्या ट्रैक करें। यदि hit ratio 30% से नीचे गिर जाता है, तो कैश अक्षम है और उसे रणनीति समीक्षा या आकार वृद्धि की आवश्यकता है। Point-Free (2024) के अनुसार, कैश निगरानी iOS एप्लिकेशन प्रदर्शन ओप्टिमाइज़ेशन के सबसे कम आंके गए अभ्यासों में से एक है।
अक्सर पूछे जाने वाले प्रश्न
Disk Cache एक तकनीक है जो बार-बार पहुंचने में तेजी लाने के लिए डिवाइस की डिस्क पर डेटा संग्रहीत करती है। iOS का बिल्ट-इन URLCache HTTP प्रतिक्रियाओं को कैश करता है, और डिवेलपर्स Caches निर्देशिका के माध्यम से कस्टम कैश बना सकते हैं।
RAM Cache (NSCache) डेटा को RAM में संग्रहीत करता है — तेज़, लेकिन एप्लिकेशन रीस्टार्ट पर खो जाता है। Disk Cache धीमा है लेकिन सत्रों के बीच बना रहता है। इष्टतम रणनीति दोनों स्तरों का उपयोग करती है: गर्म डेटा के लिए मेमरी, ठंड डेटा के लिए डिस्क।
हाँ, सिस्टम जब डिस्क स्थान कम होता है तब किसी भी समय Caches निर्देशिका की सामग्री हटा सकता है। इसलिए, कैश में कभी भी अप्रतिवाप्य डेटा संग्रहीत न करें। उपयोगकर्ता दस्तावेज़ों के लिए Documents निर्देशिका का उपयोग करें।
कैश आकार डेटा प्रकार पर निर्भर करता है: छवियों के लिए 100–500 MB, API प्रतिक्रियाओं के लिए 10–50 MB, वीडियो के लिए 1 GB तक। hit ratio की निगरानी रखें — यदि यह 50% से नीचे गिरता है, तो कैश आकार बढ़ाएँ या अमान्यकरण रणनीति बदलें।
URLCache.removeAllCachedResponses() निर्मित कैश को साफ करता है। कस्टम कैश के लिए, FileManager के माध्यम से Caches निर्देशिका से फ़ाइलें हटाएँ। उपयोगकर्ताओं को हमेशा एप्लिकेशन सेटिंग्स के माध्यम से कैश साफ करने का विकल्प दें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें