অপ্টিমাইজড ডাউনলোড এড়িয়ে চলুন

আপনার অ্যাপের কিছু ব্যবহারকারীর ইন্টারনেটে মাঝেমধ্যে অ্যাক্সেস থাকে অথবা তাদের ডিভাইসে তথ্য ডাউনলোড করার পরিমাণ সীমিত থাকে। আপনার অ্যাপের ডাউনলোডের জন্য প্রয়োজনীয় ডেটার পরিমাণ কমিয়ে আপনি ব্যবহারকারীদের আপনার অ্যাপের সাথে আরও ঘন ঘন ইন্টারঅ্যাক্ট করতে উৎসাহিত করতে পারেন।

আপনার ডাউনলোড কমানোর সবচেয়ে মৌলিক উপায় হল শুধুমাত্র আপনার যা প্রয়োজন তা ডাউনলোড করা। ডেটার ক্ষেত্রে, এর অর্থ হল REST API বাস্তবায়ন করা যা আপনাকে আপনার শেষ আপডেটের সময় যেমন প্যারামিটার ব্যবহার করে ফিরে আসা ডেটা সীমাবদ্ধ করে এমন কোয়েরি মানদণ্ড নির্দিষ্ট করতে দেয়।

একইভাবে, ছবি ডাউনলোড করার সময়, ক্লায়েন্টে ছোট আকারের পূর্ণ আকারের ছবি ডাউনলোড করার পরিবর্তে, সার্ভার-সাইডের ছবির আকার কমানো ভালো অভ্যাস।

ক্যাশে HTTP প্রতিক্রিয়া

আরেকটি গুরুত্বপূর্ণ কৌশল হল ডুপ্লিকেট ডেটা ডাউনলোড করা এড়িয়ে চলা। ক্যাশিং ব্যবহার করে আপনি একই ডেটা বারবার ডাউনলোড করার সম্ভাবনা কমাতে পারেন। আপনার অ্যাপের ডেটা এবং রিসোর্স ক্যাশ করে, আপনি সেই তথ্যের একটি স্থানীয় কপি তৈরি করেন যা আপনার অ্যাপকে উল্লেখ করতে হবে। যদি আপনার অ্যাপকে অল্প সময়ের মধ্যে একই তথ্য একাধিকবার অ্যাক্সেস করতে হয়, তাহলে আপনাকে কেবল একবার ক্যাশে ডাউনলোড করতে হবে।

আপনার ডাউনলোড করা মোট ডেটার পরিমাণ কমাতে যতটা সম্ভব আক্রমণাত্মকভাবে ক্যাশে করা গুরুত্বপূর্ণ। সর্বদা স্ট্যাটিক রিসোর্স, যার মধ্যে পূর্ণ-আকারের ছবি সহ অন-ডিমান্ড ডাউনলোডগুলিও যুক্তিসঙ্গতভাবে যতটা সম্ভব দীর্ঘ সময়ের জন্য ক্যাশে করুন। অন-ডিমান্ড রিসোর্সগুলি আলাদাভাবে সংরক্ষণ করা উচিত যাতে আপনি নিয়মিতভাবে আপনার অন-ডিমান্ড ক্যাশে ফ্লাশ করে এর আকার পরিচালনা করতে পারেন।

আপনার ক্যাশিংয়ের ফলে আপনার অ্যাপে পুরনো ডেটা না দেখাতে, উপযুক্ত HTTP স্ট্যাটাস কোড এবং হেডার ব্যবহার করুন, যেমন ETag এবং Last-Modified হেডার। এটি আপনাকে নির্ধারণ করতে সাহায্য করে যে সংশ্লিষ্ট কন্টেন্ট কখন রিফ্রেশ করা উচিত। উদাহরণস্বরূপ:

কোটলিন

// url represents the website containing the content to place into the cache.
val conn: HttpsURLConnection = url.openConnection() as HttpsURLConnection
val currentTime: Long = System.currentTimeMillis()
val lastModified: Long = conn.getHeaderFieldDate("Last-Modified", currentTime)

// lastUpdateTime represents when the cache was last updated.
if (lastModified < lastUpdateTime) {
    // Skip update
} else {
    // Parse update
    lastUpdateTime = lastModified
}

জাভা

// url represents the website containing the content to place into the cache.
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
long currentTime = System.currentTimeMillis();
long lastModified = conn.getHeaderFieldDate("Last-Modified", currentTime);

// lastUpdateTime represents when the cache was last updated.
if (lastModified < lastUpdateTime) {
    // Skip update
} else {
    // Parse update
    lastUpdateTime = lastModified;
}

আপনি কিছু নেটওয়ার্কিং লাইব্রেরি কনফিগার করতে পারেন যাতে এই স্ট্যাটাস কোড এবং হেডারগুলি স্বয়ংক্রিয়ভাবে মেনে চলে। উদাহরণস্বরূপ, OkHttp ব্যবহার করার সময়, ক্লায়েন্টের জন্য একটি ক্যাশে ডিরেক্টরি এবং ক্যাশের আকার কনফিগার করলে লাইব্রেরি HTTP ক্যাশিং ব্যবহার করতে সক্ষম হবে, যেমনটি নিম্নলিখিত কোড নমুনায় দেখানো হয়েছে:

কোটলিন

val cacheDir = Context.getCacheDir()
val cacheSize = 10L * 1024L * 1024L // 10 MiB
val client: OkHttpClient = OkHttpClient.Builder()
    .cache(Cache(cacheDir, cacheSize))
    .build()

জাভা

File cacheDir = Context.getCacheDir();
long cacheSize = 10L * 1024L * 1024L; // 10 MiB
OkHttpClient client = new OkHttpClient.Builder()
    .cache(new Cache(cacheDir, cacheSize))
    .build();

ক্যাশে কনফিগার করার মাধ্যমে, আপনি স্থানীয় স্টোরেজ থেকে সরাসরি সম্পূর্ণ ক্যাশে করা HTTP অনুরোধগুলি পরিবেশন করতে পারবেন, যার ফলে নেটওয়ার্ক সংযোগ খোলার প্রয়োজন হবে না। শর্তসাপেক্ষে ক্যাশে করা প্রতিক্রিয়াগুলি সার্ভার থেকে তাদের তাজাতা যাচাই করতে পারে, ডাউনলোডের সাথে সম্পর্কিত ব্যান্ডউইথ খরচ বাদ দেয়। আনক্যাশে করা প্রতিক্রিয়াগুলি ভবিষ্যতের অনুরোধগুলির জন্য প্রতিক্রিয়া ক্যাশে সংরক্ষণ করা হয়।

আপনি Context.getExternalCacheDir() ব্যবহার করে অ-সংবেদনশীল ডেটা অ-পরিচালিত বহিরাগত ক্যাশে ডিরেক্টরিতে ক্যাশে করতে পারেন। বিকল্পভাবে, আপনি Context.getCacheDir() ব্যবহার করে পরিচালিত, সুরক্ষিত অ্যাপ্লিকেশন ক্যাশে ডেটা ক্যাশে করতে পারেন। মনে রাখবেন যে সিস্টেমে উপলব্ধ স্টোরেজ কম থাকলে এই অভ্যন্তরীণ ক্যাশেটি ফ্লাশ করা হতে পারে।

একটি সংগ্রহস্থল ব্যবহার করুন

ক্যাশিংয়ের আরও পরিশীলিত পদ্ধতির জন্য, রিপোজিটরি ডিজাইন প্যাটার্ন বিবেচনা করুন। এর মধ্যে একটি কাস্টম ক্লাস তৈরি করা জড়িত, যা একটি রিপোজিটরি নামে পরিচিত, যা কিছু নির্দিষ্ট ডেটা বা রিসোর্সের উপর একটি API অ্যাবস্ট্রাকশন প্রদান করে। রিপোজিটরি প্রাথমিকভাবে বিভিন্ন উৎস থেকে তার ডেটা আনতে পারে, যেমন একটি রিমোট ওয়েব পরিষেবা, কিন্তু পরবর্তী কলগুলিতে কলারদের ডেটার একটি ক্যাশেড সংস্করণ সরবরাহ করে। ইনডিরেক্টেশনের এই স্তরটি আপনাকে আপনার অ্যাপের জন্য নির্দিষ্ট একটি শক্তিশালী ক্যাশিং কৌশল প্রদান করতে দেয়। আপনার অ্যাপের মধ্যে রিপোজিটরি প্যাটার্ন ব্যবহার সম্পর্কে আরও তথ্যের জন্য, অ্যাপ আর্কিটেকচারের নির্দেশিকা দেখুন।