বেসলাইন প্রোফাইল ওভারভিউ

বেসলাইন প্রোফাইল অন্তর্ভুক্ত কোড পাথগুলির জন্য ইন্টারপ্রিটেশন এবং জাস্ট-ইন-টাইম (JIT) কম্পাইলেশন ধাপগুলি পরিহার করার মাধ্যমে প্রথমবার চালু করার পর থেকেই কোড এক্সিকিউশনের গতি প্রায় ৩০% বৃদ্ধি করে।

কোনো অ্যাপ বা লাইব্রেরিতে একটি বেসলাইন প্রোফাইল অন্তর্ভুক্ত করার মাধ্যমে, অ্যান্ড্রয়েড রানটাইম (ART) অ্যাহেড-অফ-টাইম (AOT) কম্পাইলেশনের মাধ্যমে নির্দিষ্ট কোড পাথগুলোকে অপ্টিমাইজ করতে পারে, যা প্রতিটি নতুন ব্যবহারকারী এবং প্রতিটি অ্যাপ আপডেটের জন্য উন্নত পারফরম্যান্স প্রদান করে। এই প্রোফাইল গাইডেড অপ্টিমাইজেশন (PGO) অ্যাপগুলোকে প্রথম লঞ্চ থেকেই স্টার্টআপ অপ্টিমাইজ করতে, ইন্টারঅ্যাকশনের ঝাঁকুনি কমাতে এবং ব্যবহারকারীদের জন্য সামগ্রিক রানটাইম পারফরম্যান্স উন্নত করতে সাহায্য করে।

এই পারফরম্যান্স উন্নয়নগুলো সরাসরি ব্যবহারকারী ধরে রাখা, লেনদেন এবং রেটিং-এর মতো ব্যবসায়িক মেট্রিকগুলোর উন্নতি ঘটায়। পারফরম্যান্স কীভাবে ব্যবসায়িক মেট্রিকগুলোকে প্রভাবিত করে, সে সম্পর্কে আপনি Josh , Lyft , TikTok এবং Zomato- এর স্টোরিগুলো থেকে আরও জানতে পারবেন।

বেসলাইন প্রোফাইলের সুবিধাগুলি

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

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

বেসলাইন প্রোফাইল ব্যবহার না করলে, অ্যাপের সমস্ত কোড হয় ইন্টারপ্রেট করার পর মেমরিতে JIT-কম্পাইল করা হয়, অথবা ডিভাইস নিষ্ক্রিয় থাকলে ব্যাকগ্রাউন্ডে একটি odex ফাইলে লেখা হয়। কোনো অ্যাপ ইনস্টল বা আপডেট করার পর, নতুন কোড পাথগুলো অপ্টিমাইজ না হওয়া পর্যন্ত ব্যবহারকারীরা প্রথমবার এটি চালানোর সময় একটি নিম্নমানের অভিজ্ঞতা লাভ করেন। অপ্টিমাইজ করার পর অনেক অ্যাপের পারফরম্যান্সে প্রায় ৩০% উন্নতি দেখা যায়।

স্টার্টআপ প্রোফাইল

স্টার্টআপ প্রোফাইলগুলো বেসলাইন প্রোফাইলের মতোই, কিন্তু এগুলো ডিভাইসে অপটিমাইজেশনের জন্য নয়, বরং দ্রুততর স্টার্টআপ টাইমের জন্য DEX লেআউট অপটিমাইজ করতে কম্পাইল টাইমে ব্যবহৃত হয়। স্টার্টআপ প্রোফাইলগুলো বেসলাইন প্রোফাইল থেকে কীভাবে আলাদা, সে সম্পর্কে আরও জানতে, ‘বেসলাইন প্রোফাইল এবং স্টার্টআপ প্রোফাইলের তুলনা’ দেখুন। DEX লেআউট অপটিমাইজেশন সম্পর্কে আরও জানতে, ‘DEX লেআউট অপটিমাইজেশন এবং স্টার্টআপ প্রোফাইল’ দেখুন।

শুরু করুন

আপনার বিদ্যমান অ্যাপে পারফরম্যান্স অপ্টিমাইজ করা শুরু করতে, বেসলাইন প্রোফাইল তৈরি করুন দেখুন।

প্রোফাইল জেনারেশন বনাম রিলিজ বিল্ড

বেসলাইন এবং স্টার্টআপ প্রোফাইল ফাইল (যেমন, baseline-prof.txt এবং startup-prof.txt ) তৈরি করার সময় প্রয়োজনীয় বিল্ড কনফিগারেশন এবং এই প্রোফাইলগুলো ব্যবহারকারী আপনার চূড়ান্ত রিলিজ APK বিল্ড করার সময়ের কনফিগারেশনের মধ্যে পার্থক্য বোঝা গুরুত্বপূর্ণ।

প্রোফাইল ফাইল তৈরি করার সময় (উদাহরণস্বরূপ, benchmark ):

জেনারেট করা প্রোফাইল রুলগুলো যেন আপনার কোডের মেথড সিগনেচারের সাথে সঠিকভাবে মেলে, তা নিশ্চিত করতে, প্রোফাইল জেনারেশনের জন্য ব্যবহৃত বিল্ড ভ্যারিয়েন্টের ক্ষেত্রে আপনাকে অবশ্যই অবফাসকেশন এবং অপটিমাইজেশন (R8) বন্ধ করতে হবে। এই ভ্যারিয়েন্টটি অবশ্যই আপনার রিলিজ বিল্ড ভ্যারিয়েন্ট থেকে ভিন্ন হতে হবে, যেটিতে অবফাসকেশন এবং অপটিমাইজেশন সক্রিয় করা থাকে। প্রোফাইল জেনারেশন বিল্ড ভ্যারিয়েন্টের জন্য isMinifyEnabled = false সেট করার মাধ্যমে আপনি এটি করতে পারেন। আপনি যদি বেসলাইন প্রোফাইল গ্রেডল প্লাগইন ব্যবহার না করেন, তবে আপনাকে এটাও নিশ্চিত করতে হবে যে -dontobfuscate এবং -dontoptimize প্রয়োগ করা আছে। বেসলাইন প্রোফাইল গ্রেডল প্লাগইন স্বয়ংক্রিয়ভাবে আপনার জন্য এই কনফিগারেশনটি পরিচালনা করে।

আপনার চূড়ান্ত রিলিজ APK তৈরি করার সময়:

অবফাসকেশন, মিনিফিকেশন এবং অপটিমাইজেশনের সুবিধা পেতে আপনার রিলিজ বিল্ডে সর্বদা isMinifyEnabled = true থাকা উচিত। R8 স্বয়ংক্রিয়ভাবে আপনার আনঅবফাসকেটেড প্রোফাইল ফাইল থেকে নিয়মগুলো পুনর্লিখন করে, যাতে তা আপনার রিলিজ APK-তে থাকা অবফাসকেটেড এবং অপটিমাইজড কোডের সাথে মিলে যায়। DEX লেআউট অপটিমাইজেশন (যা স্টার্টআপ প্রোফাইল দ্বারা চালিত) কার্যকর হওয়ার জন্য, আপনার রিলিজ অ্যাপটি অবশ্যই অবফাসকেটেড হতে হবে এবং সমস্ত অপটিমাইজেশন সক্রিয় রেখে R8 ব্যবহার করতে হবে।

ডিপেন্ডেন্সি চেইনটি স্থিতিশীল এবং উন্নয়নমূলক রিলিজ সংস্করণ সরবরাহ করে। একটি বেসলাইন প্রোফাইল তৈরি ও ইনস্টল করতে, অ্যান্ড্রয়েড গ্রেডল প্লাগইন, ম্যাক্রোবেঞ্চমার্ক লাইব্রেরি এবং প্রোফাইল ইনস্টলারের নিম্নলিখিত সমর্থিত সংস্করণ বা উচ্চতর সংস্করণ ব্যবহার করুন। এই ডিপেন্ডেন্সিগুলো বিভিন্ন সময়ে প্রয়োজন হয় এবং একটি সর্বোত্তম বেসলাইন প্রোফাইল সক্ষম করার জন্য একটি টুলচেইন হিসেবে একত্রে কাজ করে।

  • অ্যান্ড্রয়েড গ্রেডল প্লাগইন: com.android.tools.build:8.0.0
  • ম্যাক্রোবেঞ্চমার্ক লাইব্রেরি: androidx.benchmark:benchmark-macro-junit4:1.4.1
  • প্রোফাইল ইনস্টলার: androidx.profileinstaller:profileinstaller:1.4.1

বেসলাইন প্রোফাইল তৈরি ও পরিচালনা করার জন্য আমরা AGP-এর সর্বশেষ সংস্করণ ব্যবহার করার পরামর্শ দিই। AGP-এর বিভিন্ন সংস্করণে যে প্রধান কার্যকারিতাগুলো রয়েছে, সেগুলো নিচে দেওয়া হলো:

এজিপি সংস্করণ বৈশিষ্ট্য
৯.১ সম্পূর্ণ সোর্স সেট ডিরেক্টরি সমর্থন (লাইব্রেরি মডিউল): ভ্যারিয়েন্ট-সচেতন ডিরেক্টরি ছাড়াও, আপনি লাইব্রেরি মডিউল এবং অ্যাপ মডিউল উভয়ের জন্য src/free/generated/baselineProfiles/baseline-prof1.txt মতো যেকোনো নামে একাধিক বেসলাইন প্রোফাইল সোর্স ফাইল ঘোষণা করতে পারেন।
৮.৪ Gradle র‍্যাপার কমান্ড লাইন টুল বা Android Studio ব্যবহার করে ডিবাগ-অযোগ্য বিল্ডের লোকাল অ্যাপ ইনস্টলেশনে বেসলাইন প্রোফাইল ইনস্টল করা হয়, ফলে আপনার লোকাল রিলিজ বিল্ডের পারফরম্যান্স প্রোডাকশনের সাথে আরও ঘনিষ্ঠভাবে মিলে যায়। এই আপডেটটি বেসলাইন প্রোফাইলের প্রোডাকশন পারফরম্যান্সকে প্রভাবিত করে না।
৮.৩
  • আংশিক সোর্স সেট ডিরেক্টরি সমর্থন (লাইব্রেরি মডিউল): লাইব্রেরি মডিউলগুলির জন্য ভ্যারিয়েন্ট-সচেতন বেসলাইন প্রোফাইল ফাইল ঘোষণা করুন, যেমন src/free/generated/baselineProfiles/baseline-prof.txt
  • বেসলাইন প্রোফাইলগুলিতে ডিসুগারড ক্লাস অন্তর্ভুক্ত রয়েছে।
৮.২
  • R8 দ্বারা নিয়ম পুনর্লিখন: D8 এবং R8 মানুষের পাঠযোগ্য বেসলাইন এবং স্টার্টআপ প্রোফাইল নিয়মগুলোকে এমনভাবে রূপান্তর করতে পারে, যাতে অ্যাপের পারফরম্যান্স অপ্টিমাইজ করার জন্য আপনার প্রয়োজনীয় সমস্ত নিয়ম সম্পূর্ণরূপে অন্তর্ভুক্ত হয়। এর ফলে আপনি একটি আনমিনিফাইড বিল্ড থেকে প্রোফাইল তৈরি করতে এবং সেগুলোকে একটি মিনিফাইড রিলিজ বিল্ডে প্রয়োগ করতে পারেন। এটি মেথডগুলোর বেসলাইন প্রোফাইল কভারেজ প্রায় ৩০% এবং অ্যাপের পারফরম্যান্স প্রায় ১৫% বৃদ্ধি করে।
  • স্টার্টআপ প্রোফাইল: DEX-এর মধ্যে কোডের বিন্যাস নির্ধারণের জন্য এই ধরনের বেসলাইন প্রোফাইল তৈরি করে। এটি স্টার্টআপ পারফরম্যান্স অতিরিক্ত প্রায় ১৫% বৃদ্ধি করে, অথবা বড় অ্যাপের ক্ষেত্রে এর চেয়েও উল্লেখযোগ্যভাবে বেশি বাড়ায়।
৮.০ সর্বনিম্ন প্রস্তাবিত সংস্করণ: একটিমাত্র গ্রেডল টাস্কের মাধ্যমে বেসলাইন প্রোফাইল তৈরি করতে বেসলাইন প্রোফাইল গ্রেডল প্লাগইনটি ব্যবহার করুন।
  • সম্পূর্ণ সোর্স সেট ডিরেক্টরি সমর্থন (অ্যাপ মডিউল): একাধিক বেসলাইন প্রোফাইল সোর্স ফাইল ঘোষণা করুন, এবং ভ্যারিয়েন্ট-সচেতন ডিরেক্টরি ব্যবহার করুন, যেমন src/free/generated/baselineProfiles/baseline-prof1.txt
৭.৪ সর্বনিম্ন সমর্থিত সংস্করণ: অ্যাপগুলো লাইব্রেরি থেকে বেসলাইন প্রোফাইল ব্যবহার করতে পারে এবং src/main/baseline-prof.txt ফাইলে তাদের নিজস্ব বেসলাইন প্রোফাইল প্রদান করতে পারে।
  • অ্যাপ বান্ডেল থেকে APK তৈরি করার সময় বেসলাইন প্রোফাইলগুলি সঠিকভাবে প্যাকেজ করা হয় ( ইস্যু #230361284 )।
  • যেসব অ্যাপে একাধিক .dex ফাইল থাকে, সেগুলোর ক্ষেত্রে বেসলাইন প্রোফাইলগুলো প্রধান .dex ফাইলটির জন্য সঠিকভাবে প্যাকেজ করা হয়।
  • D8 এবং R8 এমন বিল্ড থেকে স্টার্টআপ প্রোফাইল তৈরি করা সমর্থন করে যেখানে isMinifyEnabled মান false সেট করা থাকে।

ভ্যারিয়েন্ট-সচেতন প্রোফাইল উৎস সেটিংস

অ্যাপ্লিকেশনের জন্য অ্যান্ড্রয়েড গ্রেডল প্লাগইন (AGP) সংস্করণ 8.0 এবং লাইব্রেরির জন্য AGP সংস্করণ 8.3 ব্যবহার করে, আপনি বেসলাইন প্রোফাইল নিয়মগুলিকে একটি নির্দিষ্ট সোর্স সেট ডিরেক্টরিতে রাখতে পারেন, যার ফলে একটিমাত্র, নির্দিষ্ট পাথের (উদাহরণস্বরূপ, src/main/baseline-prof.txt ) সীমাবদ্ধতা অতিক্রম করে একাধিক ফাইল ব্যবহারের সুযোগ তৈরি হয়।

এটি শক্তিশালী ভ্যারিয়েন্ট সাপোর্টকে সহজ করে, যার মাধ্যমে আপনি নির্দিষ্ট বিল্ড ফ্লেভার এবং টাইপের জন্য স্বতন্ত্র বেসলাইন প্রোফাইল সংজ্ঞায়িত করতে পারেন (উদাহরণস্বরূপ, src/variant/baselineProfiles/ এর মতো ডিরেক্টরি ব্যবহার করে), যা নিশ্চিত করে যে প্রতিটি স্বতন্ত্র অ্যাপ্লিকেশন বা লাইব্রেরি বাইনারির জন্য পারফরম্যান্স অপ্টিমাইজেশন নিয়মগুলি সঠিকভাবে প্রয়োগ করা হয়।

প্রোফাইল তৈরির উদাহরণ

অ্যাপ চালুর জন্য একটি বেসলাইন প্রোফাইল তৈরি করার পাশাপাশি প্রস্তাবিত ম্যাক্রোবেঞ্চমার্ক লাইব্রেরি ব্যবহার করে বিভিন্ন নেভিগেশন এবং স্ক্রল ইভেন্ট তৈরির জন্য নিম্নলিখিতটি একটি উদাহরণ ক্লাস:

class BaselineProfileGenerator {
    @get:Rule
    val baselineProfileRule = BaselineProfileRule()

    @Test
    fun appStartupAndUserJourneys() {
        baselineProfileRule.collect(packageName = PACKAGE_NAME) {
            uiAutomator {
                // App startup journey.
                startApp(PACKAGE_NAME)

                // Find and click elements using the new DSL
                onElement { textAsString() == "COMPOSE LAZYLIST" }.click()
                onElement { viewIdResourceName == "myLazyColumn" }.also {
                    it.fling(Direction.DOWN)
                    it.fling(Direction.UP)
                }
                pressBack()
            }
        }
    }
}

ইউজার জার্নি স্বয়ংক্রিয় করতে UI Automator লাইব্রেরি ব্যবহারের বিষয়ে আরও তথ্যের জন্য, “Write automated tests with UI Automator” দেখুন।

আপনি এই কোডটি সম্পূর্ণ প্রেক্ষাপটে এবং আরও বিস্তারিতভাবে গিটহাবে আমাদের পারফরম্যান্স স্যাম্পলগুলোর অংশ হিসেবে দেখতে পারেন।

কী অন্তর্ভুক্ত করতে হবে

একটি অ্যাপে বেসলাইন প্রোফাইল ব্যবহার করার সময়, আপনি অ্যাপ স্টার্টআপ কোড এবং স্ক্রিনের মধ্যে নেভিগেশন বা স্ক্রোলিং-এর মতো সাধারণ ইউজার ইন্টারঅ্যাকশন অন্তর্ভুক্ত করতে পারেন। এছাড়াও আপনি রেজিস্ট্রেশন, লগইন বা পেমেন্টের মতো সম্পূর্ণ ফ্লো সংগ্রহ করতে পারেন। আপনার কাছে গুরুত্বপূর্ণ বলে মনে হওয়া যেকোনো ইউজার জার্নি বেসলাইন প্রোফাইলের রানটাইম পারফরম্যান্স উন্নত করার মাধ্যমে উপকৃত হতে পারে।

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

অ্যাপের পারফরম্যান্স উন্নত করার জন্য লাইব্রেরিগুলো তাদের নিজস্ব বেসলাইন প্রোফাইল সরবরাহ করতে পারে এবং রিলিজের সাথে তা প্রকাশ করতে পারে। উদাহরণস্বরূপ, Jetpack Compose performance-এর Use a Baseline Profile সেকশনটি দেখুন।

বেসলাইন প্রোফাইলগুলি কীভাবে কাজ করে

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

  1. আপনার অ্যাপের জন্য পাঠযোগ্য প্রোফাইল নিয়মাবলী তৈরি করা হয় এবং অ্যাপের মধ্যেই বাইনারি আকারে কম্পাইল করা হয়। আপনি এগুলো assets/dexopt/baseline.prof ফাইলে খুঁজে পাবেন। এরপর আপনি যথারীতি অ্যান্ড্রয়েড অ্যাপ বান্ডেল (AAB) গুগল প্লে-তে আপলোড করতে পারবেন।

  2. গুগল প্লে প্রোফাইলটি প্রসেস করে এবং APK-এর সাথে সরাসরি ব্যবহারকারীদের কাছে পাঠিয়ে দেয়। ইনস্টলেশনের সময়, ART প্রোফাইলের মেথডগুলোর AOT কম্পাইলেশন সম্পাদন করে, যার ফলে সেই মেথডগুলো আরও দ্রুত এক্সিকিউট হয়। যদি প্রোফাইলটিতে অ্যাপ লঞ্চ বা ফ্রেম রেন্ডারিংয়ের সময় ব্যবহৃত মেথড থাকে, তবে ব্যবহারকারী দ্রুততর লঞ্চ টাইম এবং কম জ্যাঙ্ক অনুভব করতে পারেন।

  3. এই প্রক্রিয়াটি সময়ের সাথে সাথে অ্যাপটির প্রকৃত ব্যবহারের উপর ভিত্তি করে পারফরম্যান্সকে সূক্ষ্মভাবে সমন্বয় করার জন্য ক্লাউড প্রোফাইল অ্যাগ্রিগেশনের সাথে সমন্বয় করে।

চিত্র ১। এই ডায়াগ্রামটি আপলোড থেকে শুরু করে শেষ ব্যবহারকারীর কাছে ডেলিভারি পর্যন্ত বেসলাইন প্রোফাইলের কার্যপ্রবাহ এবং সেই কার্যপ্রবাহটি ক্লাউড প্রোফাইলের সাথে কীভাবে সম্পর্কিত, তা প্রদর্শন করে।

বেসলাইন প্রোফাইল এবং স্টার্টআপ প্রোফাইল তুলনা করুন

প্রোফাইল ফাইল সংজ্ঞায়িত ও তৈরি করতে আপনি বেসলাইন প্রোফাইল গ্রেডল প্লাগইন ব্যবহার করেন। এই প্লাগইনটি বিল্ড প্রক্রিয়ার সাথে যুক্ত হয়, এবং AGP এই পাঠযোগ্য প্রোফাইল নিয়মগুলোকে একটি বাইনারি ফরম্যাটে কম্পাইল করে—যা APK বা AAB-এর মধ্যে baseline.prof হিসেবে প্যাকেজ করা থাকে—এবং ART এটিকে ডিভাইসে কম্পাইল করার জন্য কার্যকরভাবে ব্যবহার করতে পারে, যদি এর আকার ১.৫ মেগাবাইটের চেয়ে ছোট হয়।

তৈরি হওয়া এই প্রোফাইল ফাইলগুলোর নাম সাধারণত startup-prof.txt এবং baseline-prof.txt রাখা হয়। যদিও এগুলোর বিষয়বস্তু মাঝে মাঝে একই রকম মনে হতে পারে, বিশেষ করে যদি আপনি প্রধানত স্টার্টআপের উপর মনোযোগ দেন, তবে এগুলোর উদ্দেশ্য ভিন্ন এবং এগুলো বিভিন্ন পর্যায়ে পারফরম্যান্সকে প্রভাবিত করে:

বেসলাইন প্রোফাইল

বেসলাইন প্রোফাইল ফাইলে একগুচ্ছ বিস্তারিত নিয়ম থাকে, যা অ্যান্ড্রয়েড রানটাইম (ART) ঘন ঘন ব্যবহৃত কোড পাথগুলোকে প্রি-কম্পাইল করতে ব্যবহার করে, এবং এটি শুধু স্টার্টআপের বাইরেও অ্যাপের পারফরম্যান্স অপ্টিমাইজ করে।

বেসলাইন প্রোফাইল ফাইলটি সাধারণত আপনার স্টার্টআপ প্রোফাইলে থাকা নিয়মগুলোর একটি সুপারসেট। এই ফাইলে অ্যাপ স্টার্টআপ অপটিমাইজেশনের জন্য প্রয়োজনীয় সমস্ত নিয়ম (যা baselineProfile Gradle টাস্কের মাধ্যমে তৈরি হয়) অন্তর্ভুক্ত থাকে, সাথে অন্যান্য গুরুত্বপূর্ণ ইউজার জার্নির জন্য অতিরিক্ত প্রোফাইলও থাকে। উদাহরণস্বরূপ, স্ক্রোলিং এবং বিভিন্ন স্ক্রিনে নেভিগেট করা।

includeInStartupProfile কনফিগারেশন ফিল্ডের মান নির্বিশেষে এই অতিরিক্ত, নন-স্টার্টআপ নিয়মগুলি তৈরি হয়।

স্টার্টআপ প্রোফাইল

স্টার্টআপ প্রোফাইল ফাইলে আপনার অ্যাপের স্টার্টআপ পাথের জন্য বিশেষভাবে অপ্টিমাইজ করা নিয়মাবলী থাকে। কম্পাইলেশনের সময়, D8 জাভা বাইটকোডকে DEX ফরম্যাটে রূপান্তর করে। এরপর R8 এই ফাইলটি ব্যবহার করে আপনার DEX ফাইলগুলোর বিন্যাসকে প্রভাবিত করে, এবং নিশ্চিত করে যে দ্রুততর এক্সিকিউশনের জন্য গুরুত্বপূর্ণ স্টার্টআপ কোড মূল DEX ফাইলে রাখা হয়। সাধারণত, শুধুমাত্র অ্যাপের প্রাথমিক প্রদর্শনের জন্য অপরিহার্য টেস্ট সিনারিওগুলোর ক্ষেত্রেই আপনার includeInStartupProfile true সেট করা উচিত। আরও তথ্যের জন্য, Create Startup Profiles দেখুন।

ক্লাউড প্রোফাইল

ক্লাউড প্রোফাইলগুলো বেসলাইন প্রোফাইলের পাশাপাশি পিজিও-এর একটি অতিরিক্ত রূপ প্রদান করে—যা গুগল প্লে স্টোর দ্বারা একত্রিত এবং ইনস্টলের সময় সংকলনের জন্য বিতরণ করা হয়।

যদিও ক্লাউড প্রোফাইলগুলো অ্যাপের সাথে ব্যবহারকারীর বাস্তব মিথস্ক্রিয়ার উপর ভিত্তি করে কাজ করে, একটি আপডেটের পর এগুলো বিতরণ হতে কয়েক ঘন্টা থেকে কয়েক দিন সময় লাগে, যা এগুলোর প্রাপ্যতাকে সীমিত করে। প্রোফাইলগুলো সম্পূর্ণরূপে বিতরণ না হওয়া পর্যন্ত, নতুন বা আপডেট করা অ্যাপের ব্যবহারকারীদের জন্য অ্যাপের পারফরম্যান্স সর্বোত্তম থাকে না। এছাড়াও, ক্লাউড প্রোফাইলগুলো শুধুমাত্র অ্যান্ড্রয়েড ৯ (এপিআই লেভেল ২৮) বা তার উচ্চতর সংস্করণে চালিত অ্যান্ড্রয়েড ডিভাইসগুলোকে সাপোর্ট করে এবং কেবলমাত্র সেইসব অ্যাপের ক্ষেত্রেই ভালোভাবে কাজ করে, যেগুলোর ব্যবহারকারীর সংখ্যা যথেষ্ট বড়।

অ্যান্ড্রয়েড সংস্করণ জুড়ে সংকলন আচরণ

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

অ্যান্ড্রয়েড সংস্করণ সংকলন পদ্ধতি অপ্টিমাইজেশন পদ্ধতি
৫ থেকে ৬ (এপিআই স্তর ২১ থেকে ২৩) সম্পূর্ণ AOT ইনস্টলের সময় পুরো অ্যাপটি অপ্টিমাইজ করা হয়, যার ফলে অ্যাপটি ব্যবহার করতে দীর্ঘ সময় অপেক্ষা করতে হয়, র‍্যাম ও ডিস্ক স্পেসের ব্যবহার বাড়ে এবং ডিস্ক থেকে কোড লোড হতে বেশি সময় লাগে, যা সম্ভাব্যভাবে কোল্ড স্টার্টআপ টাইম বাড়িয়ে দেয়।
৭ থেকে ৮.১ পর্যন্ত (এপিআই স্তর ২৪ থেকে ২৭ পর্যন্ত) আংশিক AOT (বেসলাইন প্রোফাইল) অ্যাপ মডিউল যখন এই ডিপেন্ডেন্সিটি সংজ্ঞায়িত করে, তখন প্রথমবার চালানোর সময় androidx.profileinstaller দ্বারা বেসলাইন প্রোফাইলগুলো ইনস্টল করা হয়। ART অ্যাপ ব্যবহারের সময় অতিরিক্ত প্রোফাইল নিয়ম যোগ করে এবং ডিভাইস নিষ্ক্রিয় থাকাকালীন সেগুলো কম্পাইল করে এই প্রক্রিয়াটিকে আরও উন্নত করতে পারে। এটি ডিস্কের স্থান এবং ডিস্ক থেকে কোড লোড করার সময়কে অপ্টিমাইজ করে, যার ফলে অ্যাপের জন্য অপেক্ষার সময় কমে আসে।
৯ (এপিআই লেভেল ২৮) এবং উচ্চতর আংশিক AOT (বেসলাইন + ক্লাউড প্রোফাইল) অ্যাপ ইনস্টলের সময় Play, APK অপ্টিমাইজ করার জন্য বেসলাইন প্রোফাইল এবং ক্লাউড প্রোফাইল (যদি উপলব্ধ থাকে) ব্যবহার করে। ইনস্টলেশনের পরে, ART প্রোফাইলগুলি Play-তে আপলোড ও একত্রিত করা হয় এবং তারপর অন্যান্য ব্যবহারকারীরা যখন অ্যাপটি ইনস্টল বা আপডেট করেন, তখন সেগুলিকে ক্লাউড প্রোফাইল হিসাবে সরবরাহ করা হয়।

পরিচিত সমস্যা

নিম্নলিখিতগুলি সম্ভাব্য সমস্যা এবং তার সমাধান, অথবা এমন কিছু সমস্যা যার বিকল্প সমাধানের জন্য উন্নয়ন কাজ চলছে:

  • ওয়ানপ্লাস ডিভাইস সহ কিছু ডিভাইসে পারমিশন সেটিংসের কারণে বেসলাইন প্রোফাইল তৈরি করা ব্যর্থ হতে পারে। এর সমাধান করতে, ডেভেলপার অপশন সেটিংসে থাকা ‘Disable permission monitoring’ অপশনটি বন্ধ করে দিন।

  • ফায়ারবেস টেস্ট ল্যাব ডিভাইসগুলিতে, গ্রেডল-পরিচালিত টেস্ট ল্যাব ডিভাইসগুলি সহ, বেসলাইন প্রোফাইল তৈরি করা সমর্থিত নয় ( ইস্যু #285187547 )।

  • লাইব্রেরিগুলির জন্য সফলভাবে বেসলাইন প্রোফাইল সরবরাহ করতে, ন্যূনতম বেসলাইন প্রোফাইল গ্রেডল প্লাগইন 1.2.3 অথবা AGP 8.3 ব্যবহার করুন ( ইস্যু #313992099 )।

  • আপনি যদি ./gradlew app:generateBaselineProfile কমান্ডটি দিয়ে বেসলাইন প্রোফাইল তৈরি করেন, তাহলে টেস্ট মডিউলের বেঞ্চমার্কগুলোও চলে এবং ফলাফলগুলো বাতিল হয়ে যায়। এমনটা হলে, আপনি -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile সহ কমান্ডটি চালিয়ে শুধুমাত্র বেসলাইন প্রোফাইলগুলো তৈরি করতে পারেন। এই সমস্যাটি AGP 8.2-এ সমাধান করা হয়েছে।

  • সকল বিল্ড টাইপের জন্য বেসলাইন প্রোফাইল তৈরি করার কমান্ড— ./gradlew app:generateBaselineProfile —শুধুমাত্র রিলিজ বিল্ড টাইপের জন্য বেসলাইন প্রোফাইল তৈরি করে। এই সমস্যাটি AGP 8.1-এ সমাধান করা হয়েছে।

  • গুগল প্লে স্টোর ছাড়া অন্য অ্যাপ বিতরণের মাধ্যমগুলো ইনস্টলেশনের সময় বেসলাইন প্রোফাইল ব্যবহার সমর্থন নাও করতে পারে। এই মাধ্যমগুলোর দ্বারা ইনস্টল করা অ্যাপের ব্যবহারকারীরা এর সুবিধা ততক্ষণ পর্যন্ত পান না, যতক্ষণ না ব্যাকগ্রাউন্ডে ডেক্সঅপট (dexopt) চলে—যা সম্ভবত সারারাত ধরে চলে।

  • প্লে স্টোরের অভ্যন্তরীণ অ্যাপ শেয়ারিং বেসলাইন প্রোফাইল সমর্থন করে না; তবে, অভ্যন্তরীণ টেস্টিং ট্র্যাকটি করে।

  • কিছু ডিভাইসে, যেমন হুয়াওয়ে ডিভাইসে, ব্যাটারি অপটিমাইজেশন প্রোফাইল ইনস্টলেশনে বাধা সৃষ্টি করতে পারে। আপনার প্রোফাইলগুলো যেন কার্যকরভাবে ইনস্টল হয়, তা নিশ্চিত করতে আপনার বেঞ্চমার্ক ডিভাইসগুলোতে যেকোনো ব্যাটারি অপটিমাইজেশন নিষ্ক্রিয় করুন।

অতিরিক্ত সম্পদ

{% হুবহু %} {% endverbatim %}

আপনার জন্য প্রস্তাবিত

{% হুবহু %}
{% endverbatim %}