Kingfisher — यह क्या है, मुख्य अवधारणाएँ और ImageCache

लेखक: IT Sectr प्रकाशित: 2026-05-05 पढ़ने का समय: 8 मिनट

Kingfisher एक लाइब्रेरी है जो iOS, macOS और watchOS पर इमेज लोड करने और कैश करने के लिए है, जो शुद्ध Swift में लिखी गई है। आधिकारिक रिपॉजिटरी के अनुसार, लाइब्रेरी Swift Concurrency, Combine और SwiftUI के लिए पूर्ण समर्थन प्रदान करती है, साथ ही दो-स्तरीय स्वचालित कैशिंग भी प्रदान करती है। Kingfisher अपने टाइप-सेफ API और Swift प्रोजेक्ट्स में आसान एकीकरण के लिए जानी जाती है।

मुख्य बिंदु

  • Kingfisher एक शुद्ध Swift इमेज लोडिंग लाइब्रेरी है जो async/await, Combine और SwiftUI को सपोर्ट करती है।
  • KingfisherManager लोडिंग के लिए एकल प्रवेश बिंदु है, जो कैश और नेटवर्क अनुरोधों को ट्रैक करता है।
  • ImageCache दो-स्तरीय भंडारण लागू करता है: कॉन्फ़िगरेबल सीमाओं के साथ Memory Cache और Disk Cache।
  • ImageProcessor ट्रांसफ़ॉर्मेशन के लिए एक प्रोटोकॉल है: आकार बदलना, गोल करना, ब्लर करना, वॉटरमार्क लगाना।
  • KFImage SwiftUI के लिए एक View घटक है जो लोडिंग स्थितियों का घोषणात्मक विवरण प्रदान करता है।

Kingfisher क्या है?

Kingfisher Apple प्लेटफ़ॉर्म पर एसिंक्रोनस इमेज लोडिंग और कैशिंग के लिए एक लाइब्रेरी है, जो पूरी तरह से Swift में लिखी गई है। लाइब्रेरी के लेखक Wei Wang (onevcat) हैं। Kingfisher नेटवर्क से इमेज लोड करने के लिए टूल का एक सेट प्रदान करता है जिसमें स्वचालित कैशिंग, ट्रांसफ़ॉर्मेशन और आधुनिक Swift तकनीकों के लिए समर्थन शामिल है: async/await, Combine, Sendable।

लाइब्रेरी के GitHub पर 23,000 से अधिक स्टार हैं और इसका उपयोग Telegram, Snapchat और Dropbox जैसे एप्लिकेशन में किया जाता है। Kingfisher GIF, APNG, HEIF और सभी मानक इमेज फ़ॉर्मेट को सपोर्ट करता है। प्रत्येक अनुरोध एक टाइप-सेफ Result लौटाता है, जो टाइप कास्टिंग त्रुटियों को समाप्त करता है।

Kingfisher की आर्किटेक्चर तीन मुख्य घटकों पर बनी है: Manager (डाउनलोड मैनेजर), Cache (दो-स्तरीय कैश) और Processor (ट्रांसफ़ॉर्मेशन)। ये घटक प्रोटोकॉल के माध्यम से जुड़े हुए हैं, जो निर्भरताओं को बदले बिना किसी भी भाग को बदलने की अनुमति देता है।

Kingfisher कैसे काम करता है: Manager और Cache

KingfisherManager केंद्रीय वर्ग है जो इमेज लोडिंग, कैशिंग और प्रोसेसिंग का समन्वय करता है। इसमें ImageCache और ImageDownloader के संदर्भ होते हैं और यह एकल विधि retrieveImage प्रदान करता है जो सभी चरणों से गुज़रने के बाद तैयार इमेज लौटाता है।

लोडिंग प्रक्रिया

