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 (کیش نہ کریں) کی وضاحت کرتا ہے۔ iOS useProtocolCachePolicy پالیسی کے ساتھ URLCache استعمال کرتے وقت خود بخود ان ہیڈرز کی سختی سے پیروی کرتا ہے۔
کسٹم کیشنگ اس وقت ضروری ہے جب بلٹ ان 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) سے ماپا جاتا ہے — نیٹ ورک کال کے بغیر کیش سے پوری کی گئی درخواستوں کا فیصد۔ ایک اچھی طرح ترتیب دی گئی تصویری کیش کے لیے عام ہٹ ریشیو 70–90%، API جوابات کے لیے 40–60%، اسٹریمنگ ویڈیو کے لیے 30–50% ہے۔
| ڈیٹا کی قسم | عام ہٹ ریشیو | تجویز کردہ کیش سائز |
|---|---|---|
| تصاویر | 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 پالیسی استعمال کریں۔
کیش مانیٹرنگ: ہٹ ریشیو، موجودہ کیش سائز اور فی منٹ لکھنے کی تعداد کو ٹریک کریں۔ اگر ہٹ ریشیو 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 تک۔ ہٹ ریشیو کی نگرانی کریں — اگر یہ 50% سے نیچے گر جائے تو کیش سائز بڑھائیں یا باطل کرنے کی حکمت عملی تبدیل کریں۔
URLCache.removeAllCachedResponses() بلٹ ان کیش صاف کرتا ہے۔ کسٹم کیش کے لیے، FileManager کے ذریعے Caches ڈائریکٹری سے فائلیں حذف کریں۔ صارفین کو ہمیشہ ایپ سیٹنگز کے ذریعے کیش صاف کرنے کا اختیار فراہم کریں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں