জেটপ্যাক কম্পোজ ইউআই ডেভেলপমেন্টকে ত্বরান্বিত করে এবং অ্যান্ড্রয়েড ডেভেলপমেন্টকে উন্নত করে । তবে, একটি বিদ্যমান অ্যাপে কম্পোজ যোগ করলে অ্যাপের APK আকার, বিল্ড এবং রানটাইম পারফরম্যান্সের মতো মেট্রিক্স কীভাবে প্রভাবিত হতে পারে তা বিবেচনা করুন।
APK আকার এবং বিল্ড সময়
এই বিভাগে APK এর আকার এবং বিল্ড টাইমের উপর প্রভাব নিয়ে আলোচনা করা হয়েছে সানফ্লাওয়ার নমুনা অ্যাপটি দেখে—একটি অ্যাপ যা একটি ভিউ-ভিত্তিক অ্যাপকে কম্পোজে স্থানান্তর করার সর্বোত্তম অনুশীলনগুলি প্রদর্শন করে।
APK আকার
আপনার প্রোজেক্টে লাইব্রেরি যোগ করলে এর APK সাইজ বৃদ্ধি পায়। নিম্নলিখিত ফলাফলগুলি হল প্রতিটি প্রোজেক্টের মিনিমাইজড রিলিজ APK এর জন্য যেখানে রিসোর্স এবং কোড সঙ্কুচিতকরণ সক্ষম করা হয়েছে , R8 ফুল মোড ব্যবহার করা হয়েছে এবং APK অ্যানালাইজার ব্যবহার করে পরিমাপ করা হয়েছে।
| শুধুমাত্র দেখা | মিশ্র দর্শন এবং রচনা | শুধুমাত্র রচনা করুন | |
|---|---|---|---|
| ডাউনলোডের আকার | ২,২৫২ কেবি | ৩,০৩৪ কেবি | ২,৯৬৬ কেবি |
প্রথমবার সানফ্লাওয়ারে কম্পোজ যোগ করার সময়, APK এর আকার 2,252 KB থেকে বেড়ে 3,034 KB হয়— যার অর্থ হল 782 KB বৃদ্ধি । তৈরি হওয়া APK টি UI বিল্ডের সাথে ভিউ এবং কম্পোজের মিশ্রণ নিয়ে গঠিত হয়েছিল। সানফ্লাওয়ারে অতিরিক্ত নির্ভরতা যোগ করায় এই বৃদ্ধি আশা করা হচ্ছে।
বিপরীতভাবে, যখন Sunflower একটি Compose-only অ্যাপে স্থানান্তরিত করা হয়েছিল, তখন APK সাইজ 3,034 KB থেকে কমে 2,966 KB হয়ে গিয়েছিল—যা 68 KB হ্রাস পেয়েছিল । এই হ্রাস AppCompat এবং ConstraintLayout মতো অব্যবহৃত ভিউ নির্ভরতা অপসারণের কারণে হয়েছিল।
নির্মাণের সময়
কম্পোজ যোগ করলে আপনার অ্যাপের বিল্ড টাইম বৃদ্ধি পায় কারণ কম্পোজ কম্পাইলার আপনার অ্যাপে কম্পোজেবল প্রক্রিয়া করে। নিম্নলিখিত ফলাফলগুলি স্ট্যান্ডঅ্যালোন gradle-profiler টুল ব্যবহার করে পাওয়া গেছে, যা একটি বিল্ডকে বেশ কয়েকবার কার্যকর করে যাতে সানফ্লাওয়ারের ডিবাগ বিল্ড সময়কালের জন্য গড় বিল্ড সময় পাওয়া যায়:
gradle-profiler --benchmark --project-dir . :app:assembleDebug
| শুধুমাত্র দেখা | মিশ্র দর্শন এবং রচনা | শুধুমাত্র রচনা করুন | |
|---|---|---|---|
| গড় নির্মাণ সময় | ২৯৯.৪৭ মিলিসেকেন্ড | ৩৯৯.০৯ মিলিসেকেন্ড | ৩৪২.১৬ মিলিসেকেন্ড |
সানফ্লাওয়ারে প্রথম কম্পোজ যোগ করার সময়, গড় নির্মাণ সময় 299 মিলিসেকেন্ড থেকে 399 মিলিসেকেন্ডে বৃদ্ধি পায়—যার অর্থ 100 মিলিসেকেন্ড বৃদ্ধি । এই সময়কাল কম্পোজ কম্পাইলার দ্বারা প্রকল্পে সংজ্ঞায়িত কম্পোজ কোড রূপান্তর করার জন্য অতিরিক্ত কাজ সম্পাদন করার কারণে।
বিপরীতভাবে, সানফ্লাওয়ারের কম্পোজে স্থানান্তর সম্পন্ন হওয়ার পর গড় নির্মাণ সময় 342 মিলিসেকেন্ডে নেমে আসে, যা 57 মিলিসেকেন্ড কমে যায় । এই হ্রাসের জন্য বেশ কয়েকটি কারণ দায়ী করা যেতে পারে যা সম্মিলিতভাবে নির্মাণ সময় হ্রাস করে যেমন ডেটা বাইন্ডিং অপসারণ, kapt ব্যবহারকারী নির্ভরতাগুলিকে KSP-তে স্থানান্তর করা এবং বেশ কয়েকটি নির্ভরতাকে তাদের সর্বশেষ সংস্করণে আপডেট করা।
সারাংশ
কম্পোজ গ্রহণ করলে আপনার অ্যাপের APK আকার কার্যকরভাবে বৃদ্ধি পাবে এবং কম্পোজ কোড সংকলন প্রক্রিয়ার কারণে আপনার অ্যাপের বিল্ড টাইম কর্মক্ষমতাও বৃদ্ধি পাবে। তবে, এই বিনিময়গুলি কম্পোজের সুবিধাগুলির সাথে তুলনা করা প্রয়োজন, বিশেষ করে কম্পোজ গ্রহণের সময় ডেভেলপারদের উৎপাদনশীলতা বৃদ্ধির আশেপাশে। উদাহরণস্বরূপ, প্লে স্টোর টিম দেখেছে যে UI লেখার জন্য অনেক কম কোডের প্রয়োজন হয়, কখনও কখনও 50% পর্যন্ত , যার ফলে কোডের উৎপাদনশীলতা এবং রক্ষণাবেক্ষণ বৃদ্ধি পায়।
আপনি অ্যাডপ্ট কম্পোজ ফর টিমস -এ আরও কেস স্টাডি পড়তে পারেন।
রানটাইম পারফর্ম্যান্স
এই বিভাগে জেটপ্যাক কম্পোজের রানটাইম পারফরম্যান্স সম্পর্কিত বিষয়গুলি অন্তর্ভুক্ত করা হয়েছে যাতে জেটপ্যাক কম্পোজ ভিউ সিস্টেমের পারফরম্যান্সের সাথে কীভাবে তুলনা করে এবং আপনি কীভাবে এটি পরিমাপ করতে পারেন তা বুঝতে সাহায্য করে।
স্মার্ট পুনর্গঠন
যখন UI এর কিছু অংশ অবৈধ থাকে, তখন Compose শুধুমাত্র সেই অংশগুলিই পুনরায় কম্পোজ করার চেষ্টা করে যেগুলি আপডেট করার প্রয়োজন। কম্পোজেবলের জীবনচক্র এবং Jetpack Compose পর্যায়ের ডকুমেন্টেশনে এই সম্পর্কে আরও পড়ুন।
বেসলাইন প্রোফাইল
বেসলাইন প্রোফাইল সাধারণ ব্যবহারকারীদের যাত্রা দ্রুত করার একটি চমৎকার উপায়। আপনার অ্যাপে একটি বেসলাইন প্রোফাইল অন্তর্ভুক্ত করলে কোড কার্যকর করার গতি প্রথম লঞ্চের তুলনায় প্রায় 30% বৃদ্ধি পেতে পারে, অন্তর্ভুক্ত কোড পাথের জন্য ব্যাখ্যা এবং জাস্ট-ইন-টাইম (JIT) সংকলন পদক্ষেপগুলি এড়িয়ে।
জেটপ্যাক কম্পোজ লাইব্রেরির নিজস্ব বেসলাইন প্রোফাইল রয়েছে এবং আপনি যখন আপনার অ্যাপে কম্পোজ ব্যবহার করেন তখন আপনি স্বয়ংক্রিয়ভাবে এই অপ্টিমাইজেশনগুলি পাবেন। তবে, এই অপ্টিমাইজেশনগুলি শুধুমাত্র কম্পোজ লাইব্রেরির মধ্যে কোড পাথগুলিকে প্রভাবিত করে, তাই আমরা আপনাকে কম্পোজের বাইরের কোড পাথগুলি কভার করার জন্য আপনার অ্যাপে একটি বেসলাইন প্রোফাইল যুক্ত করার পরামর্শ দিচ্ছি।
ভিউ সিস্টেমের সাথে তুলনা
জেটপ্যাক কম্পোজে ভিউ সিস্টেমের তুলনায় অনেক উন্নতি করা হয়েছে। এই উন্নতিগুলি নিম্নলিখিত বিভাগগুলিতে বর্ণনা করা হয়েছে।
সবকিছুই ভিউ প্রসারিত করে
স্ক্রিনে আঁকা প্রতিটি View , যেমন TextView , Button , অথবা ImageView , এর জন্য মেমরি বরাদ্দ, স্পষ্ট অবস্থা ট্র্যাকিং এবং বিভিন্ন কলব্যাকের প্রয়োজন হয় যাতে সমস্ত ব্যবহারের ক্ষেত্রে সমর্থন করা যায়। অধিকন্তু, কাস্টম View মালিককে স্পষ্ট যুক্তি প্রয়োগ করতে হবে যাতে পুনরায় অঙ্কন রোধ করা যায় যখন এটি প্রয়োজন হয় না - উদাহরণস্বরূপ, পুনরাবৃত্তিমূলক ডেটা প্রক্রিয়াকরণের জন্য।
জেটপ্যাক কম্পোজ এই সমস্যাটি কয়েকটি উপায়ে সমাধান করে। কম্পোজে দৃশ্য অঙ্কনের জন্য স্পষ্ট আপডেটযোগ্য অবজেক্ট থাকে না। UI উপাদানগুলি হল সহজ কম্পোজেবল ফাংশন যার তথ্য পুনরায় চালানোর পদ্ধতিতে রচনায় লেখা হয়। এটি স্পষ্ট অবস্থা ট্র্যাকিং, মেমরি বরাদ্দকরণ এবং কলব্যাকগুলি কেবলমাত্র সেই কম্পোজেবলগুলিতে হ্রাস করতে সহায়তা করে যার জন্য নির্দিষ্ট View ধরণের সমস্ত এক্সটেনশনের প্রয়োজনের পরিবর্তে উক্ত বৈশিষ্ট্যগুলির প্রয়োজন হয়।
অধিকন্তু, কম্পোজ স্মার্ট রিকম্পোজিশন প্রদান করে, যদি আপনার পরিবর্তন করার প্রয়োজন না হয় তবে পূর্বে আঁকা ফলাফলটি পুনরায় চালায়।
একাধিক লেআউট পাস
ঐতিহ্যবাহী ভিউগ্রুপগুলির পরিমাপ এবং লেআউট API-তে প্রচুর অভিব্যক্তি থাকে যা তাদের একাধিক লেআউট পাসের জন্য প্রবণ করে তোলে। ভিউ হায়ারার্কিতে নির্দিষ্ট নেস্টেড পয়েন্টে করা হলে এই একাধিক লেআউট পাসগুলি সূচকীয় কাজ করতে পারে।
জেটপ্যাক কম্পোজ তার API চুক্তির মাধ্যমে সমস্ত লেআউট কম্পোজেবলের জন্য একটি একক লেআউট পাস প্রয়োগ করে। এটি কম্পোজকে দক্ষতার সাথে গভীর UI ট্রি পরিচালনা করতে দেয়। যদি একাধিক পরিমাপের প্রয়োজন হয়, তাহলে কম্পোজের অভ্যন্তরীণ পরিমাপ রয়েছে।
স্টার্টআপের পারফরম্যান্স দেখুন
প্রথমবারের মতো কোনও নির্দিষ্ট লেআউট দেখানোর সময় ভিউ সিস্টেমকে XML লেআউটগুলিকে স্ফীত করতে হবে। জেটপ্যাক কম্পোজে এই খরচ সাশ্রয় হয় কারণ লেআউটগুলি কোটলিনে লেখা হয় এবং আপনার অন্যান্য অ্যাপের মতোই কম্পাইল করা হয়।
বেঞ্চমার্ক রচনা
জেটপ্যাক কম্পোজ ১.০-তে, debug এবং release মোডে অ্যাপের পারফরম্যান্সের মধ্যে উল্লেখযোগ্য পার্থক্য রয়েছে। প্রতিনিধিত্বমূলক সময়ের জন্য, আপনার অ্যাপ প্রোফাইল করার সময় সর্বদা debug পরিবর্তে release বিল্ড ব্যবহার করুন।
আপনার জেটপ্যাক কম্পোজ কোডটি কেমন কাজ করছে তা পরীক্ষা করার জন্য, আপনি জেটপ্যাক ম্যাক্রোবেঞ্চমার্ক লাইব্রেরি ব্যবহার করতে পারেন। জেটপ্যাক কম্পোজের সাথে এটি কীভাবে ব্যবহার করবেন তা শিখতে, ম্যাক্রোবেঞ্চমার্কস্যাম্পল প্রকল্পটি দেখুন।
জেটপ্যাক কম্পোজ টিম যেকোনো রিগ্রেশন ধরার জন্য ম্যাক্রোবেঞ্চমার্ক ব্যবহার করে। উদাহরণস্বরূপ, রিগ্রেশন ট্র্যাক করার জন্য অলস কলামের বেঞ্চমার্ক এবং এর ড্যাশবোর্ড দেখুন।
কম্পোজ প্রোফাইল ইনস্টলেশন
যেহেতু জেটপ্যাক কম্পোজ একটি আনবান্ডেলড লাইব্রেরি, তাই এটি জাইগোট থেকে উপকৃত হয় না যা ভিউ সিস্টেমের UI টুলকিট ক্লাস এবং ড্রয়েবল প্রিলোড করে। জেটপ্যাক কম্পোজ ১.০ রিলিজ বিল্ডের জন্য প্রোফাইল ইনস্টলেশন ব্যবহার করে। প্রোফাইল ইনস্টলারগুলি অ্যাপগুলিকে ইনস্টলেশনের সময় আগে থেকে (AOT) কম্পাইল করার জন্য গুরুত্বপূর্ণ কোড নির্দিষ্ট করতে দেয়। কম্পোজ প্রোফাইল ইনস্টলেশনের নিয়ম পাঠায় যা কম্পোজ অ্যাপগুলিতে স্টার্টআপ সময় কমায় এবং জ্যাঙ্ক করে।
{% অক্ষরে অক্ষরে %}আপনার জন্য প্রস্তাবিত
- দ্রষ্টব্য: জাভাস্ক্রিপ্ট বন্ধ থাকলে লিঙ্ক টেক্সট প্রদর্শিত হয়।
- অন্যান্য বিবেচ্য বিষয়
- ভিউতে কম্পোজ ব্যবহার করা
- স্ক্রোল করুন