জেটপ্যাক কম্পোজ UI ডেভেলপমেন্টকে ত্বরান্বিত করে এবং অ্যান্ড্রয়েড ডেভেলপমেন্টকে উন্নত করে । তবে, একটি বিদ্যমান অ্যাপে কম্পোজ যুক্ত করা হলে তা অ্যাপটির APK সাইজ, বিল্ড এবং রানটাইম পারফরম্যান্সের মতো মেট্রিকগুলোকে কীভাবে প্রভাবিত করতে পারে, সেদিকেও খেয়াল রাখতে হবে।
APK-এর আকার এবং বিল্ড টাইম
এই অংশে সানফ্লাওয়ার স্যাম্পল অ্যাপটির মাধ্যমে APK-এর আকার এবং বিল্ড টাইমের উপর এর প্রভাব আলোচনা করা হয়েছে—এই অ্যাপটি একটি ভিউ-ভিত্তিক অ্যাপকে কম্পোজে স্থানান্তরের সর্বোত্তম পদ্ধতিগুলো প্রদর্শন করে।
APK সাইজ
আপনার প্রজেক্টে লাইব্রেরি যোগ করলে এর APK ফাইলের আকার বেড়ে যায়। নিম্নলিখিত ফলাফলগুলো প্রতিটি প্রজেক্টের মিনিফাইড রিলিজ APK-এর জন্য প্রযোজ্য, যেখানে রিসোর্স ও কোড সঙ্কুচিতকরণ সক্রিয় করা হয়েছে , R8 ফুল মোড ব্যবহার করা হয়েছে এবং APK অ্যানালাইজার দিয়ে পরিমাপ করা হয়েছে।
| শুধুমাত্র দেখার জন্য | মিশ্র মতামত এবং রচনা | শুধুমাত্র রচনা করুন | |
|---|---|---|---|
| ডাউনলোডের আকার | ২,২৫২ কেবি | ৩,০৩৪ কেবি | ২,৯৬৬ কেবি |
সানফ্লাওয়ারে প্রথমবার কম্পোজ যোগ করার পর, APK-এর আকার ২,২৫২ KB থেকে বেড়ে ৩,০৩৪ KB হয়—যা ৭৮২ KB বৃদ্ধি । তৈরি হওয়া APK-টিতে UI বিল্ডের সাথে ভিউজ এবং কম্পোজের মিশ্রণ ছিল। সানফ্লাওয়ারে অতিরিক্ত ডিপেন্ডেন্সি যুক্ত হওয়ায় এই বৃদ্ধি প্রত্যাশিত ছিল।
অন্যদিকে, যখন সানফ্লাওয়ারকে শুধুমাত্র কম্পোজ-ভিত্তিক অ্যাপে রূপান্তরিত করা হয়েছিল, তখন APK ফাইলের আকার ৩,০৩৪ KB থেকে কমে ২,৯৬৬ KB হয়েছিল—যা ৬৮ KB কম । AppCompat এবং ConstraintLayout মতো অব্যবহৃত ভিউ ডিপেন্ডেন্সিগুলো অপসারণ করার ফলেই এই হ্রাস ঘটেছিল।
নির্মাণের সময়
Compose যোগ করলে আপনার অ্যাপের বিল্ড টাইম বেড়ে যায়, কারণ Compose কম্পাইলার আপনার অ্যাপের কম্পোজেবল ফাইলগুলো প্রসেস করে। নিম্নলিখিত ফলাফলগুলো স্বতন্ত্র gradle-profiler টুল ব্যবহার করে পাওয়া গেছে, যা একটি বিল্ডকে বেশ কয়েকবার চালায়, যাতে Sunflower-এর ডিবাগ বিল্ডের গড় সময়কাল নির্ণয় করা যায়:
gradle-profiler --benchmark --project-dir . :app:assembleDebug
| শুধুমাত্র দেখার জন্য | মিশ্র মতামত এবং রচনা | শুধুমাত্র রচনা করুন | |
|---|---|---|---|
| গড় নির্মাণ সময় | ২৯৯.৪৭ মিলিসেকেন্ড | ৩৯৯.০৯ মিলিসেকেন্ড | ৩৪২.১৬ মিলিসেকেন্ড |
সানফ্লাওয়ারে প্রথমবার কম্পোজ যোগ করার পর, গড় বিল্ড টাইম ২৯৯ মিলিসেকেন্ড থেকে বেড়ে ৩৯৯ মিলিসেকেন্ড হয়েছে—যা ১০০ মিলিসেকেন্ড বেশি । এই সময়কালের কারণ হলো, প্রজেক্টে সংজ্ঞায়িত কম্পোজ কোডকে রূপান্তর করার জন্য কম্পোজ কম্পাইলার অতিরিক্ত কিছু কাজ সম্পাদন করে।
অন্যদিকে, সানফ্লাওয়ারকে কম্পোজে স্থানান্তরিত করার কাজ সম্পন্ন হলে গড় বিল্ড টাইম ৫৭ মিলিসেকেন্ড কমে ৩৪২ মিলিসেকেন্ডে নেমে আসে। এই হ্রাসের পেছনে বেশ কিছু কারণ রয়েছে, যেগুলো সম্মিলিতভাবে বিল্ড টাইম কমিয়ে দেয়; যেমন— ডেটা বাইন্ডিং অপসারণ, ক্যাপ্ট (kapt) ব্যবহারকারী ডিপেন্ডেন্সিগুলোকে কেএসপি (KSP)-তে স্থানান্তর এবং বিভিন্ন ডিপেন্ডেন্সিকে তাদের সর্বশেষ সংস্করণে হালনাগাদ করা।
সারসংক্ষেপ
কম্পোজ ব্যবহার করলে আপনার অ্যাপের APK সাইজ কার্যকরভাবে বেড়ে যাবে এবং কম্পোজ কোডের কম্পাইলেশন প্রক্রিয়ার কারণে আপনার অ্যাপের বিল্ড টাইম পারফরম্যান্সও বৃদ্ধি পাবে। তবে, এই অসুবিধাগুলোকে কম্পোজের সুবিধার সাথে তুলনা করে দেখতে হবে, বিশেষ করে কম্পোজ ব্যবহারের ফলে ডেভেলপারদের উৎপাদনশীলতা বৃদ্ধির বিষয়টি। উদাহরণস্বরূপ, প্লে স্টোর টিম দেখেছে যে UI লেখার জন্য অনেক কম কোডের প্রয়োজন হয়, কখনও কখনও ৫০% পর্যন্ত , যার ফলে কোডের উৎপাদনশীলতা এবং রক্ষণাবেক্ষণযোগ্যতা বৃদ্ধি পায়।
আপনি Adopt Compose for Teams- এ আরও কেস স্টাডি পড়তে পারেন।
রানটাইম পারফরম্যান্স
এই বিভাগে Jetpack Compose-এর রানটাইম পারফরম্যান্স সম্পর্কিত বিষয়গুলো আলোচনা করা হয়েছে, যা আপনাকে বুঝতে সাহায্য করবে যে Jetpack Compose-এর পারফরম্যান্স View সিস্টেমের পারফরম্যান্সের সাথে কীভাবে তুলনীয় এবং আপনি কীভাবে তা পরিমাপ করতে পারেন।
স্মার্ট পুনর্গঠন
যখন UI-এর কোনো অংশ অবৈধ হয়ে যায়, তখন Compose শুধু সেই অংশগুলোকেই পুনরায় কম্পোজ করার চেষ্টা করে যেগুলো আপডেট করা প্রয়োজন। এই বিষয়ে আরও জানতে 'Lifecycle of composables' এবং 'Jetpack Compose phases' ডকুমেন্টেশন পড়ুন।
বেসলাইন প্রোফাইল
বেসলাইন প্রোফাইল সাধারণ ইউজার জার্নিকে দ্রুততর করার একটি চমৎকার উপায়। আপনার অ্যাপে একটি বেসলাইন প্রোফাইল অন্তর্ভুক্ত করলে, তা অন্তর্ভুক্ত কোড পাথগুলোর জন্য ইন্টারপ্রিটেশন এবং জাস্ট-ইন-টাইম (JIT) কম্পাইলেশন ধাপগুলো এড়িয়ে যাওয়ার মাধ্যমে প্রথমবার চালু করার পর থেকেই কোড এক্সিকিউশনের গতি প্রায় ৩০% পর্যন্ত বাড়াতে পারে।
জেটপ্যাক কম্পোজ লাইব্রেরিতে এর নিজস্ব বেসলাইন প্রোফাইল অন্তর্ভুক্ত রয়েছে এবং আপনি যখন আপনার অ্যাপে কম্পোজ ব্যবহার করেন, তখন স্বয়ংক্রিয়ভাবে এই অপটিমাইজেশনগুলো পেয়ে যান। তবে, এই অপটিমাইজেশনগুলো শুধুমাত্র কম্পোজ লাইব্রেরির ভেতরের কোড পাথগুলোকেই প্রভাবিত করে, তাই আমরা সুপারিশ করি যে কম্পোজের বাইরের কোড পাথগুলোকেও অন্তর্ভুক্ত করার জন্য আপনি আপনার অ্যাপে একটি বেসলাইন প্রোফাইল যোগ করুন ।
ভিউ সিস্টেমের সাথে তুলনা
Jetpack Compose-এ View সিস্টেমের তুলনায় অনেক উন্নতি রয়েছে। এই উন্নতিগুলো নিম্নলিখিত বিভাগগুলিতে বর্ণনা করা হয়েছে।
সবকিছু দৃশ্যকে প্রসারিত করে
স্ক্রিনে প্রদর্শিত হয় এমন প্রতিটি View , যেমন TextView , Button বা ImageView , সব ধরনের ব্যবহারের জন্য মেমরি অ্যালোকেশন, সুস্পষ্ট স্টেট ট্র্যাকিং এবং বিভিন্ন কলব্যাকের প্রয়োজন হয়। এছাড়াও, কাস্টম View মালিককে অপ্রয়োজনে পুনরায় অঙ্কন (রিড্রয়িং) প্রতিরোধ করার জন্য সুস্পষ্ট লজিক প্রয়োগ করতে হয়—উদাহরণস্বরূপ, পুনরাবৃত্তিমূলক ডেটা প্রক্রিয়াকরণের ক্ষেত্রে।
জেটপ্যাক কম্পোজ কয়েকটি উপায়ে এর সমাধান করে। ভিউ আঁকার জন্য কম্পোজে কোনো সুস্পষ্ট আপডেটেবল অবজেক্ট নেই। UI এলিমেন্টগুলো হলো সাধারণ কম্পোজেবল ফাংশন, যার তথ্য রিপ্লেযোগ্য উপায়ে কম্পোজিশনে লেখা হয়। এর ফলে সুস্পষ্ট স্টেট ট্র্যাকিং, মেমরি অ্যালোকেশন এবং কলব্যাকের ব্যবহার কমিয়ে শুধু সেইসব কম্পোজেবলের মধ্যেই সীমাবদ্ধ রাখা যায়, যাদের এই বৈশিষ্ট্যগুলোর প্রয়োজন হয়; পরিবর্তে একটি নির্দিষ্ট View টাইপের সমস্ত এক্সটেনশনের জন্য এগুলোর প্রয়োজন হয় না।
এছাড়াও, Compose স্মার্ট রিকম্পোজিশন সুবিধা দেয়, যার মাধ্যমে কোনো পরিবর্তনের প্রয়োজন না থাকলে পূর্বে আঁকা ফলাফলটিই পুনরায় দেখানো হয়।
একাধিক লেআউট পাস
প্রচলিত ভিউগ্রুপগুলোর মেজার এবং লেআউট এপিআই-তে যথেষ্ট প্রকাশভঙ্গি থাকায় সেগুলোতে একাধিক লেআউট পাসের প্রবণতা দেখা যায়। ভিউ হায়ারার্কির নির্দিষ্ট নেস্টেড পয়েন্টে এই একাধিক লেআউট পাস করা হলে তা বিপুল পরিমাণ কাজের চাপ সৃষ্টি করতে পারে।
Jetpack Compose তার API চুক্তির মাধ্যমে সমস্ত লেআউট কম্পোজেবলের জন্য একটি একক লেআউট পাস প্রয়োগ করে। এটি Compose-কে গভীর UI ট্রি দক্ষতার সাথে পরিচালনা করতে দেয়। যদি একাধিক পরিমাপের প্রয়োজন হয়, তবে Compose-এর নিজস্ব পরিমাপ রয়েছে।
স্টার্টআপের কর্মক্ষমতা দেখুন
কোনো নির্দিষ্ট লেআউট প্রথমবার দেখানোর সময় ভিউ সিস্টেমকে XML লেআউটগুলো ইনফ্লেট করতে হয়। জেটপ্যাক কম্পোজে এই খরচটি এড়ানো যায়, কারণ সেখানে লেআউটগুলো কোটলিনে লেখা হয় এবং আপনার অ্যাপের বাকি অংশের মতোই কম্পাইল করা হয়।
বেঞ্চমার্ক কম্পোজ
Jetpack Compose 1.0-এ, debug এবং release মোডে একটি অ্যাপের পারফরম্যান্সের মধ্যে উল্লেখযোগ্য পার্থক্য রয়েছে। প্রতিনিধিত্বমূলক টাইমিং পাওয়ার জন্য, আপনার অ্যাপ প্রোফাইলিং করার সময় debug পরিবর্তে সর্বদা release বিল্ড ব্যবহার করুন।
আপনার Jetpack Compose কোড কেমন পারফর্ম করছে তা পরীক্ষা করতে, আপনি Jetpack Macrobenchmark লাইব্রেরিটি ব্যবহার করতে পারেন। Jetpack Compose-এর সাথে এটি কীভাবে ব্যবহার করতে হয় তা জানতে, MacrobenchmarkSample প্রজেক্টটি দেখুন।
Jetpack Compose টিম যেকোনো সম্ভাব্য রিগ্রেশন শনাক্ত করতে Macrobenchmark-ও ব্যবহার করে। উদাহরণস্বরূপ, রিগ্রেশন ট্র্যাক করতে lazy column-এর বেঞ্চমার্ক এবং এর ড্যাশবোর্ডটি দেখুন।
কম্পোজ প্রোফাইল ইনস্টলেশন
যেহেতু Jetpack Compose একটি আনবান্ডেলড লাইব্রেরি, তাই এটি Zygote- এর সুবিধা পায় না, যা ভিউ সিস্টেমের UI টুলকিট ক্লাস এবং ড্রয়েবলগুলো আগে থেকেই লোড করে রাখে। Jetpack Compose 1.0 রিলিজ বিল্ডের জন্য প্রোফাইল ইনস্টলেশন ব্যবহার করে। প্রোফাইল ইনস্টলারগুলো অ্যাপগুলোকে ইনস্টলেশনের সময় অ্যাহেড-অফ-টাইম (AOT) কম্পাইল করার জন্য গুরুত্বপূর্ণ কোড নির্দিষ্ট করার সুযোগ দেয়। Compose-এর সাথে প্রোফাইল ইনস্টলেশন রুলস অন্তর্ভুক্ত থাকে, যা Compose অ্যাপে স্টার্টআপ টাইম এবং জ্যাঙ্ক কমিয়ে আনে।
{% হুবহু %}আপনার জন্য প্রস্তাবিত
- দ্রষ্টব্য: জাভাস্ক্রিপ্ট বন্ধ থাকলেও লিঙ্কের লেখা প্রদর্শিত হয়।
- অন্যান্য বিবেচ্য বিষয়
- ভিউতে কম্পোজ ব্যবহার করা
- স্ক্রোল করুন