retrieveImage को कॉल करने पर, Manager पहले Memory Cache की जाँच करता है — UIImage के साथ एक NSCache, जहाँ कुंजी स्रोत URL और CacheSerializer से बनती है। यदि इमेज मिल जाती है, तो इसे तुरंत लौटा दिया जाता है। मिस होने पर, Disk Cache की जाँच की जाती है — serializer के माध्यम से डिक्रिप्शन के साथ फ़ाइल सिस्टम से पढ़ना। यदि डिस्क कैश खाली है, तो ImageDownloader के माध्यम से नेटवर्क अनुरोध किया जाता है, परिणाम डीकोड, ट्रांसफ़ॉर्म और दोनों कैश स्तरों में सहेजा जाता है।

  • Memory Cache — NSCache-आधारित, मेमोरी वार्निंग पर स्वचालित रूप से साफ़ हो जाता है
  • Disk Cache — TTL और आकार सीमा जाँच के साथ फ़ाइल भंडारण
  • ImageDownloader — मॉडिफ़ायर के माध्यम से अनुरोध संशोधन समर्थन के साथ URLSession-आधारित

Swift Concurrency

संस्करण 7.0 से, Kingfisher पूरी तरह से async/await का समर्थन करता है। retrieveImage विधि एक एसिंक्रोनस फ़ंक्शन के रूप में उपलब्ध है, जो कम्प्लीशन ब्लॉक्स के बिना सीधे Result लौटाती है। यह Structured Concurrency के साथ आधुनिक Swift आर्किटेक्चर में लाइब्रेरी का उपयोग करने की अनुमति देता है।

Kingfisher के मुख्य मॉड्यूल

Kingfisher कई मॉड्यूल में विभाजित है, प्रत्येक अपने कार्य को हल करता है। यह विभाजन परीक्षण और घटक प्रतिस्थापन को सरल बनाता है।

KingfisherManager

KingfisherManager एक फ़ेसेड है जो लोडिंग, कैश और प्रोसेसर को जोड़ता है। डिफ़ॉल्ट रूप से, सिंगलटन KingfisherManager.shared का उपयोग किया जाता है, लेकिन पृथक परिदृश्यों (जैसे, यूनिट टेस्ट के लिए) के लिए कस्टम सेटिंग्स के साथ एक अलग इंस्टेंस बनाया जा सकता है।

ImageCache

ImageCache मेमोरी और डिस्क के लिए अलग-अलग सेटिंग्स के साथ दो-स्तरीय कैश है। Memory Cache पर ऑब्जेक्ट्स की संख्या की कोई सीमा नहीं है, लेकिन मेमोरी कम होने पर सिस्टम इसे साफ़ कर देता है। Disk Cache कॉन्फ़िगरेबल TTL (डिफ़ॉल्ट 7 दिन), आकार सीमा (डिफ़ॉल्ट 0 — कोई सीमा नहीं) और स्वचालित सफ़ाई के साथ एक निर्देशिका में फ़ाइलें संग्रहीत करता है।

ImageProcessor

ImageProcessor एक एकल विधि process(item:options:) वाला प्रोटोकॉल है जो प्रोसेस्ड इमेज लौटाता है। अंतर्निहित कार्यान्वयन: ResizingImageProcessor (आकार बदलना), RoundCornerImageProcessor (गोल करना), BlurImageProcessor (गाऊसी ब्लर), OverlayImageProcessor (रंग ओवरले)। प्रोसेसर को |> ऑपरेटर के माध्यम से जोड़ा जा सकता है।

Kingfisher कैशिंग सिस्टम

Kingfisher कैश आर्किटेक्चर write-through सिद्धांत पर आधारित है: डेटा एक साथ दोनों स्तरों पर लिखा जाता है, और पढ़ना सबसे तेज़ स्तर — मेमोरी से शुरू होता है। कैश कुंजी क्वेरी पैरामीटर हटाने के बाद पूर्ण इमेज URL है।

पैरामीटरMemory CacheDisk Cache
भंडारणNSCache (RAM)फ़ाइल सिस्टम (SSD)
फ़ॉर्मेटUIImage (डीकोडेड)डेटा (संपीड़ित, serializer के माध्यम से)
सफ़ाईUIApplication.didReceiveMemoryWarningNotificationTTL + सीमा से अधिक
सीरियलाइज़ेशनआवश्यक नहींCacheSerializer (डिफ़ॉल्ट PNG/JPEG)
थ्रेड सुरक्षाहाँ (सिंक्रोनाइज़्ड एक्सेस)हाँ (IO कतार + बैरियर)

Disk Cache के आकार को प्रबंधित करने के लिए, अंतिम एक्सेस दिनांक के अनुसार क्रमबद्ध करके फ़ाइलों के कुल आकार की गणना की जाती है। जब सीमा पार हो जाती है, तो सबसे पुरानी एक्सेस दिनांक वाली फ़ाइलें तब तक हटा दी जाती हैं जब तक आकार सीमा के 50% से कम न हो जाए। TTL सफ़ाई कैश इनिशियलाइज़ेशन के दौरान और cleanExpired के प्रत्येक कॉल पर होती है।

Swift में Kingfisher के उपयोग के उदाहरण

Kingfisher इमेज लोड करने के लिए कई इंटरफ़ेस प्रदान करता है: UIImageView पर एक्सटेंशन, एक अलग मैनेजर और एक SwiftUI View।

UIImageView में kf के माध्यम से लोड करना

kf UIImageView पर एक नेमस्पेस प्रॉपर्टी है, जो setImage, cancelDownload विधियाँ और लोडिंग इंडिकेटर प्रदान करती है। setImage विधि URLSource और वैकल्पिक पैरामीटर Options और completionHandler स्वीकार करती है।

swift
import Kingfisher

imageView.kf.setImage(
    with: URL(string: "https://example.com/image.jpg"),
    placeholder: UIImage(named: "placeholder"),
    options: [
        .processor(RoundCornerImageProcessor(radius: .point(12))),
        .transition(.fade(0.3)),
        .cacheMemoryOnly
    ],
    progressBlock: { receivedSize, totalSize in
        print("लोड किया गया \(receivedSize) / \(totalSize)")
    }
)

विधि एक DownloadTask लौटाती है जो cancel के माध्यम से रद्दीकरण और प्रगति ट्रैकिंग का समर्थन करता है। आंतरिक रूप से, setImage ImageView को Target के रूप में स्वचालित पहचान के साथ KingfisherManager.shared.retrieveImage को कॉल करता है।

async/await के साथ उपयोग

Kingfisher 7.0 से, setImage विधि एक एसिंक्रोनस संस्करण में उपलब्ध है। यह बिना कॉलबैक के Swift Structured Concurrency में इमेज लोडिंग को एकीकृत करने की अनुमति देता है।

swift
func loadAvatar() async {
    do {
        let result = try await imageView.kf.setImage(
            with: url,
            options: [.processor(ResizingImageProcessor(
                targetSize: CGSize(width: 100, height: 100)
            ))]
        )
        // result.image में UIImage है
    } catch {
        print("विफल: \(error)")
    }
}

SwiftUI के लिए KFImage

KFImage एक SwiftUI View है, जो iOS 15 के AsyncImage के समान है, लेकिन पूर्ण Kingfisher कैशिंग समर्थन के साथ। View स्वचालित रूप से KingfisherManager.shared का उपयोग करता है लेकिन .configure मॉडिफ़ायर के माध्यम से कस्टम मैनेजर का समर्थन करता है।

swift
struct AvatarView: View {
    let url: URL

    var body: some View {
        KFImage(url)
            .placeholder { ProgressView() }
            .resizable()
            .fade(duration: 0.25)
            .forceTransition()
            .frame(width: 80, height: 80)
            .cornerRadius(40)
    }
}

Kingfisher में लोडिंग इंडिकेटर

Kingfisher इमेज लोडिंग प्रगति प्रदर्शित करने के लिए एक अंतर्निहित इंडिकेटर सिस्टम प्रदान करता है। IndicatorType तीन विकल्पों वाला एक एनुम है: .activity (UIActivityIndicatorView), .progress (UIProgressView) और .custom (Indicator प्रोटोकॉल का कस्टम कार्यान्वयन)। इंडिकेटर लोडिंग के दौरान ImageView के ऊपर स्वचालित रूप से दिखाई देता है और पूरा होने के बाद छिप जाता है।

कस्टम इंडिकेटर के लिए, Indicator प्रोटोकॉल को startAnimatingView() और stopAnimatingView() विधियों के साथ लागू करना आवश्यक है। यह हाइब्रिड समाधानों की अनुमति देता है: शिमर एनिमेशन के साथ स्केलेटन, क्रमिक प्रकटीकरण के साथ प्लेसहोल्डर इमेज, या अपारदर्शिता एनिमेशन के साथ लोगो। Kingfisher KingfisherManager.shared.defaultOptions के माध्यम से वैश्विक रूप से इंडिकेटर सेट करने का भी समर्थन करता है।

Kingfisher बनाम SDWebImage

iOS प्लेटफ़ॉर्म पर, Kingfisher और SDWebImage दो प्रमुख इमेज लोडिंग लाइब्रेरी हैं। उनके बीच चुनाव प्रोजेक्ट की भाषा, प्रदर्शन आवश्यकताओं और इकोसिस्टम पर निर्भर करता है।

मानदंडKingfisherSDWebImage
भाषाSwift (100%)Objective-C + Swift
Async/Awaitमूल समर्थनरैपर के माध्यम से
Combineअंतर्निहित Publisherनहीं
Sendableसमर्थन करता हैसीमित
टाइप सुरक्षापूर्ण (Result प्रकार)Any? के माध्यम से
ImageProcessor|> के माध्यम से कम्पोज़िट&& के माध्यम से Transformer
आकार~900 KB~1.2 MB
GitHub स्टार23,000+25,000+

Kingfisher का मुख्य लाभ इसकी Swift-first आर्किटेक्चर है: async/await, Combine Publishers, Sendable और Result प्रकारों के लिए पूर्ण समर्थन। SDWebImage अपने व्यापक प्लगइन इकोसिस्टम (WebP, SVG, MapKit) और Objective-C समर्थन के कारण अग्रणी बनी हुई है।

iOS प्रोजेक्ट में Kingfisher सेटअप करना

Kingfisher Swift Package Manager, CocoaPods या Carthage के माध्यम से स्थापित किया जाता है। स्थापना के बाद, बस मॉड्यूल आयात करें और किसी भी लोडिंग विधि को कॉल करें — लाइब्रेरी अतिरिक्त कॉन्फ़िगरेशन के बिना उपयोग के लिए तैयार है।

swift
// Swift Package Manager (Package.swift)
dependencies: [
    .package(
        url: "https://github.com/onevcat/Kingfisher.git",
        from: "7.12.0"
    )
]

// CocoaPods (Podfile)
pod 'Kingfisher', '~> 7.12'

वैश्विक सेटिंग्स को कस्टमाइज़ करने के लिए, KingfisherManager.shared का उपयोग करें। आप डाउनलोडर टाइमआउट, कैश रणनीति और डिफ़ॉल्ट प्रोसेसर बदल सकते हैं। नीचे 14-दिवसीय TTL के साथ 500 MB कैश कॉन्फ़िगर करने का उदाहरण दिया गया है।

swift
let cache = ImageCache(name: "custom")
cache.memoryStorage.config.totalCostLimit = 100 * 1024 * 1024
cache.diskStorage.config.sizeLimit = 500 * 1024 * 1024
cache.diskStorage.config.expiration = .days(14)
KingfisherManager.shared.cache = cache

ImageDownloader भी मैनेजर के माध्यम से कॉन्फ़िगर किया जाता है: आप टाइमआउट, हेडर और कैशिंग नीतियों के साथ एक कस्टम URLSessionConfiguration सेट कर सकते हैं। प्रगति की निगरानी के लिए, KFIndicator मॉड्यूल ActivityIndicator, ProgressView और कस्टम इंडिकेटर के समर्थन के साथ उपलब्ध है।

अक्सर पूछे जाने वाले प्रश्न

Kingfisher क्या है और इसका उपयोग किसके लिए किया जाता है?

Kingfisher iOS पर इमेज लोड करने के लिए एक लाइब्रेरी है, जो शुद्ध Swift में लिखी गई है। इसका उपयोग SwiftUI, UIKit और आधुनिक Swift तकनीकों में पूर्ण एकीकरण के साथ नेटवर्क से इमेज को एसिंक्रोनस रूप से लोड करने, कैश करने और ट्रांसफ़ॉर्म करने के लिए किया जाता है।

Swift Package Manager के माध्यम से Kingfisher कैसे स्थापित करें?

Xcode में File → Add Packages के माध्यम से https://github.com/onevcat/Kingfisher.git पैकेज को 7.12.0 से संस्करण के साथ जोड़ें। या from: "7.12.0" पैरामीटर के साथ Package.swift में निर्भरता निर्दिष्ट करें। स्थापना के बाद, Kingfisher मॉड्यूल आयात करें।

Kingfisher किन इमेज फ़ॉर्मेट का समर्थन करता है?

Kingfisher JPEG, PNG, GIF, APNG, HEIF और WebP का समर्थन करता है। सभी फ़ॉर्मेट सिस्टम फ्रेमवर्क (ImageIO, CoreGraphics) के माध्यम से डीकोड किए जाते हैं। GIF को प्रगतिशील लोडिंग और एनिमेशन के साथ CGImageSource के माध्यम से समर्थित किया जाता है।

SDWebImage की तुलना में Kingfisher का क्या लाभ है?

Kingfisher शुद्ध Swift में लिखी गई है और पूरी तरह से async/await, Combine और Sendable का समर्थन करती है। यह एक टाइप-सेफ Result API और प्रोटोकॉल के माध्यम से मॉड्यूलर आर्किटेक्चर प्रदान करती है, जो घटक प्रतिस्थापन और परीक्षण को सरल बनाती है।

Kingfisher कैश कैसे साफ़ करें?

Memory Cache साफ़ करने के लिए, KingfisherManager.shared.cache.clearMemoryCache() को कॉल करें। Disk Cache के लिए, clearDiskCache() का उपयोग करें। केवल समाप्त फ़ाइलों को हटाने के लिए — cleanExpiredDiskCache()। कैश आकार की जाँच cache.calculateDiskStorageSize() के माध्यम से की जा सकती है।

सारांश

  • Kingfisher सभी प्रासंगिक Apple तकनीकों के समर्थन के साथ शुद्ध Swift में एक आधुनिक इमेज लोडिंग लाइब्रेरी है।
  • दो-स्तरीय कैश (Memory + Disk) कॉन्फ़िगरेबल सीमाओं और TTL के साथ तेज़ पहुँच और न्यूनतम डेटा उपयोग सुनिश्चित करता है।
  • Async/Await और Combine बिना कॉलबैक और डेलिगेट के किसी भी आर्किटेक्चर में लोडिंग को एम्बेड करने की अनुमति देते हैं।
  • KFImage SwiftUI के लिए प्लेसहोल्डर, त्रुटि और कस्टम ट्रांज़िशन प्रभावों के साथ एक घोषणात्मक API प्रदान करता है।
  • ImageProcessor |> ऑपरेटर के माध्यम से संयोजन के साथ ट्रांसफ़ॉर्मेशन चेन बनाने में लचीलापन प्रदान करता है।
  • टाइप सुरक्षा Result परिणामों को संसाधित करते समय रनटाइम त्रुटियों को समाप्त करती है।
  • मॉड्यूलर आर्किटेक्चर प्रोटोकॉल के माध्यम से परीक्षण और अनुकूलन के लिए Manager, Cache और Downloader को बदलने की अनुमति देता है।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें