ইমেজ জন্য কর্মক্ষমতা অপ্টিমাইজ করা

ছবি নিয়ে কাজ করলে খুব দ্রুত পারফরম্যান্সের সমস্যা দেখা দিতে পারে, যদি আপনি সতর্ক না থাকেন। বড় বিটম্যাপ নিয়ে কাজ করার সময় আপনি সহজেই OutOfMemoryError সম্মুখীন হতে পারেন। আপনার অ্যাপটি সর্বোত্তমভাবে কাজ করছে কিনা তা নিশ্চিত করতে এই সেরা অনুশীলনগুলি অনুসরণ করুন।

আপনার প্রয়োজনীয় বিটম্যাপের আকারটিই লোড করুন।

বেশিরভাগ স্মার্টফোনেই উচ্চ রেজোলিউশনের ক্যামেরা থাকে যা বড় ইমেজ ফাইল তৈরি করে। যদি আপনি স্ক্রিনে কোনও ছবি দেখান, তাহলে আপনাকে হয় ছবির রেজোলিউশন কমাতে হবে অথবা আপনার ছবির ধারক আকারে ছবিটি লোড করতে হবে। প্রয়োজনের চেয়ে বড় ইমেজ ক্রমাগত লোড করার ফলে GPU ক্যাশে ক্লান্ত হয়ে যেতে পারে, যার ফলে কম পারফর্মেন্স UI রেন্ডারিং হতে পারে।

ছবির আকার পরিচালনা করতে:

সম্ভব হলে বিটম্যাপের উপর ভেক্টর ব্যবহার করুন

স্ক্রিনে কোনও কিছু দৃশ্যত উপস্থাপন করার সময়, আপনাকে সিদ্ধান্ত নিতে হবে যে এটি ভেক্টর হিসাবে উপস্থাপন করা যেতে পারে কিনা। বিটম্যাপের চেয়ে ভেক্টর চিত্রগুলিকে অগ্রাধিকার দিন, কারণ আপনি যখন বিভিন্ন আকারে স্কেল করেন তখন এগুলি পিক্সেলেট হয় না। তবে, সবকিছুকে ভেক্টর হিসাবে উপস্থাপন করা যায় না - ক্যামেরা দিয়ে তোলা চিত্রগুলিকে ভেক্টরে রূপান্তর করা যায় না।

বিভিন্ন স্ক্রিন আকারের জন্য বিকল্প সম্পদ সরবরাহ করুন

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

ImageBitmap ব্যবহার করার সময়, অঙ্কনের আগে prepareToDraw কল করুন

ImageBitmap ব্যবহার করার সময়, GPU তে টেক্সচার আপলোড করার প্রক্রিয়া শুরু করার জন্য, এটি আঁকার আগে ImageBitmap#prepareToDraw() কল করুন। এটি GPU কে ​​টেক্সচার প্রস্তুত করতে এবং স্ক্রিনে ভিজ্যুয়াল দেখানোর কর্মক্ষমতা উন্নত করতে সহায়তা করে। বেশিরভাগ ইমেজ লোডিং লাইব্রেরি ইতিমধ্যেই এই অপ্টিমাইজেশনটি করে, তবে আপনি যদি নিজে ImageBitmap ক্লাসের সাথে কাজ করেন, তাহলে এটি মনে রাখা উচিত।

আপনার কম্পোজেবলে Painter পরিবর্তে প্যারামিটার হিসেবে Int DrawableRes অথবা URL পাস করা পছন্দ করুন।

ছবি পরিচালনার জটিলতার কারণে (উদাহরণস্বরূপ, Bitmaps জন্য একটি ইকুয়ালস ফাংশন লেখা গণনাগতভাবে ব্যয়বহুল হবে), Painter API স্পষ্টভাবে একটি স্থিতিশীল ক্লাস হিসাবে চিহ্নিত করা হয়নি। অস্থির ক্লাসগুলি অপ্রয়োজনীয় পুনর্গঠনের দিকে পরিচালিত করতে পারে কারণ কম্পাইলার সহজেই অনুমান করতে পারে না যে ডেটা পরিবর্তিত হয়েছে কিনা।

অতএব, আপনার কম্পোজেবলে প্যারামিটার হিসেবে একটি URL অথবা ড্রয়েবল রিসোর্স আইডি পাস করা ভালো, প্যারামিটার হিসেবে একটি Painter পাস করার পরিবর্তে।

// Prefer this:
@Composable
fun MyImage(url: String) {

}
// Over this:
@Composable
fun MyImage(painter: Painter) {

}

আপনার প্রয়োজনের চেয়ে বেশি সময় ধরে মেমোরিতে বিটম্যাপ সংরক্ষণ করবেন না।

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

আপনার AAB/APK ফাইলের সাথে বড় ছবি প্যাকেজ করবেন না।

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

{% অক্ষরে অক্ষরে %} {% এন্ডভারব্যাটিম %} {% অক্ষরে অক্ষরে %} {% এন্ডভারব্যাটিম %}