SDWebImage iOS और macOS पर एसिंक्रोनस इमेज लोडिंग के लिए एक लाइब्रेरी है, जो नेटवर्क, कैश और एनिमेशन के साथ काम करने के लिए एक एकीकृत API प्रदान करती है। आधिकारिक रिपॉजिटरी के अनुसार, लाइब्रेरी का उपयोग 100,000 से अधिक प्रोजेक्ट्स में किया जाता है और यह GIF, WebP, SVG और प्रोग्रेसिव लोडिंग का समर्थन करती है। SDWebImage डिस्क और मेमोरी पर स्वचालित कैशिंग प्रदान करती है, साथ ही UIKit और SwiftUI के साथ इंटीग्रेशन भी।
मुख्य बिंदु
SDWebImage Apple प्लेटफ़ॉर्म (iOS, macOS, tvOS, watchOS) पर एसिंक्रोनस इमेज लोडिंग के लिए एक लाइब्रेरी है। यह UIImageView के लिए sd_setImage विधि के साथ एक श्रेणी प्रदान करती है, जो कोड की एक पंक्ति में किसी भी स्रोत से इमेज को लोड, कैश और प्रदर्शित करती है।
लाइब्रेरी प्रोग्रेसिव लोडिंग (बाइट्स प्राप्त होने पर इमेज दिखाई देती है), एनिमेटेड इमेज (GIF, APNG), ट्रांसफ़ॉर्मेशन (गोलाई, क्रॉपिंग, वॉटरमार्किंग) और कस्टम डिकोडर का समर्थन करती है। GitHub आँकड़ों के अनुसार, SDWebImage के 25,000 से अधिक स्टार हैं और इसका उपयोग Twitter, Pinterest और Instagram सहित प्रमुख अनुप्रयोगों में किया जाता है।
आर्किटेक्चर घटक श्रृंखला पर बनाया गया है: Coder (डिकोडिंग), Cache (भंडारण), Loader (नेटवर्क) और Transformer (प्रसंस्करण)। प्रत्येक घटक बदली जाने योग्य है, जो लाइब्रेरी को विशिष्ट प्रोजेक्ट आवश्यकताओं के अनुकूल बनाने की अनुमति देता है।
SDWebImageManager केंद्रीय घटक है जो लोडिंग प्रक्रिया का समन्वय करता है। यह URL स्वीकार करता है, कैश की जाँच करता है, डेटा लोड करता है, इसे UIImage में डिकोड करता है और ImageView या Completion Handler को पास करता है। प्रबंधक एक साझा सिंगलटन के माध्यम से संचालित होता है, जो एप्लिकेशन में कहीं से भी पहुँच योग्य है।
प्रबंधक क्रमिक रूप से मेमोरी कैश (UIImage के साथ NSDictionary), फिर डिस्क कैश (फ़ाइल सिस्टम) की जाँच करता है। मिस होने पर, NSURLSession के माध्यम से नेटवर्क अनुरोध किया जाता है। लोडिंग के बाद, डेटा डिकोड किया जाता है, ट्रांसफ़ॉर्मेशन से गुज़रता है और दोनों कैश में सहेजा जाता है। पूरी प्रक्रिया बैकग्राउंड कतार में चलती है, परिणाम मुख्य कतार में वितरित किए जाते हैं।
UIImageView+WebCache एक Objective-C श्रेणी है (Swift से सुलभ) जो sd_setImage विधि जोड़ती है। यह विधि URL, placeholder, विकल्प (SDWebImageOptions) और पूर्णता ब्लॉक स्वीकार करती है। श्रेणी sd_cancelCurrentImageLoad तंत्र के माध्यम से तालिका सेल के पुन: उपयोग होने पर पिछले अनुरोध को स्वचालित रूप से रद्द कर देती है।
SDWebImage आर्किटेक्चर स्पष्ट जिम्मेदारी क्षेत्रों के साथ कई मॉड्यूल में विभाजित है। प्रत्येक वर्ग एक कार्य हल करता है — लोडिंग से प्रदर्शन तक।
SDWebImageManager सभी इमेज संचालन के लिए फेसाड है। इसमें ImageCache (SDImageCache) और ImageLoader (SDWebImageDownloader) के संदर्भ शामिल हैं। SDWebImageManagerDelegate के माध्यम से, आप लोडिंग को इंटरसेप्ट कर सकते हैं और URL या व्यवहार बदल सकते हैं।
SDImageCache एक दो-स्तरीय कैश (मेमोरी + डिस्क) है जो एक अद्वितीय नाम स्थान के साथ प्रारंभ किया जाता है। मेमोरी कैश UIImage को कॉन्फ़िगरेबल सीमा के साथ संग्रहीत करता है (डिफ़ॉल्ट रूप से — सिस्टम मेमोरी चेतावनी तक)। डिस्क कैश Library/Caches निर्देशिका में कॉन्फ़िगरेबल भंडारण अवधि (डिफ़ॉल्ट 7 दिन) के साथ डेटा संग्रहीत करता है।
SDWebImageDownloader NSURLSession पर आधारित एक HTTP क्लाइंट है जिसमें हेडर, टाइमआउट और पुन: प्रयास का समर्थन है। डाउनलोडर समान अनुरोधों को एक नेटवर्क कॉल में डिडुप्लिकेट करता है और परिणाम सभी सब्सक्राइबर्स के बीच वितरित करता है।
SDWebImage नियतात्मक जाँच क्रम के साथ दो-स्तरीय कैशिंग लागू करता है: पहले मेमोरी, फिर डिस्क। कैश कुंजी क्वेरी पैरामीटर या उसके MD5 हैश के बिना पूर्ण इमेज URL है।
| स्तर | भंडारण प्रकार | सामग्री | सीमा |
|---|---|---|---|
| मेमोरी कैश | NSCache (NSDictionary) | UIImage (डिकोडेड Bitmap) | मेमोरी चेतावनी तक |
| डिस्क कैश | फ़ाइल सिस्टम | NSData (JPEG/PNG/WebP) | 7 दिन TTL (कॉन्फ़िगरेबल) |
| ऑटो पर्ज कैश | मेमोरी + डिस्क | संयुक्त फ्रेमवर्क कैश | कॉन्फ़िगरेबल फ़ाइल आकार |
मेमोरी चेतावनी प्राप्त करने पर, iOS UIApplicationDidReceiveMemoryWarningNotification के माध्यम से SDImageCache को सूचित करता है, जिसके बाद मेमोरी कैश पूरी तरह से साफ़ हो जाता है। डिस्क कैश TTL द्वारा या सीमा पार होने पर साफ़ किया जाता है, फ़ाइलों को अंतिम पहुँच तिथि के अनुसार क्रमबद्ध करके।
मैन्युअल कैश प्रबंधन के लिए निम्नलिखित विधियाँ उपलब्ध हैं: clearMemory, clearDisk, calculateSize. SDWebImageCacheMemoryOnly या SDWebImageAvoidAutoSetImage विकल्पों का उपयोग करके विशिष्ट अनुरोधों के लिए कैशिंग अक्षम की जा सकती है।
SDWebImage इमेज लोड करने के लिए कई इंटरफ़ेस प्रदान करता है: सरल UIImageView श्रेणी से लेकर कस्टम प्रसंस्करण के साथ उन्नत प्रबंधक तक।
sd_setImage UIImageView में इमेज लोड करने की प्राथमिक विधि है। यह URL, placeholder और Options व Context के माध्यम से वैकल्पिक पैरामीटर स्वीकार करती है। सभी Completion Handler मुख्य थ्रेड पर निष्पादित होते हैं।
let imageView = UIImageView()
imageView.sd_setImage(
with: URL(string: "https://example.com/photo.jpg"),
placeholderImage: UIImage(named: "placeholder"),
options: [.progressiveLoad, .retryFailed],
context: [.imageThumbnailPixelSize : CGSize(width: 300, height: 300)]
)
विधि एक SDWebImageToken (संचालन) लौटाती है जिसे आवश्यकता पड़ने पर रद्द किया जा सकता है। आंतरिक रूप से, sd_setImage SDWebImageManager.load को कॉल करता है, स्वचालित इमेज सेटिंग के लिए ImageView को Target के रूप में पास करता है।
SDWebImage Transformer — एक एकल विधि transformedImage वाले प्रोटोकॉल का समर्थन करता है। अंतर्निहित ट्रांसफ़ॉर्मेशन में शामिल हैं: सर्कल, गोल कोने, रंग फ़िल्टर ओवरले और आकार बदलना। ट्रांसफ़ॉर्मेशन को && ऑपरेटर का उपयोग करके जोड़ा जा सकता है।
let transformer = SDImageResizingTransformer(
size: CGSize(width: 200, height: 200),
scaleMode: .aspectFill
)
let roundedTransformer = SDImageRoundCornerTransformer(
radius: 16,
corners: .allCorners,
borderWidth: 0
)
imageView.sd_setImage(
with: url,
placeholderImage: placeholder,
context: [.imageTransformer : transformer && roundedTransformer]
)
लाइब्रेरी WebImage — SwiftUI के लिए placeholder, प्रगति संकेतक और त्रुटि प्रबंधन के समर्थन के साथ एक View घटक प्रदान करती है। घटक स्वचालित रूप से View जीवनचक्र की सदस्यता लेता है और गायब होने पर लोडिंग रद्द करता है।
struct CachedImageView: View {
let url: URL
var body: some View {
WebImage(url: url) { phase in
if let image = phase.image {
image.resizable()
} else if phase.error {
Color.red
} else {
ProgressView()
}
}
}
}
SDWebImage SDImageTransformer प्रोटोकॉल के माध्यम से एक लचीली ट्रांसफ़ॉर्मेशन प्रणाली प्रदान करता है। ट्रांसफ़ॉर्मेशन डिकोडिंग के बाद लेकिन कैशिंग से पहले लागू किए जाते हैं — ट्रांसफ़ॉर्मेशन परिणाम एक नई कुंजी के तहत डिस्क पर संग्रहीत किया जाता है, बाद के अनुरोधों पर पुन: आवेदन को रोकता है।
अंतर्निहित ट्रांसफ़ॉर्मेशन में शामिल हैं: SDImageResizingTransformer (mode के साथ आकार बदलना), SDImageRoundCornerTransformer (वैकल्पिक सीमा के साथ गोल कोने), SDImageFlipTransformer (मिररिंग) और SDImageFilterTransformer (CoreImage फ़िल्टर)। && ऑपरेटर के माध्यम से संयोजन किया जाता है, एक प्रसंस्करण श्रृंखला बनाता है।
कस्टम ट्रांसफ़ॉर्मेशन के लिए, transformedImageWithImage:forKey: विधि के साथ SDImageTransformer प्रोटोकॉल को लागू करना पर्याप्त है। ट्रांसफ़ॉर्मेशन कुंजी स्वचालित रूप से कैश कुंजी में जुड़ जाती है, एक ही इमेज के विभिन्न संस्करणों के बीच टकराव को रोकती है।
iOS प्लेटफ़ॉर्म पर, SDWebImage के मुख्य प्रतिस्पर्धी Kingfisher (शुद्ध Swift) और Nuke हैं। SDWebImage और Kingfisher के बीच चुनाव अक्सर प्रोजेक्ट भाषा और आवश्यक कार्यक्षमता से निर्धारित होता है।
| विशेषता | SDWebImage | Kingfisher |
|---|---|---|
| भाषा | Objective-C + Swift API | Swift (100%) |
| SwiftUI | WebImage View | KFImage View |
| GIF | हाँ (अंतर्निहित) | हाँ (अंतर्निहित) |
| WebP | हाँ (प्लगइन) | हाँ (अंतर्निहित) |
| प्रोग्रेसिव लोडिंग | हाँ (प्लगइन के साथ) | हाँ |
| फ्रेमवर्क आकार | ~1.2 MB | ~900 KB |
| कैश | मेमोरी + डिस्क | मेमोरी + डिस्क |
| CocoaPods समर्थन | हाँ | हाँ |
SDWebImage Objective-C प्रोजेक्ट्स या हाइब्रिड प्रोजेक्ट्स के लिए पसंदीदा विकल्प बना हुआ है। Kingfisher टाइप सुरक्षा और मूल Swift सिंटैक्स के कारण शुद्ध Swift प्रोजेक्ट्स के लिए बेहतर उपयुक्त है। दोनों लाइब्रेरीज़ में समान कैशिंग आर्किटेक्चर और प्रदर्शन है।
SDWebImage को Swift Package Manager, CocoaPods या Carthage के माध्यम से एकीकृत किया जा सकता है। लाइब्रेरी मॉड्यूल में विभाजित है: कोर (SDWebImage), Coder (अतिरिक्त प्रारूप) और MapKit (MKAnnotationView के लिए)।
// Swift पैकेज मैनेजर (Package.swift)
dependencies: [
.package(
url: "https://github.com/SDWebImage/SDWebImage.git",
from: "5.19.0"
)
]
// CocoaPods (Podfile)
pod 'SDWebImage', '~> 5.19.0'
// WebP और SVG के लिए प्लगइन्स:
pod 'SDWebImageWebPCoder'
pod 'SDWebImageSVGCoder'
स्थापना के बाद, लाइब्रेरी अतिरिक्त कॉन्फ़िगरेशन के बिना उपयोग के लिए तैयार है। कैश अनुकूलन के लिए, एक अद्वितीय नाम स्थान के साथ SDImageCache का एक उदाहरण बनाएँ और इसे आरंभीकरण के दौरान SDWebImageManager को पास करें। वैश्विक कॉन्फ़िगरेशन SDWebImageManager.shared के माध्यम से किया जाता है।
// कैश अनुकूलन
let config = SDImageCacheConfig()
config.maxDiskAge = 14 * 86400 // 7 के बजाय 14 दिन
config.maxDiskSize = 500 * 1024 * 1024 // 500 MB
config.shouldCacheImagesInMemory = .true
let cache = SDImageCache(
namespace: "custom",
diskCacheDirectory: FileManager.default.urls(
for: .cachesDirectory,
in: .userDomainMask
).first?.appendingPathComponent("custom_cache"),
config: config
)
SDWebImageManager.sharedImageCache = cache
अक्सर पूछे जाने वाले प्रश्न
SDWebImage iOS और macOS पर एसिंक्रोनस इमेज लोडिंग के लिए एक लाइब्रेरी है। यह नेटवर्क से इमेज को कैश करने, डिकोड करने, ट्रांसफ़ॉर्म करने और प्रदर्शित करने की समस्याओं का समाधान करती है, डेवलपर को मैन्युअल थ्रेड और मेमोरी प्रबंधन से मुक्त करती है।
cellForRowAt विधि में, URL और placeholder के साथ sd_setImage का उपयोग करें। सेल के पुन: उपयोग होने पर लाइब्रेरी स्वचालित रूप से पिछले अनुरोध को रद्द कर देती है। स्मूथ स्क्रॉलिंग के लिए, .progressiveLoad विकल्प निर्दिष्ट करें और संदर्भ के माध्यम से थंबनेल आकार कॉन्फ़िगर करें।
SDWebImage Objective-C में Swift रैपर के साथ लिखा गया है, जबकि Kingfisher शुद्ध Swift में लिखा गया है। SDWebImage के पास व्यापक प्लगइन इकोसिस्टम (WebP, SVG, MapKit) है। Kingfisher बेहतर टाइप सुरक्षा और Swift Concurrency एकीकरण प्रदान करता है।
CocoaPods या SPM के माध्यम से SDWebImageWebPCoder प्लगइन स्थापित करें। AppDelegate में SDImageWebPCoder.shared कॉल करके कोडर को पंजीकृत करें। पंजीकरण के बाद, लाइब्रेरी स्वचालित रूप से प्रारूप का पता लगाती है और WebP डिकोड करती है।
मेमोरी के लिए SDImageCache.shared.clearMemory() और डिस्क के लिए SDImageCache.shared.clearDisk() कॉल करें। केवल पुरानी फ़ाइलों को साफ़ करने के लिए, TTL जाँच के साथ clearDisk(completion:) का उपयोग करें। calculateSizeWithCompletionBlock विधि वर्तमान कैश आकार लौटाती है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें