Android App Startup के लिए Profile-Guided Optimization
हमने अपने Android cold start को 1.2s से घटाकर 380ms कर दिया।
अधिकांश ऐप्स पहली बार लॉन्च होने पर सबसे धीमे compilation mode पर चलते हैं। जब कोई यूजर पहली बार आपका ऐप इंस्टॉल करता है, तो Android "interpret-only" mode का उपयोग करता है। इससे आपका स्टार्टअप धीमा हो जाता है। सिस्टम बाद में केवल idle time के दौरान ही कोड को optimize करता है।
आप इसे तीन-चरणीय (three-step) पाइपलाइन का उपयोग करके ठीक कर सकते हैं।
Baseline Profiles जेनरेट करें Baseline Profiles सिस्टम को बताते हैं कि इंस्टॉलेशन के समय किन classes को compile करना है। इन्हें अपने CI pipeline में बनाने के लिए Macrobenchmark का उपयोग करें। हमारे profiles ने केवल 12% methods को कवर किया लेकिन स्टार्टअप समय का 94% हिस्सा संभाल लिया।
DEX Layout Reordering सक्षम करें यह आपकी Gradle properties में केवल एक लाइन का काम है। यह R8 को आपकी DEX file में startup classes को एक साथ ग्रुप करने के लिए कहता है। इससे page faults में 30% से 50% तक की कमी आती है। जब classes एक साथ रहती हैं, तो सिस्टम डिस्क से कम बेकार डेटा लोड करता है।
Cloud Profiles का उपयोग करें Google Play यूजर्स से profiles इकट्ठा करता है और उन्हें नए इंस्टॉलेशन पर भेजता है। यह आपकी स्पीड में होने वाले सुधार को कई गुना बढ़ा देता है।
हमारे टेस्टिंग के परिणाम:
- No profile: 1,204ms cold start
- केवल Baseline Profile: 620ms cold start
- Baseline + DEX reorder: 445ms cold start
- Baseline + DEX reorder + Cloud: 380ms cold start
आपके वर्कफ़्लो के लिए महत्वपूर्ण टिप्स:
- हर रिलीज़ के लिए CI में profiles जेनरेट करें। Stale profiles के कारण परफॉरमेंस में कमी आती है।
- R8 चलने के बाद profiles को फिर से जेनरेट करें। R8 आपके कोड स्ट्रक्चर को बदल देता है।
- Macrobenchmark में "Partial" compilation mode का उपयोग करें। "Full" mode नकली परिणाम देता है जो वास्तविक यूजर अनुभव को नहीं दर्शाते।
- अलग-अलग Android versions पर टेस्ट करें। पुराने और नए API levels के बीच परफॉरमेंस में अंतर हो सकता है।
तेज़ ऐप्स बनाने के लिए इन लेयर्स को एक साथ जोड़ें।
Source: https://dev.to/software_mvp-factory/profile-guided-optimization-for-android-app-startup-2i7a