আপনার অ্যাপের কিছু ব্যবহারকারীর ইন্টারনেটে মাঝে মাঝে অ্যাক্সেস থাকে বা তাদের ডিভাইসে ডাউনলোড করা তথ্যের পরিমাণের উপর সীমাবদ্ধতা থাকে। আপনার অ্যাপকে যে পরিমাণ ডেটা ডাউনলোড করতে হয় তা কমিয়ে, আপনি ব্যবহারকারীদের আপনার অ্যাপের সাথে আরও ঘন ঘন ইন্টার্যাক্ট করতে উৎসাহিত করতে পারেন।
ডাউনলোড কমানোর সবচেয়ে সহজ উপায় হল, আপনার যা প্রয়োজন শুধু সেটিই ডাউনলোড করা। ডেটার ক্ষেত্রে, এর অর্থ হল 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 }
আপনি কিছু নেটওয়ার্কিং লাইব্রেরি কনফিগার করতে পারেন যাতে এই স্ট্যাটাস কোড ও হেডার অটোমেটিক মেনে চলা হয়। যেমন, OkHttp ব্যবহার করার সময়, ক্লায়েন্টের জন্য ক্যাশে ডিরেক্টরি ও ক্যাশে সাইজ কনফিগার করলে, লাইব্রেরি HTTP ক্যাশিং ব্যবহার করতে পারবে, যেমনটি নিম্নলিখিত কোড স্যাম্পেলে দেখানো হয়েছে:
val cacheDir = context.getCacheDir() val cacheSize = 10L * 1024L * 1024L // 10 MiB val client: OkHttpClient = OkHttpClient.Builder() .cache(Cache(cacheDir, cacheSize)) .build()
ক্যাশে কনফিগার করা থাকলে, আপনি সরাসরি লোকাল স্টোরেজ থেকে সম্পূর্ণ ক্যাশে করা HTTP অনুরোধ পরিবেশন করতে পারবেন, যার ফলে নেটওয়ার্ক কানেকশন খোলার প্রয়োজন হবে না। শর্তসাপেক্ষে ক্যাশে করা উত্তর সার্ভার থেকে তার ফ্রেশনেস যাচাই করতে পারে, ডাউনলোডের সাথে যুক্ত ব্যান্ডউইথের খরচ বাদ দিয়ে। ক্যাশে করা হয়নি এমন উত্তর ভবিষ্যতের অনুরোধের জন্য উত্তর ক্যাশেতে স্টোর করা হয়।
আপনি
Context.getExternalCacheDir() ব্যবহার করে
ম্যানেজ না করা এক্সটার্নাল ক্যাশে ডিরেক্টরিতে সংবেদনশীল নয় এমন ডেটা ক্যাশে করতে পারবেন।
বিকল্প হিসেবে, আপনি
Context.getCacheDir()
ব্যবহার করে ম্যানেজ করা, সুরক্ষিত অ্যাপ্লিকেশন ক্যাশে ডেটা ক্যাশে করতে পারবেন।
মনে রাখবেন যে সিস্টেমে উপলভ্য স্টোরেজ কম থাকলে এই ইন্টার্নাল ক্যাশে ফ্লাশ করা হতে পারে।
রিপোজিটরি ব্যবহার করা
ক্যাশিংয়ের আরও উন্নত পদ্ধতির জন্য, রিপোজিটরি ডিজাইন প্যাটার্ন ব্যবহার করার কথা বিবেচনা করুন। এর মধ্যে একটি কাস্টম ক্লাস তৈরি করা অন্তর্ভুক্ত, যা রিপোজিটরি নামে পরিচিত, যা কিছু নির্দিষ্ট ডেটা বা রিসোর্সের উপর একটি API অ্যাবস্ট্রাকশন প্রদান করে। রিপোজিটরি প্রাথমিকভাবে বিভিন্ন সোর্স থেকে ডেটা আনতে পারে, যেমন রিমোট ওয়েব সার্ভিস, কিন্তু পরবর্তী কলে কলারদের ডেটার ক্যাশে করা ভার্সন প্রদান করে। এই ইনডিরেকশন লেয়ার আপনাকে একটি শক্তিশালী ক্যাশিং স্ট্র্যাটেজি প্রদান করতে দেয় যা আপনার অ্যাপের জন্য নির্দিষ্ট। আপনার অ্যাপের মধ্যে রিপোজিটরি প্যাটার্ন ব্যবহার করার ব্যাপারে আরও তথ্যের জন্য, অ্যাপ আর্কিটেকচার সংক্রান্ত গাইড দেখুন।