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 কনফিগারেবল সীমাসহ দ্বি-স্তরীয় স্টোরেজ বাস্তবায়ন করে: মেমরি ক্যাশ এবং ডিস্ক ক্যাশ।
  • ImageProcessor রূপান্তরের জন্য একটি প্রোটোকল: আকার পরিবর্তন, গোলাকার করা, ব্লার করা, ওয়াটারমার্ক যোগ করা।
  • KFImage হল SwiftUI-এর জন্য একটি ভিউ কম্পোনেন্ট যা লোডিং অবস্থার ঘোষণামূলক বর্ণনা প্রদান করে।

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 প্রথমে মেমরি ক্যাশ পরীক্ষা করে — UIImage সহ একটি NSCache, যেখানে কী উৎস URL এবং CacheSerializer থেকে গঠিত হয়। যদি ইমেজ পাওয়া যায়, তা অবিলম্বে ফেরত দেওয়া হয়। মিস হলে, ডিস্ক ক্যাশ পরীক্ষা করা হয় — serializer-এর মাধ্যমে ডিক্রিপশন সহ ফাইল সিস্টেম থেকে পড়া। যদি ডিস্ক ক্যাশ খালি থাকে, ImageDownloader-এর মাধ্যমে একটি নেটওয়ার্ক অনুরোধ করা হয়, ফলাফল ডিকোড, রূপান্তর এবং উভয় ক্যাশ স্তরে সংরক্ষণ করা হয়।

  • মেমরি ক্যাশ — NSCache-ভিত্তিক, মেমরি ওয়ার্নিংয়ে স্বয়ংক্রিয়ভাবে পরিষ্কার হয়
  • ডিস্ক ক্যাশ — TTL এবং আকার সীমা পরীক্ষাসহ ফাইল স্টোরেজ
  • ImageDownloader — মডিফায়ারের মাধ্যমে অনুরোধ পরিবর্তন সমর্থনসহ URLSession-ভিত্তিক

Swift Concurrency

সংস্করণ 7.0 থেকে, Kingfisher সম্পূর্ণরূপে async/await সমর্থন করে। retrieveImage পদ্ধতি একটি অ্যাসিঙ্ক্রোনাস ফাংশন হিসেবে উপলব্ধ, যা কমপ্লিশন ব্লক ছাড়াই সরাসরি Result ফেরত দেয়। এটি Structured Concurrency-সহ আধুনিক Swift আর্কিটেকচারে লাইব্রেরি ব্যবহারের অনুমতি দেয়।

Kingfisher-এর মূল মডিউল

Kingfisher বেশ কয়েকটি মডিউলে বিভক্ত, প্রতিটি তার নিজস্ব কাজ সমাধান করে। এই বিভাজন পরীক্ষণ এবং কম্পোনেন্ট প্রতিস্থাপন সহজ করে।

KingfisherManager

KingfisherManager হল একটি ফ্যাসাড যা লোডিং, ক্যাশ এবং প্রসেসরকে একত্রিত করে। ডিফল্টভাবে, সিঙ্গলটন KingfisherManager.shared ব্যবহার করা হয়, তবে বিচ্ছিন্ন পরিস্থিতির জন্য কাস্টম সেটিংস সহ একটি পৃথক ইনস্ট্যান্স তৈরি করা যেতে পারে (যেমন, ইউনিট টেস্টের জন্য)।

ImageCache

ImageCache হল মেমরি এবং ডিস্কের জন্য আলাদা সেটিংস সহ একটি দ্বি-স্তরীয় ক্যাশ। মেমরি ক্যাশে অবজেক্টের সংখ্যার কোনো সীমা নেই, তবে মেমরি কম হলে সিস্টেম এটি পরিষ্কার করে। ডিস্ক ক্যাশ কনফিগারেবল TTL (ডিফল্ট 7 দিন), আকার সীমা (ডিফল্ট 0 — কোনো সীমা নেই) এবং স্বয়ংক্রিয় পরিষ্কারসহ একটি ডিরেক্টরিতে ফাইল সংরক্ষণ করে।

ImageProcessor

ImageProcessor হল একটি একক পদ্ধতি process(item:options:) সহ একটি প্রোটোকল যা প্রক্রিয়াকৃত ইমেজ ফেরত দেয়। বিল্ট-ইন বাস্তবায়ন: ResizingImageProcessor (আকার পরিবর্তন), RoundCornerImageProcessor (গোলাকার করা), BlurImageProcessor (গাউসিয়ান ব্লার), OverlayImageProcessor (রং ওভারলে)। প্রসেসরগুলি |> অপারেটরের মাধ্যমে একত্রিত করা যেতে পারে।

Kingfisher ক্যাশিং সিস্টেম

Kingfisher ক্যাশ আর্কিটেকচার write-through নীতির উপর ভিত্তি করে: ডেটা একই সাথে উভয় স্তরে লেখা হয় এবং পড়া সবচেয়ে দ্রুত স্তর — মেমরি থেকে শুরু হয়। ক্যাশ কী হল কোয়েরি প্যারামিটার অপসারণের পর সম্পূর্ণ ইমেজ URL।

প্যারামিটারমেমরি ক্যাশডিস্ক ক্যাশ
স্টোরেজNSCache (RAM)ফাইল সিস্টেম (SSD)
ফরম্যাটUIImage (ডিকোডেড)ডেটা (সংকুচিত, serializer-এর মাধ্যমে)
পরিষ্কারUIApplication.didReceiveMemoryWarningNotificationTTL + সীমা অতিক্রম
সিরিয়ালাইজেশনপ্রয়োজন নেইCacheSerializer (ডিফল্ট PNG/JPEG)
থ্রেড নিরাপত্তাহ্যাঁ (সিঙ্ক্রোনাইজড অ্যাক্সেস)হ্যাঁ (IO কিউ + ব্যারিয়ার)

ডিস্ক ক্যাশের আকার পরিচালনা করতে, শেষ অ্যাক্সেসের তারিখ অনুসারে সাজিয়ে ফাইলের মোট আকার গণনা করা হয়। যখন সীমা অতিক্রম করা হয়, সবচেয়ে পুরনো অ্যাক্সেসের তারিখের ফাইলগুলি সরানো হয় যতক্ষণ না আকার সীমার 50% এর নিচে নেমে আসে। TTL পরিষ্কার ক্যাশ ইনিশিয়ালাইজেশনের সময় এবং cleanExpired-এর প্রতিটি কলঘটলে ঘটে।

Swift-এ Kingfisher ব্যবহারের উদাহরণ

Kingfisher ইমেজ লোড করার জন্য বেশ কয়েকটি ইন্টারফেস প্রদান করে: UIImageView-তে এক্সটেনশন, একটি পৃথক ম্যানেজার এবং একটি SwiftUI ভিউ।

kf-এর মাধ্যমে UIImageView-তে লোড করা

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 ভিউ, যা iOS 15-এর AsyncImage-এর মতো, কিন্তু সম্পূর্ণ Kingfisher ক্যাশিং সমর্থনসহ। ভিউটি স্বয়ংক্রিয়ভাবে 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 ক্যাশ পরিষ্কার করবেন?

মেমরি ক্যাশ পরিষ্কার করতে, KingfisherManager.shared.cache.clearMemoryCache() কল করুন। ডিস্ক ক্যাশের জন্য, clearDiskCache() ব্যবহার করুন। শুধুমাত্র মেয়াদোত্তীর্ণ ফাইল সরাতে — cleanExpiredDiskCache()। ক্যাশের আকার cache.calculateDiskStorageSize()-এর মাধ্যমে পরীক্ষা করা যেতে পারে।

সারসংক্ষেপ

  • Kingfisherসবসব প্রাসঙ্গিক Apple প্রযুক্তির সমর্থনসহ বিশুদ্ধ Swift-এ একটি আধুনিক ইমেজ লোডিং লাইব্রেরি।
  • দ্বি-স্তরীয় ক্যাশ (মেমরি + ডিস্ক) কনফিগারেবল সীমা এবং TTL-সহ দ্রুত অ্যাক্সেস এবং ন্যূনতম ডেটা ব্যবহার নিশ্চিত করে।
  • Async/Await এবং Combine কলব্যাক এবং ডেলিগেট ছাড়াই যেকোনো আর্কিটেকচারে লোডিং এম্বেড করার অনুমতি দেয়।
  • KFImage SwiftUI-এর জন্য প্লেসহোল্ডার, ত্রুটি এবং কাস্টম ট্রানজিশন ইফেক্টসহ একটি ঘোষণামূলক API প্রদান করে।
  • ImageProcessor |> অপারেটরের মাধ্যমে কম্পোজিশনসহ রূপান্তর চেইন তৈরিতে নমনীয়তা প্রদান করে।
  • টাইপ নিরাপত্তা Result ফলাফল প্রক্রিয়াকরণের সময় রানটাইম ত্রুটি দূর করে।
  • মডিউলার আর্কিটেকচার প্রোটোকলের মাধ্যমে পরীক্ষণ এবং কাস্টমাইজেশনের জন্য Manager, Cache এবং Downloader প্রতিস্থাপনের অনুমতি দেয়।

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন