बेसलाइन प्रोफ़ाइलें, कोड एक्ज़ीक्यूशन की स्पीड को पहली बार लॉन्च करने के बाद से ही करीब 30% तक बढ़ा देती हैं. ऐसा, शामिल किए गए कोड पाथ के लिए, इंटरप्रिटेशन और जस्ट-इन-टाइम (जेआईटी) कंपाइलेशन के चरणों से बचकर किया जाता है.
किसी ऐप्लिकेशन या लाइब्रेरी में बेसलाइन प्रोफ़ाइल शामिल करके, Android रनटाइम (एआरटी), अहेड-ऑफ़-टाइम (एओटी) कंपाइलेशन की मदद से, कोड पाथ को ऑप्टिमाइज़ कर सकता है. इससे हर नए उपयोगकर्ता और ऐप्लिकेशन के हर अपडेट के लिए, परफ़ॉर्मेंस को बेहतर बनाया जा सकता है. प्रोफ़ाइल गाइडेड ऑप्टिमाइज़ेशन (पीजीओ) की मदद से, ऐप्लिकेशन के स्टार्टअप को ऑप्टिमाइज़ किया जा सकता है. साथ ही, इंटरैक्शन के दौरान होने वाली रुकावटों को कम किया जा सकता है. इसके अलावा, पहली बार लॉन्च होने के बाद से ही, उपयोगकर्ताओं के लिए रनटाइम की परफ़ॉर्मेंस को बेहतर बनाया जा सकता है.
परफ़ॉर्मेंस में हुए इन सुधारों से, कारोबार की मेट्रिक में सीधे तौर पर सुधार होता है. जैसे, उपयोगकर्ता को अपने साथ जोड़े रखना, लेन-देन, और रेटिंग. Josh, Lyft, TikTok, और Zomato की कहानियों से, इस बारे में ज़्यादा जानें कि परफ़ॉर्मेंस से कारोबार की मेट्रिक पर कैसे असर पड़ता है.
बेसलाइन प्रोफ़ाइलों के फ़ायदे
बेसलाइन प्रोफ़ाइलें, उपयोगकर्ता के अहम इंटरैक्शन के लिए कोड को पहले से कंपाइल करने की सुविधा देती हैं. जैसे, ऐप्लिकेशन को चालू करना, स्क्रीन के बीच नेविगेट करना या कॉन्टेंट को स्क्रोल करना. इससे, पहली बार इस्तेमाल करने पर भी ऐप्लिकेशन आसानी से काम करते हैं. बेसलाइन प्रोफ़ाइलें, ऐप्लिकेशन की स्पीड और रिस्पॉन्सिवनेस को बढ़ाती हैं. इससे हर दिन के सक्रिय उपयोगकर्ताओं की संख्या और ऐप्लिकेशन पर वापस आने वाले उपयोगकर्ताओं की औसत दर बढ़ सकती है.
बेसलाइन प्रोफ़ाइलें, ऐप्लिकेशन के स्टार्ट होने के बाद भी उसे ऑप्टिमाइज़ करने में मदद करती हैं. इसके लिए, वे उपयोगकर्ता के साथ होने वाले सामान्य इंटरैक्शन की जानकारी देती हैं. इससे ऐप्लिकेशन के पहली बार लॉन्च होने के बाद से ही, उसके रनटाइम को बेहतर बनाने में मदद मिलती है. गाइडेड एओटी कंपाइलेशन, उपयोगकर्ता के डिवाइसों पर निर्भर नहीं करता. इसे मोबाइल डिवाइस के बजाय, डेवलपमेंट मशीन पर हर रिलीज़ के लिए एक बार किया जा सकता है. बेसलाइन प्रोफ़ाइल के साथ रिलीज़ शिप करने से, ऐप्लिकेशन ऑप्टिमाइज़ेशन की सुविधा ज़्यादा तेज़ी से उपलब्ध हो जाती है. ऐसा सिर्फ़ क्लाउड प्रोफ़ाइलों पर भरोसा करने से नहीं होता.
बेसलाइन प्रोफ़ाइल का इस्तेमाल न करने पर, ऐप्लिकेशन के सभी कोड को मेमोरी में JIT-कंपाइल किया जाता है. ऐसा, कोड को समझने के बाद किया जाता है. इसके अलावा, जब डिवाइस इस्तेमाल में नहीं होता है, तो बैकग्राउंड में odex फ़ाइल में कोड लिखा जाता है. किसी ऐप्लिकेशन को इंस्टॉल या अपडेट करने के बाद, उपयोगकर्ताओं को उसे पहली बार चलाने से लेकर नए कोड पाथ ऑप्टिमाइज़ होने तक, बेहतर अनुभव नहीं मिलता.
ऑप्टिमाइज़ करने के बाद, कई ऐप्लिकेशन की परफ़ॉर्मेंस में करीब 30% की बढ़ोतरी देखी गई है.
स्टार्टअप प्रोफ़ाइलें
स्टार्टअप प्रोफ़ाइलें, बेसलाइन प्रोफ़ाइलों की तरह ही होती हैं. हालांकि, इनका इस्तेमाल कंपाइल के समय किया जाता है, ताकि DEX लेआउट को ऑप्टिमाइज़ करके स्टार्टअप के समय को कम किया जा सके. इनका इस्तेमाल, उपयोगकर्ता के डिवाइस पर ऑप्टिमाइज़ेशन के लिए नहीं किया जाता. स्टार्टअप प्रोफ़ाइलें, बेसलाइन प्रोफ़ाइलों से किस तरह अलग होती हैं, इस बारे में ज़्यादा जानने के लिए, बेसलाइन प्रोफ़ाइलों और स्टार्टअप प्रोफ़ाइलों की तुलना करना लेख पढ़ें. DEX लेआउट ऑप्टिमाइज़ेशन के बारे में ज़्यादा जानने के लिए, DEX लेआउट ऑप्टिमाइज़ेशन और स्टार्टअप प्रोफ़ाइलें देखें.
शुरू करें
अपने मौजूदा ऐप्लिकेशन की परफ़ॉर्मेंस को ऑप्टिमाइज़ करने के लिए, बेसलाइन प्रोफ़ाइलें बनाएं लेख पढ़ें.
प्रोफ़ाइल जनरेशन बनाम रिलीज़ के लिए तैयार बिल्ड
बेसलाइन और स्टार्टअप प्रोफ़ाइल फ़ाइलें (उदाहरण के लिए, baseline-prof.txt और startup-prof.txt) जनरेट करते समय, बिल्ड कॉन्फ़िगरेशन में अंतर को समझना ज़रूरी है. साथ ही, इन प्रोफ़ाइलों का इस्तेमाल करने वाले फ़ाइनल रिलीज़ APK को बनाते समय भी यह अंतर समझना ज़रूरी है.
प्रोफ़ाइल फ़ाइलें जनरेट करते समय (उदाहरण के लिए, benchmark):
टेस्ट के साथ बेसलाइन प्रोफ़ाइल कैप्चर करते समय, आपके ऐप्लिकेशन को छिपाया नहीं जाना चाहिए.
यह पक्का करने के लिए कि जनरेट किए गए प्रोफ़ाइल नियम, आपके कोड के मेथड सिग्नेचर से सटीक तरीके से मैच करते हों, आपको प्रोफ़ाइल जनरेट करने के लिए इस्तेमाल किए गए बिल्ड के वैरिएंट के लिए, कोड को छिपाने और ऑप्टिमाइज़ करने की सुविधा (R8) बंद करनी होगी. यह वैरिएंट, रिलीज़ के लिए तैयार बिल्ड के वैरिएंट से अलग होना चाहिए. इसमें कोड को छिपाने और ऑप्टिमाइज़ेशन की सुविधा चालू होती है. ऐसा करने के लिए, प्रोफ़ाइल जनरेट करने वाले बिल्ड के वैरिएंट के लिए, isMinifyEnabled = false सेट करें. अगर बेसलाइन प्रोफ़ाइल Gradle प्लगिन का इस्तेमाल नहीं किया जा रहा है, तो आपको यह भी पक्का करना चाहिए कि -dontobfuscate और -dontoptimize लागू किए गए हों. बेसलाइन प्रोफ़ाइल Gradle प्लगिन, इस कॉन्फ़िगरेशन को अपने-आप मैनेज करता है.
प्रोफ़ाइल जनरेट करने के दौरान, यह पुष्टि की जा सकती है कि आपके ऐप्लिकेशन को छिपाया नहीं गया था. इसके लिए, जनरेट की गई टेक्स्ट प्रोफ़ाइल फ़ाइल (उदाहरण के लिए, baseline-prof.txt) खोलें और देखें कि क्लास और मेथड के नाम छिपे हुए न हों.
फ़ाइनल रिलीज़ APK बनाते समय:
रिलीज़ ऐप्लिकेशन बनाते समय, आपका ऐप्लिकेशन ऑब्फ़स्केट होना चाहिए. ऑब्फ़स्केशन, काट-छांट, और ऑप्टिमाइज़ेशन का फ़ायदा पाने के लिए, रिलीज़ के लिए तैयार आपके बिल्ड में isMinifyEnabled = true होना चाहिए. R8, आपकी प्रोफ़ाइल की उन फ़ाइलों के नियमों को अपने-आप फिर से लिखता है जिन्हें छिपाया नहीं गया है. ऐसा इसलिए किया जाता है, ताकि वे आपके रिलीज़ APK में मौजूद, छिपाए गए और ऑप्टिमाइज़ किए गए कोड से मैच कर सकें. बिल्ड, नियमों को सही तरीके से बदलकर, साफ़ तौर पर पढ़ी जा सकने वाली टेक्स्ट फ़ाइल का फ़ायदा लेता है.
अगर आपको DEX लेआउट ऑप्टिमाइज़ेशन (स्टार्टअप प्रोफ़ाइलों की मदद से) का इस्तेमाल करना है, तो आपके ऐप्लिकेशन के रिलीज़ वर्शन को छिपाया जाना चाहिए. साथ ही, सभी ऑप्टिमाइज़ेशन चालू करके R8 का इस्तेमाल करना चाहिए.
ऐडवांस (नॉन-Gradle) वर्कफ़्लो:
अगर प्रोफ़ाइलें जनरेट करने के लिए, Bazel, Buck या कस्टम सीआई ऑटोमेशन पाइपलाइन जैसे ऐडवांस और नॉन-Gradle वर्कफ़्लो का इस्तेमाल किया जाता है, तो आपको अब भी उन्हीं सिद्धांतों का पालन करना होगा. प्रोफ़ाइल कैप्चर करते समय, आपके ऐप्लिकेशन को अस्पष्ट या ऑप्टिमाइज़ नहीं किया जाना चाहिए. हालांकि, रिलीज़ ऐप्लिकेशन बनाते समय, आपको उसे छिपाना होगा. R8, बिना कोड बदले टेक्स्ट के नियमों वाली फ़ाइल को प्रोसेस करता है. साथ ही, नियमों को सही तरीके से बदलता है, ताकि उन्हें कोड बदलकर रिलीज़ किए गए ऐप्लिकेशन पर लागू किया जा सके.
सुझाए गए कम से कम स्टेबल वर्शन
डिपेंडेंसी चेन, स्टेबल और डेवलपमेंटल रिलीज़ वर्शन उपलब्ध कराती है. बेसलाइन प्रोफ़ाइल जनरेट और इंस्टॉल करने के लिए, Android Gradle प्लगिन, Macrobenchmark लाइब्रेरी, और प्रोफ़ाइल इंस्टॉलर के इन वर्शन या इनसे नए वर्शन का इस्तेमाल करें. इन डिपेंडेंसी की ज़रूरत अलग-अलग समय पर होती है. ये एक टूल चेन के तौर पर साथ मिलकर काम करती हैं, ताकि सबसे सही बेसलाइन प्रोफ़ाइल बनाई जा सके.
- Android Gradle प्लगिन:
com.android.tools.build:8.0.0 - Macrobenchmark लाइब्रेरी:
androidx.benchmark:benchmark-macro-junit4:1.5.0 - प्रोफ़ाइल इंस्टॉलर:
androidx.profileinstaller:profileinstaller:1.4.1
हमारा सुझाव है कि बेसलाइन प्रोफ़ाइलें बनाने और उन्हें मैनेज करने के लिए, एजीपी के नए वर्शन का इस्तेमाल करें. यहां एजीपी के अलग-अलग वर्शन के साथ मिलने वाली मुख्य सुविधाओं के बारे में बताया गया है:
| AGP का वर्शन | सुविधाएं |
|---|---|
| 9.1 |
सोर्स सेट डायरेक्ट्री के लिए पूरा सपोर्ट (लाइब्रेरी मॉड्यूल):
वैरिएंट के हिसाब से डायरेक्ट्री के अलावा, लाइब्रेरी मॉड्यूल के साथ-साथ ऐप्लिकेशन मॉड्यूल के लिए, बेसलाइन प्रोफ़ाइल की कई सोर्स फ़ाइलों को किसी भी नाम से एलान किया जा सकता है. जैसे, src/free/generated/baselineProfiles/baseline-prof1.txt.
|
| 8.4 | Gradle रैपर कमांड लाइन टूल या Android Studio का इस्तेमाल करके, डीबग न किए जा सकने वाले बिल्ड के लोकल ऐप्लिकेशन इंस्टॉल, बेसलाइन प्रोफ़ाइलें इंस्टॉल करते हैं. इससे आपके लोकल रिलीज़ के लिए तैयार बिल्ड की परफ़ॉर्मेंस, प्रोडक्शन से ज़्यादा मेल खाती है. इस अपडेट से, बेसलाइन प्रोफ़ाइलों की प्रोडक्शन परफ़ॉर्मेंस पर कोई असर नहीं पड़ता. |
| 8.3 |
|
| 8.2 |
|
| 8.0 | सुझाया गया कम से कम वर्शन: बेसलाइन प्रोफ़ाइल Gradle प्लगिन का इस्तेमाल करके, एक ही Gradle टास्क से बेसलाइन प्रोफ़ाइलें जनरेट करें.
|
| 7.4 |
कम से कम ज़रूरी वर्शन: ऐप्लिकेशन, लाइब्रेरी से बेसलाइन प्रोफ़ाइलें इस्तेमाल कर सकते हैं. साथ ही, src/main/baseline-prof.txt फ़ाइल में अपनी बेसलाइन प्रोफ़ाइल उपलब्ध करा सकते हैं.
|
वैरिएंट के हिसाब से प्रोफ़ाइल सोर्स की सेटिंग
ऐप्लिकेशन के लिए Android Gradle प्लगिन (एजीपी) वर्शन 8.0 और लाइब्रेरी के लिए एजीपी वर्शन 8.3 का इस्तेमाल करके, बेसलाइन प्रोफ़ाइल के नियमों को एक खास सोर्स सेट डायरेक्ट्री में रखा जा सकता है. इससे, एक ही पाथ (उदाहरण के लिए, src/main/baseline-prof.txt) की पाबंदियों से आगे बढ़कर, कई फ़ाइलों को चालू किया जा सकता है.
इससे वैरिएंट के लिए बेहतर सहायता मिलती है. साथ ही, खास बिल्ड फ़्लेवर और टाइप के हिसाब से अलग-अलग बेसलाइन प्रोफ़ाइलें तय की जा सकती हैं. उदाहरण के लिए, src/variant/baselineProfiles/ जैसी डायरेक्ट्री का इस्तेमाल करके. इससे यह पक्का किया जाता है कि परफ़ॉर्मेंस ऑप्टिमाइज़ेशन के नियम, हर यूनीक ऐप्लिकेशन या लाइब्रेरी बाइनरी के लिए सटीक तरीके से लागू हों.
प्रोफ़ाइल जनरेट करने का उदाहरण
यहां सुझाई गई Macrobenchmark लाइब्रेरी का इस्तेमाल करके, ऐप्लिकेशन के स्टार्टअप के लिए बेसलाइन प्रोफ़ाइल बनाने के साथ-साथ, कई नेविगेशन और स्क्रोल इवेंट बनाने के लिए, क्लास का एक उदाहरण दिया गया है:
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()
}
}
}
}
उपयोगकर्ता अनुभव को ऑटोमेट करने के लिए, यूज़र इंटरफ़ेस (यूआई) ऑटोमेटर लाइब्रेरी का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, यूज़र इंटरफ़ेस (यूआई) ऑटोमेटर की मदद से ऑटोमेटेड टेस्ट लिखना लेख पढ़ें.
इस कोड को पूरी जानकारी के साथ देखने के लिए, GitHub पर परफ़ॉर्मेंस के सैंपल देखें.
अपील वाले वीडियो में क्या शामिल करना है
किसी ऐप्लिकेशन में बेसलाइन प्रोफ़ाइल का इस्तेमाल करते समय, ऐप्लिकेशन के स्टार्टअप कोड और उपयोगकर्ता के सामान्य इंटरैक्शन शामिल किए जा सकते हैं. जैसे, स्क्रीन के बीच नेविगेट करना या स्क्रोल करना. रजिस्ट्रेशन, लॉगिन या पेमेंट जैसे पूरे फ़्लो को भी इकट्ठा किया जा सकता है. जिन उपयोगकर्ता अनुभवों को आप ज़रूरी मानते हैं उन्हें बेसलाइन प्रोफ़ाइलों से फ़ायदा मिल सकता है. इसके लिए, उनके रनटाइम की परफ़ॉर्मेंस को बेहतर बनाना होगा.
अगर परफ़ॉर्मेंस को बेहतर बनाने के लिए अलग-अलग तरीकों से एक्सपेरिमेंट किया जा रहा है, तो अपने एक्सपेरिमेंट के दोनों ग्रुप के लिए बेसलाइन प्रोफ़ाइलें शामिल करें. ऐसा करके, नतीजों को समझना आसान बनाया जा सकता है. इसके लिए, यह पक्का करें कि आपके सभी उपयोगकर्ता, कंपाइल किए गए कोड को लगातार चला रहे हों.
लाइब्रेरी, अपनी बेसलाइन प्रोफ़ाइलें उपलब्ध करा सकती हैं और उन्हें रिलीज़ के साथ शिप कर सकती हैं, ताकि ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाया जा सके. उदाहरण के लिए, Jetpack Compose की परफ़ॉर्मेंस में बेसलाइन प्रोफ़ाइल का इस्तेमाल करें सेक्शन देखें.
बेसलाइन प्रोफ़ाइलें कैसे काम करती हैं
अपना ऐप्लिकेशन या लाइब्रेरी डेवलप करते समय, उपयोगकर्ता के सामान्य इंटरैक्शन को कवर करने के लिए, बेसलाइन प्रोफ़ाइल तय करें. ऐसा तब करें, जब रेंडर होने में लगने वाला समय या इंतज़ार का समय अहम हो. ये इस तरह काम करते हैं:
आपके ऐप्लिकेशन के लिए, आसानी से पढ़े जा सकने वाले प्रोफ़ाइल नियम जनरेट किए जाते हैं और ऐप्लिकेशन में बाइनरी फ़ॉर्म में कंपाइल किए जाते हैं. इन्हें
assets/dexopt/baseline.profमें देखा जा सकता है. इसके बाद, Android ऐप्लिकेशन बंडल (AAB) को सामान्य तरीके से Google Play पर अपलोड किया जा सकता है.Google Play, प्रोफ़ाइल को प्रोसेस करता है और उसे APK के साथ सीधे उपयोगकर्ताओं को भेजता है. इंस्टॉलेशन के दौरान, ART प्रोफ़ाइल में मौजूद तरीकों का एओटी कंपाइलेशन करता है. इससे वे तरीके तेज़ी से लागू होते हैं. अगर प्रोफ़ाइल में ऐप्लिकेशन लॉन्च करने या फ़्रेम रेंडरिंग के दौरान इस्तेमाल किए जाने वाले तरीके शामिल हैं, तो उपयोगकर्ता को ऐप्लिकेशन लॉन्च होने में कम समय लग सकता है और जैंक की समस्या कम हो सकती है.
यह फ़्लो, Cloud Profiles एग्रीगेशन के साथ मिलकर काम करता है. इससे ऐप्लिकेशन के असल इस्तेमाल के आधार पर, समय के साथ उसकी परफ़ॉर्मेंस को बेहतर बनाया जा सकता है.
बेसलाइन प्रोफ़ाइलों और स्टार्टअप प्रोफ़ाइलों की तुलना करना
बेसलाइन प्रोफ़ाइल Gradle प्लगिन का इस्तेमाल करके, प्रोफ़ाइल फ़ाइलों को तय किया जाता है और उन्हें जनरेट किया जाता है.
यह प्लगिन, बिल्ड प्रोसेस में शामिल होता है. साथ ही, एजीपी इन किसी व्यक्ति के लिए आसानी से पढ़ा जा सकने वाला डेटा प्रोफ़ाइल नियमों को बाइनरी फ़ॉर्मैट में कंपाइल करता है. यह फ़ॉर्मैट, APK या AAB में baseline.prof के तौर पर पैकेज किया जाता है. Android रनटाइम, उपयोगकर्ता के डिवाइस पर कंपाइल करने के लिए इसका असरदार तरीके से इस्तेमाल कर सकता है. हालांकि, इसके लिए ज़रूरी है कि इसका साइज़ 1.5 एमबी से कम हो.
जनरेट की गई इन प्रोफ़ाइल फ़ाइलों को आम तौर पर, startup-prof.txt और baseline-prof.txt नाम दिया जाता है. कभी-कभी इनका कॉन्टेंट एक जैसा लग सकता है. खास तौर पर, अगर आपका मुख्य फ़ोकस स्टार्टअप पर है. हालांकि, इनके मकसद अलग-अलग होते हैं और ये अलग-अलग चरणों में परफ़ॉर्मेंस पर असर डालते हैं:
बेसलाइन प्रोफ़ाइल
बेसलाइन प्रोफ़ाइल फ़ाइल में नियमों का एक पूरा सेट होता है. Android रनटाइम (एआरटी) इन नियमों का इस्तेमाल करके, अक्सर इस्तेमाल किए जाने वाले कोड पाथ को पहले से कंपाइल करता है. इससे ऐप्लिकेशन के स्टार्टअप के साथ-साथ, ऐप्लिकेशन की परफ़ॉर्मेंस भी बेहतर होती है.
बेसलाइन प्रोफ़ाइल फ़ाइल, आम तौर पर आपकी स्टार्टअप प्रोफ़ाइल में मौजूद नियमों का सुपरसेट होती है. इस फ़ाइल में, ऐप्लिकेशन के स्टार्टअप को ऑप्टिमाइज़ करने के लिए ज़रूरी सभी नियम शामिल होते हैं. ये नियम, baselineProfile Gradle टास्क के ज़रिए जनरेट किए जाते हैं. साथ ही, इसमें अन्य क्रिटिकल यूज़र जर्नी के लिए अतिरिक्त प्रोफ़ाइलें भी शामिल होती हैं. जैसे, स्क्रोल करना और
अलग-अलग स्क्रीन पर नेविगेट करना.
ये अतिरिक्त नियम, includeInStartupProfile कॉन्फ़िगरेशन फ़ील्ड की वैल्यू के बावजूद जनरेट होते हैं.
स्टार्टअप प्रोफ़ाइल
स्टार्टअप प्रोफ़ाइल फ़ाइल में ऐसे नियम होते हैं जो आपके ऐप्लिकेशन के स्टार्टअप पाथ के लिए खास तौर पर ऑप्टिमाइज़ किए गए होते हैं. कंपाइलेशन के दौरान, D8 Java बाइटकोड को DEX फ़ॉर्मैट में बदल देता है.
इसके बाद, R8 इस फ़ाइल का इस्तेमाल करके आपकी DEX फ़ाइलों के लेआउट में बदलाव करता है. इससे यह पक्का होता है कि स्टार्टअप के लिए ज़रूरी कोड, मुख्य DEX फ़ाइल में मौजूद हो, ताकि ऐप्लिकेशन तेज़ी से चालू हो सके. आम तौर पर, आपको includeInStartupProfile को true पर सिर्फ़ उन टेस्ट के लिए सेट करना चाहिए जो ऐप्लिकेशन के शुरुआती डिसप्ले के लिए ज़रूरी हैं. ज़्यादा जानकारी के लिए, स्टार्टअप प्रोफ़ाइलें बनाना लेख पढ़ें.
क्लाउड प्रोफ़ाइलें
क्लाउड प्रोफ़ाइलें, पीजीओ का एक अतिरिक्त फ़ॉर्म उपलब्ध कराती हैं. इसे Google Play Store इकट्ठा करता है और इंस्टॉल के समय कंपाइल करने के लिए डिस्ट्रिब्यूट करता है. यह बेसलाइन प्रोफ़ाइलों के साथ काम करता है.
क्लाउड प्रोफ़ाइलें, ऐप्लिकेशन के साथ उपयोगकर्ता के असल इंटरैक्शन से जनरेट होती हैं. हालांकि, इन्हें अपडेट होने के बाद डिस्ट्रिब्यूट होने में कई घंटे या दिन लग सकते हैं. इस वजह से, ये प्रोफ़ाइलें सीमित तौर पर उपलब्ध होती हैं. जब तक प्रोफ़ाइलें पूरी तरह से डिस्ट्रिब्यूट नहीं हो जातीं, तब तक नए या अपडेट किए गए ऐप्लिकेशन इस्तेमाल करने वाले लोगों को ऐप्लिकेशन की परफ़ॉर्मेंस में कमी देखने को मिल सकती है. इसके अलावा, क्लाउड प्रोफ़ाइलें सिर्फ़ Android 9 (एपीआई लेवल 28) या इसके बाद के वर्शन वाले Android डिवाइसों पर काम करती हैं. साथ ही, ये सिर्फ़ उन ऐप्लिकेशन के लिए बेहतर तरीके से काम करती हैं जिनका उपयोगकर्ता आधार काफ़ी बड़ा है.
Android के अलग-अलग वर्शन पर कंपाइलेशन का तरीका
Android प्लैटफ़ॉर्म के वर्शन, ऐप्लिकेशन को कंपाइल करने के लिए अलग-अलग तरीके इस्तेमाल करते हैं. हर तरीके की परफ़ॉर्मेंस अलग-अलग होती है. बेसलाइन प्रोफ़ाइलें, कंपाइलेशन के पिछले तरीकों को बेहतर बनाती हैं. इसके लिए, वे सभी इंस्टॉल के लिए एक प्रोफ़ाइल उपलब्ध कराती हैं.
| Android वर्शन | कंपाइलेशन का तरीका | ऑप्टिमाइज़ेशन का तरीका |
|---|---|---|
| 5 से 6 तक (एपीआई लेवल 21 से 23 तक) | फ़ुल एओटी | इंस्टॉल करने के दौरान, पूरे ऐप्लिकेशन को ऑप्टिमाइज़ किया जाता है. इस वजह से, ऐप्लिकेशन को इस्तेमाल करने के लिए ज़्यादा इंतज़ार करना पड़ता है. साथ ही, रैम और डिस्क में बचे स्टोरेज का ज़्यादा इस्तेमाल होता है. इसके अलावा, डिस्क से कोड लोड होने में ज़्यादा समय लगता है. इससे, कोल्ड स्टार्टअप में लगने वाला समय बढ़ सकता है. |
| 7 से 8.1 तक (एपीआई लेवल 24 से 27 तक) | पार्शियल एओटी (बेसलाइन प्रोफ़ाइल) | जब ऐप्लिकेशन मॉड्यूल इस डिपेंडेंसी को तय करता है, तब पहली बार इस्तेमाल करने पर, बेसलाइन प्रोफ़ाइलें androidx.profileinstaller से इंस्टॉल की जाती हैं. ART, ऐप्लिकेशन के इस्तेमाल के दौरान प्रोफ़ाइल के अतिरिक्त नियम जोड़कर और डिवाइस के इस्तेमाल में न होने पर उन्हें कंपाइल करके, इसे और बेहतर बना सकता है. इससे डिस्क में बचा स्टोरेज और डिस्क से कोड लोड होने में लगने वाले समय को ऑप्टिमाइज़ किया जाता है. इससे ऐप्लिकेशन के लिए इंतज़ार का समय कम हो जाता है. |
| 9 (एपीआई लेवल 28) और इसके बाद वाले वर्शन | पार्शियल एओटी (बेसलाइन + क्लाउड प्रोफ़ाइल) | ऐप्लिकेशन इंस्टॉल करने के दौरान, Play, बेसलाइन प्रोफ़ाइलों का इस्तेमाल करता है. इससे, APK और क्लाउड प्रोफ़ाइलों को ऑप्टिमाइज़ किया जाता है. हालांकि, ऐसा तब होता है, जब ये प्रोफ़ाइलें उपलब्ध हों. इंस्टॉल होने के बाद, ART प्रोफ़ाइलें Play पर अपलोड की जाती हैं. इसके बाद, उन्हें इकट्ठा करके क्लाउड प्रोफ़ाइल के तौर पर अन्य उपयोगकर्ताओं को उपलब्ध कराया जाता है. ऐसा तब होता है, जब वे ऐप्लिकेशन इंस्टॉल या अपडेट करते हैं. |
पहले से मालूम समस्याएं
यहां कुछ संभावित समस्याएं और उनके समाधान दिए गए हैं. इसके अलावा, ऐसी समस्याएं भी दी गई हैं जिनके समाधान के लिए, लगातार काम किया जा रहा है:
कुछ डिवाइसों पर अनुमति की सेटिंग की वजह से, बेसलाइन प्रोफ़ाइल जनरेट नहीं हो पाती. इनमें OnePlus डिवाइस भी शामिल हैं. इस समस्या को हल करने के लिए, डेवलपर के लिए सेटिंग और टूल में जाकर, अनुमति की निगरानी करने की सुविधा बंद करें विकल्प को बंद करें.
लाइब्रेरी के लिए बेसलाइन प्रोफ़ाइलें उपलब्ध कराने के लिए, कम से कम बेसलाइन प्रोफ़ाइल Gradle प्लगिन 1.2.3 या एजीपी 8.3 का इस्तेमाल करें (समस्या #313992099).
अगर
./gradlew app:generateBaselineProfileकमांड का इस्तेमाल करके बेसलाइन प्रोफ़ाइलें जनरेट की जाती हैं, तो टेस्ट मॉड्यूल में मौजूद मानदंड भी लागू होते हैं. साथ ही, नतीजों को खारिज कर दिया जाता है. अगर ऐसा होता है, तो-P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfileके साथ कमांड चलाकर, सिर्फ़ बेसलाइन प्रोफ़ाइलें जनरेट की जा सकती हैं. इस समस्या को एजीपी 8.2 में ठीक कर दिया गया है.सभी तरह के बिल्ड के लिए बेसलाइन प्रोफ़ाइलें जनरेट करने का निर्देश—
./gradlew app:generateBaselineProfile—सिर्फ़ रिलीज़ के लिए तैयार बिल्ड के लिए बेसलाइन प्रोफ़ाइलें जनरेट करता है. इस समस्या को एजीपी 8.1 में ठीक कर दिया गया है.ऐसा हो सकता है कि Google Play Store के अलावा, ऐप्लिकेशन डिस्ट्रिब्यूट करने वाले अन्य प्लैटफ़ॉर्म, इंस्टॉल करते समय बेसलाइन प्रोफ़ाइलों का इस्तेमाल करने की सुविधा न दें. इन चैनलों से इंस्टॉल किए गए ऐप्लिकेशन के उपयोगकर्ताओं को तब तक फ़ायदे नहीं दिखते, जब तक बैकग्राउंड में dexopt नहीं चलता. आम तौर पर, यह रात में चलता है.
Play Store पर, संगठन में काम करने वालों के साथ ऐप्लिकेशन शेयर करने की सुविधा, बेसलाइन प्रोफ़ाइलों के साथ काम नहीं करती. हालांकि, ऐप्लिकेशन का इंटरनल टेस्ट ट्रैक पर यह सुविधा काम करती है.
Huawei जैसे कुछ डिवाइसों पर बैटरी ऑप्टिमाइज़ेशन की सुविधा, प्रोफ़ाइल इंस्टॉल करने में रुकावट डाल सकती है. यह पक्का करने के लिए कि आपकी प्रोफ़ाइलें असरदार तरीके से इंस्टॉल हों, मानदंड के तौर पर इस्तेमाल किए जा रहे डिवाइसों में बैटरी ऑप्टिमाइज़ेशन की सुविधा बंद करें.
अन्य संसाधन
- DEX लेआउट ऑप्टिमाइज़ेशन और स्टार्टअप प्रोफ़ाइलें
- बेसलाइन प्रोफ़ाइलों की मदद से ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाएं
आपके लिए सुझाव
- ध्यान दें: JavaScript बंद होने पर, लिंक टेक्स्ट दिखता है
- बेसलाइन प्रोफ़ाइलें बनाना {:#creating-profile-rules}
- Macrobenchmark के बिना बेसलाइन प्रोफ़ाइलें बनाना और उन्हें मेज़र करना
- DEX लेआउट ऑप्टिमाइज़ेशन और स्टार्टअप प्रोफ़ाइलें