Android App Startup-এর জন্য Profile-Guided Optimization
আমরা আমাদের Android cold start ১.২ সেকেন্ড থেকে কমিয়ে ৩৮০ms-এ নিয়ে এসেছি।
বেশিরভাগ অ্যাপ প্রথমবার লঞ্চ হওয়ার সময় সবচেয়ে ধীরগতির compilation mode-এ চলে। যখন একজন ব্যবহারকারী প্রথমবার আপনার অ্যাপ ইনস্টল করেন, তখন Android "interpret-only" mode ব্যবহার করে। এটি আপনার অ্যাপের startup প্রক্রিয়াকে ধীর করে দেয়। সিস্টেম পরবর্তীতে শুধুমাত্র idle time-এর সময় কোড অপ্টিমাইজ করে।
আপনি একটি তিন-ধাপের pipeline ব্যবহার করে এটি সমাধান করতে পারেন।
১. Baseline Profiles তৈরি করুন Baseline Profiles সিস্টেমকে বলে দেয় ইনস্টল করার সময় কোন ক্লাসগুলো compile করতে হবে। আপনার CI pipeline-এ এগুলো তৈরি করতে Macrobenchmark ব্যবহার করুন। আমাদের প্রোফাইলগুলো মাত্র ১২% method কভার করলেও ৯৪% startup time নিয়ন্ত্রণ করেছে।
২. DEX Layout Reordering চালু করুন এটি আপনার Gradle properties-এ মাত্র একটি লাইন। এটি R8-কে নির্দেশ দেয় যাতে আপনার DEX ফাইলে startup ক্লাসগুলোকে একত্রে গ্রুপ করা হয়। এটি page faults ৩০% থেকে ৫০% কমিয়ে দেয়। যখন ক্লাসগুলো একত্রে থাকে, তখন সিস্টেম ডিস্ক থেকে কম অপ্রয়োজনীয় ডেটা লোড করে।
৩. Cloud Profiles ব্যবহার করুন Google Play ব্যবহারকারীদের কাছ থেকে প্রোফাইল সংগ্রহ করে এবং সেগুলো নতুন ইনস্টলেশনগুলোতে পাঠিয়ে দেয়। এটি আপনার গতির উন্নতিকে বহুগুণ বাড়িয়ে দেয়।
আমাদের টেস্টিংয়ের ফলাফল:
- কোনো প্রোফাইল নেই: ১,২০৪ms cold start
- শুধুমাত্র Baseline Profile: ৬২০ms cold start
- Baseline + DEX reorder: ৪৪৫ms cold start
- Baseline + DEX reorder + Cloud: ৩৮০ms cold start
আপনার কাজের জন্য কিছু গুরুত্বপূর্ণ টিপস:
- প্রতিটি রিলিজের জন্য CI-তে প্রোফাইল তৈরি করুন। Stale প্রোফাইল পারফরম্যান্স কমিয়ে দেয়।
- R8 চালানোর পর প্রোফাইল পুনরায় তৈরি (Regenerate) করুন। R8 আপনার কোডের গঠন পরিবর্তন করে দেয়।
- Macrobenchmark-এ "Partial" compilation mode ব্যবহার করুন। "Full" mode ভুল ফলাফল দেয় যা প্রকৃত ব্যবহারকারীর অভিজ্ঞতা প্রতিফলিত করে না।
- বিভিন্ন Android ভার্সনে টেস্ট করুন। পুরনো এবং নতুন API level-এর মধ্যে পারফরম্যান্সের উন্নতি ভিন্ন ভিন্ন হতে পারে।
দ্রুততর অ্যাপ তৈরির জন্য এই স্তরগুলোকে (layers) একত্রে ব্যবহার করুন।
Source: https://dev.to/software_mvp-factory/profile-guided-optimization-for-android-app-startup-2i7a