SDWebImage: এটি কী, মূল ধারণা এবং UIImageView

লেখক: IT Sectr প্রকাশিত: 2026-05-05 পড়ার সময়: 8 মিনিট

SDWebImage iOS এবং macOS-এ অ্যাসিঙ্ক্রোনাস ইমেজ লোডিংয়ের জন্য একটি লাইব্রেরি, যা নেটওয়ার্ক, ক্যাশ এবং অ্যানিমেশনের সাথে কাজ করার জন্য একটি ইউনিফায়েড API প্রদান করে। অফিসিয়াল রিপোজিটরি অনুসারে, লাইব্রেরিটি 100,000-এর বেশি প্রজেক্টে ব্যবহৃত হয় এবং GIF, WebP, SVG এবং প্রগ্রেসিভ লোডিং সমর্থন করে। SDWebImage ডিস্ক এবং মেমরিতে স্বয়ংক্রিয় ক্যাশিং প্রদান করে, পাশাপাশি UIKit এবং SwiftUI-এর সাথে ইন্টিগ্রেশন।

মূল বিষয়

  • SDWebImage iOS-এ ক্যাশিং, অ্যানিমেশন এবং ট্রান্সফর্মেশন সহ অ্যাসিঙ্ক্রোনাস ইমেজ লোডিংয়ের জন্য একটি লাইব্রেরি।
  • SDWebImageManager কেন্দ্রীয় ক্লাস যা ইমেজ লোডিং, ডিকোডিং এবং ক্যাশিং সমন্বয় করে।
  • ডিস্ক ক্যাশ স্টোরেজে ইমেজ সংরক্ষণ করে, পরবর্তী ভিজিটে অফলাইন লোডিং সক্ষম করে।
  • WebP এবং GIF SDImageWebPCoder এবং SDImageGIFCoder প্লাগইনের মাধ্যমে সমর্থিত।
  • SwiftUI — লাইব্রেরি ডিক্ল্যারেটিভ ইমেজ লোডিংয়ের জন্য WebImage ভিউ কম্পোনেন্ট প্রদান করে।

SDWebImage কী?

SDWebImage Apple প্ল্যাটফর্ম (iOS, macOS, tvOS, watchOS)-এ অ্যাসিঙ্ক্রোনাস ইমেজ লোডিংয়ের জন্য একটি লাইব্রেরি। এটি UIImageView-এর জন্য sd_setImage পদ্ধতি সহ একটি ক্যাটাগরি প্রদান করে, যা কোডের এক লাইনে যেকোনো উৎস থেকে ইমেজ লোড, ক্যাশ এবং প্রদর্শন করে।

লাইব্রেরি প্রগ্রেসিভ লোডিং (বাইট গ্রহণের সাথে সাথে ইমেজ দেখা যায়), অ্যানিমেটেড ইমেজ (GIF, APNG), ট্রান্সফর্মেশন (গোলাকার, ক্রপিং, ওয়াটারমার্কিং) এবং কাস্টম ডিকোডার সমর্থন করে। GitHub পরিসংখ্যান অনুসারে, SDWebImage-এর 25,000-এর বেশি স্টার আছে এবং এটি Twitter, Pinterest এবং Instagram-সহ প্রধান অ্যাপ্লিকেশনে ব্যবহৃত হয়।

আর্কিটেকচার একটি কম্পোনেন্ট চেইনের উপর নির্মিত: Coder (ডিকোডিং), Cache (স্টোরেজ), Loader (নেটওয়ার্ক) এবং Transformer (প্রসেসিং)। প্রতিটি কম্পোনেন্ট প্রতিস্থাপনযোগ্য, যা লাইব্রেরিকে নির্দিষ্ট প্রজেক্টের প্রয়োজনীয়তার সাথে খাপ খাইয়ে নিতে দেয়।

SDWebImage কীভাবে কাজ করে: ম্যানেজার এবং ক্যাশ

SDWebImageManager কেন্দ্রীয় কম্পোনেন্ট যা লোডিং প্রক্রিয়া সমন্বয় করে। এটি একটি URL গ্রহণ করে, ক্যাশ চেক করে, ডেটা লোড করে, এটি UIImage-এ ডিকোড করে এবং ImageView বা Completion Handler-এ পাঠায়। ম্যানেজার একটি শেয়ার্ড সিঙ্গলটনের মাধ্যমে কাজ করে, যা অ্যাপ্লিকেশনের যেকোনো স্থান থেকে অ্যাক্সেসযোগ্য।

লোডিং প্রক্রিয়া

ম্যানেজার ক্রমান্বয়ে মেমরি ক্যাশ (UIImage সহ NSDictionary), তারপর ডিস্ক ক্যাশ (ফাইল সিস্টেম) চেক করে। মিস হলে, NSURLSession-এর মাধ্যমে একটি নেটওয়ার্ক অনুরোধ করা হয়। লোডিংয়ের পর, ডেটা ডিকোড হয়, ট্রান্সফর্মেশনের মধ্য দিয়ে যায় এবং উভয় ক্যাশে সংরক্ষিত হয়। সম্পূর্ণ প্রক্রিয়াটি ব্যাকগ্রাউন্ড কিউতে চলে, ফলাফল মূল কিউতে বিতরণ করা হয়।

  • মেমরি ক্যাশ — O(1) লুকআপ, কনফিগারেবল মেমরি সীমা সহ UIImage সংরক্ষণ করে
  • ডিস্ক ক্যাশ — ফাইল সিস্টেম থেকে পড়ে, সংকুচিত ডেটা সংরক্ষণ করে
  • NSURLSession — HTTP/2 সমর্থন এবং কনফিগারেবল টাইমআউট সহ লোডিং

UIImageView ক্যাটাগরি

UIImageView+WebCache একটি Objective-C ক্যাটাগরি (Swift থেকে অ্যাক্সেসযোগ্য) যা sd_setImage পদ্ধতি যোগ করে। এই পদ্ধতি একটি URL, placeholder, অপশন (SDWebImageOptions) এবং একটি কমপ্লিশন ব্লক গ্রহণ করে। ক্যাটাগরি sd_cancelCurrentImageLoad মেকানিজমের মাধ্যমে টেবিল সেল পুনরায় ব্যবহার করার সময় স্বয়ংক্রিয়ভাবে পূর্ববর্তী অনুরোধ বাতিল করে।

SDWebImage-এর মূল ক্লাস

SDWebImage আর্কিটেকচার স্পষ্ট দায়িত্বের ক্ষেত্র সহ কয়েকটি মডিউলে বিভক্ত। প্রতিটি ক্লাস একটি কাজ সমাধান করে — লোডিং থেকে প্রদর্শন পর্যন্ত।

SDWebImageManager

SDWebImageManager সকল ইমেজ অপারেশনের জন্য ফেসাড। এতে ImageCache (SDImageCache) এবং ImageLoader (SDWebImageDownloader)-এর রেফারেন্স রয়েছে। SDWebImageManagerDelegate-এর মাধ্যমে, আপনি লোডিং আটকাতে এবং URL বা আচরণ পরিবর্তন করতে পারেন।

SDImageCache

SDImageCache একটি দ্বি-স্তরের ক্যাশ (মেমরি + ডিস্ক) যা একটি অনন্য নেমস্পেস দিয়ে আরম্ভ করা হয়। মেমরি ক্যাশ UIImage কনফিগারেবল সীমা সহ সংরক্ষণ করে (ডিফল্টরূপে — সিস্টেম মেমরি সতর্কতা পর্যন্ত)। ডিস্ক ক্যাশ Library/Caches ডিরেক্টরিতে কনফিগারেবল স্টোরেজ সময়কাল (ডিফল্ট 7 দিন) সহ ডেটা সংরক্ষণ করে।

SDWebImageDownloader

SDWebImageDownloader NSURLSession-ভিত্তিক একটি HTTP ক্লায়েন্ট যা হেডার, টাইমআউট এবং পুনরায় চেষ্টা সমর্থন করে। ডাউনলোডার একই অনুরোধগুলিকে একটি নেটওয়ার্ক কলে ডিডুপ্লিকেট করে এবং ফলাফল সকল সাবস্ক্রাইবারের মধ্যে বিতরণ করে।

SDWebImage ক্যাশিং আর্কিটেকচার

SDWebImage নির্ধারক চেক অর্ডার সহ দ্বি-স্তরের ক্যাশিং প্রয়োগ করে: প্রথমে মেমরি, তারপর ডিস্ক। ক্যাশ কী হল কোয়েরি প্যারামিটার বা তার MD5 হ্যাশ ছাড়া সম্পূর্ণ ইমেজ URL।

স্তরস্টোরেজের ধরনসামগ্রীসীমা
মেমরি ক্যাশNSCache (NSDictionary)UIImage (ডিকোডেড Bitmap)মেমরি সতর্কতা পর্যন্ত
ডিস্ক ক্যাশফাইল সিস্টেমNSData (JPEG/PNG/WebP)7 দিন TTL (কনফিগারেবল)
অটো পার্জ ক্যাশমেমরি + ডিস্কসম্মিলিত ফ্রেমওয়ার্ক ক্যাশকনফিগারেবল ফাইল আকার

মেমরি সতর্কতা গ্রহণের পর, iOS UIApplicationDidReceiveMemoryWarningNotification-এর মাধ্যমে SDImageCache-কে জানায়, যার পরে মেমরি ক্যাশ সম্পূর্ণরূপে পরিষ্কার হয়ে যায়। ডিস্ক ক্যাশ TTL দ্বারা বা সীমা অতিক্রম করলে পরিষ্কার হয়, ফাইলগুলি শেষ অ্যাক্সেসের তারিখ অনুসারে সাজিয়ে।

ম্যানুয়াল ক্যাশ ব্যবস্থাপনার জন্য নিম্নলিখিত পদ্ধতিগুলি উপলব্ধ: clearMemory, clearDisk, calculateSize. SDWebImageCacheMemoryOnly বা SDWebImageAvoidAutoSetImage অপশন ব্যবহার করে নির্দিষ্ট অনুরোধের জন্য ক্যাশিং অক্ষম করা যেতে পারে।

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

SDWebImage ইমেজ লোড করার জন্য বেশ কয়েকটি ইন্টারফেস প্রদান করে: সাধারণ UIImageView ক্যাটাগরি থেকে কাস্টম প্রসেসিং সহ উন্নত ম্যানেজার পর্যন্ত।

UIImageView-এ বেসিক লোডিং

sd_setImage UIImageView-এ ইমেজ লোড করার প্রাথমিক পদ্ধতি। এটি URL, placeholder এবং Options ও Context-এর মাধ্যমে ঐচ্ছিক প্যারামিটার গ্রহণ করে। সমস্ত Completion Handler মূল থ্রেডে এক্সিকিউট হয়।

swift
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 সহ প্রোটোকল সমর্থন করে। বিল্ট-ইন ট্রান্সফর্মেশনের মধ্যে রয়েছে: বৃত্ত, গোলাকার কোণ, রঙ ফিল্টার ওভারলে এবং আকার পরিবর্তন। && অপারেটর ব্যবহার করে ট্রান্সফর্মেশন একত্রিত করা যেতে পারে।

swift
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]
)

SwiftUI-এর সাথে ব্যবহার

লাইব্রেরি WebImage — SwiftUI-এর জন্য placeholder, প্রোগ্রেস ইন্ডিকেটর এবং ত্রুটি ব্যবস্থাপনা সহ একটি ভিউ কম্পোনেন্ট প্রদান করে। কম্পোনেন্ট স্বয়ংক্রিয়ভাবে ভিউ লাইফসাইকেলে সাবস্ক্রাইব করে এবং অদৃশ্য হওয়ার সময় লোডিং বাতিল করে।

swift
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-এ ইমেজ ট্রান্সফর্মেশন

SDWebImage SDImageTransformer প্রোটোকলের মাধ্যমে একটি নমনীয় ট্রান্সফর্মেশন সিস্টেম প্রদান করে। ট্রান্সফর্মেশন ডিকোডিংয়ের পরে কিন্তু ক্যাশিংয়ের আগে প্রয়োগ করা হয় — ট্রান্সফর্মেশন ফলাফল একটি নতুন কী-র অধীনে ডিস্কে সংরক্ষিত হয়, পরবর্তী অনুরোধে পুনরায় প্রয়োগ রোধ করে।

বিল্ট-ইন ট্রান্সফর্মেশনের মধ্যে রয়েছে: SDImageResizingTransformer (mode সহ আকার পরিবর্তন), SDImageRoundCornerTransformer (ঐচ্ছিক সীমানা সহ গোলাকার কোণ), SDImageFlipTransformer (মিররিং) এবং SDImageFilterTransformer (CoreImage ফিল্টার)। && অপারেটরের মাধ্যমে সমন্বয় করা হয়, একটি প্রসেসিং চেইন তৈরি করে।

কাস্টম ট্রান্সফর্মেশনের জন্য, transformedImageWithImage:forKey: পদ্ধতি সহ SDImageTransformer প্রোটোকল বাস্তবায়ন করাই যথেষ্ট। ট্রান্সফর্মেশন কী স্বয়ংক্রিয়ভাবে ক্যাশ কী-তে যুক্ত হয়, একই ইমেজের বিভিন্ন সংস্করণের মধ্যে সংঘর্ষ রোধ করে।

SDWebImage বনাম Kingfisher তুলনা

iOS প্ল্যাটফর্মে, SDWebImage-এর প্রধান প্রতিযোগী হল Kingfisher (বিশুদ্ধ Swift) এবং Nuke। SDWebImage এবং Kingfisher-এর মধ্যে পছন্দ প্রায়শই প্রজেক্টের ভাষা এবং প্রয়োজনীয় কার্যকারিতা দ্বারা নির্ধারিত হয়।

বৈশিষ্ট্যSDWebImageKingfisher
ভাষাObjective-C + Swift APISwift (100%)
SwiftUIWebImage ViewKFImage View
GIFহ্যাঁ (অন্তর্নির্মিত)হ্যাঁ (অন্তর্নির্মিত)
WebPহ্যাঁ (প্লাগইন)হ্যাঁ (অন্তর্নির্মিত)
প্রগ্রেসিভ লোডিংহ্যাঁ (প্লাগইন সহ)হ্যাঁ
ফ্রেমওয়ার্ক আকার~1.2 MB~900 KB
ক্যাশমেমরি + ডিস্কমেমরি + ডিস্ক
CocoaPods সমর্থনহ্যাঁহ্যাঁ

SDWebImage Objective-C প্রজেক্ট বা হাইব্রিড প্রজেক্টের জন্য পছন্দের পছন্দ হিসেবে রয়ে গেছে। Kingfisher টাইপ সুরক্ষা এবং নেটিভ Swift সিনট্যাক্সের কারণে বিশুদ্ধ Swift প্রজেক্টের জন্য বেশি উপযুক্ত। উভয় লাইব্রেরির একই রকম ক্যাশিং আর্কিটেকচার এবং কর্মক্ষমতা রয়েছে।

iOS প্রজেক্টে SDWebImage সেটআপ

SDWebImage Swift Package Manager, CocoaPods বা Carthage-এর মাধ্যমে ইন্টিগ্রেট করা যেতে পারে। লাইব্রেরিটি মডিউলে বিভক্ত: কোর (SDWebImage), Coder (অতিরিক্ত ফর্ম্যাট) এবং MapKit (MKAnnotationView-এর জন্য)।

swift
// 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-এর মাধ্যমে করা হয়।

swift
// ক্যাশ কাস্টমাইজেশন
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 কী এবং এটি কী কী সমস্যা সমাধান করে?

SDWebImage iOS এবং macOS-এ অ্যাসিঙ্ক্রোনাস ইমেজ লোডিংয়ের জন্য একটি লাইব্রেরি। এটি নেটওয়ার্ক থেকে ইমেজ ক্যাশিং, ডিকোডিং, ট্রান্সফর্মিং এবং প্রদর্শনের সমস্যাগুলি সমাধান করে, ডেভেলপারকে ম্যানুয়াল থ্রেড এবং মেমরি ব্যবস্থাপনা থেকে মুক্ত করে।

UITableView-এর সাথে SDWebImage কীভাবে ব্যবহার করবেন?

cellForRowAt পদ্ধতিতে, URL এবং placeholder সহ sd_setImage ব্যবহার করুন। সেল পুনরায় ব্যবহার করার সময় লাইব্রেরি স্বয়ংক্রিয়ভাবে পূর্ববর্তী অনুরোধ বাতিল করে। মসৃণ স্ক্রলের জন্য, .progressiveLoad অপশন নির্দিষ্ট করুন এবং কনটেক্সটের মাধ্যমে থাম্বনেইল আকার কনফিগার করুন।

SDWebImage Kingfisher থেকে কীভাবে আলাদা?

SDWebImage Objective-C-তে Swift র্যাপার সহ লেখা, যেখানে Kingfisher বিশুদ্ধ Swift-এ লেখা। SDWebImage-এর বিস্তৃত প্লাগইন ইকোসিস্টেম (WebP, SVG, MapKit) রয়েছে। Kingfisher ভালো টাইপ সুরক্ষা এবং Swift Concurrency ইন্টিগ্রেশন প্রদান করে।

SDWebImage-এ WebP সমর্থন কীভাবে যুক্ত করবেন?

CocoaPods বা SPM-এর মাধ্যমে SDWebImageWebPCoder প্লাগইন ইনস্টল করুন। AppDelegate-এ SDImageWebPCoder.shared কল করে কোডার নিবন্ধন করুন। নিবন্ধনের পর, লাইব্রেরি স্বয়ংক্রিয়ভাবে ফর্ম্যাট সনাক্ত করে এবং WebP ডিকোড করে।

SDWebImage ক্যাশ প্রোগ্রামেটিকভাবে কীভাবে পরিষ্কার করবেন?

মেমরির জন্য SDImageCache.shared.clearMemory() এবং ডিস্কের জন্য SDImageCache.shared.clearDisk() কল করুন। শুধুমাত্র পুরানো ফাইল পরিষ্কার করতে, TTL চেক সহ clearDisk(completion:) ব্যবহার করুন। calculateSizeWithCompletionBlock পদ্ধতি বর্তমান ক্যাশ আকার ফেরত দেয়।

সারাংশ

  • SDWebImage GitHub-এ 25,000-এর বেশি স্টার সহ iOS-এ ইমেজ লোডিংয়ের ডি ফ্যাক্টো স্ট্যান্ডার্ড।
  • দ্বি-স্তরের ক্যাশ (মেমরি + ডিস্ক) পুনরাবৃত্ত ইমেজের তাত্ক্ষণিক লোডিং এবং অফলাইন অ্যাক্সেস নিশ্চিত করে।
  • প্রগ্রেসিভ লোডিং এবং GIF, WebP, SVG-র সমর্থন লাইব্রেরিকে যেকোনো ফর্ম্যাটের জন্য একটি সার্বজনীন সমাধান করে তোলে।
  • SDWebImageManager প্রতিটি কম্পোনেন্ট কাস্টমাইজ করার ক্ষমতা সহ লোডিংয়ের জন্য একটি ইউনিফায়েড ফেসাড প্রদান করে।
  • WebImage SwiftUI-এর জন্য সম্পূর্ণ স্টেট হ্যান্ডলিং সহ ডিক্ল্যারেটিভ স্টাইলে ইমেজ লোড করার অনুমতি দেয়।
  • ট্রান্সফর্মেশন (আকার, গোলাকার, রঙ) && অপারেটর ব্যবহার করে সম্মিলিত হয় এবং ক্যাশিংয়ের আগে প্রয়োগ করা হয়।
  • Objective-C সামঞ্জস্যতা Swift-এ মাইগ্রেট না করেই SDWebImage-কে লিগ্যাসি প্রজেক্টের জন্য অ্যাক্সেসযোগ্য করে তোলে।

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

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

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

আরও পড়ুন