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

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

আপনার ডাউনলোড কমানোর সবচেয়ে মৌলিক উপায় হল শুধুমাত্র আপনার যা প্রয়োজন তা ডাউনলোড করা। ডেটার পরিপ্রেক্ষিতে, এর অর্থ হল 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 বিমূর্ততা প্রদান করে। রিপোজিটরি প্রাথমিকভাবে বিভিন্ন উত্স থেকে ডেটা আনতে পারে, যেমন একটি দূরবর্তী ওয়েব পরিষেবা, কিন্তু পরবর্তী কলগুলিতে কলকারীদের ডেটার একটি ক্যাশে সংস্করণ সরবরাহ করে। নির্দেশের এই স্তরটি আপনাকে একটি শক্তিশালী ক্যাশিং কৌশল প্রদান করতে দেয় যা আপনার অ্যাপের জন্য নির্দিষ্ট। আপনার অ্যাপের মধ্যে রিপোজিটরি প্যাটার্ন ব্যবহার করার বিষয়ে আরও তথ্যের জন্য, অ্যাপ আর্কিটেকচারের গাইড দেখুন।