केस स्टडी
Reddit ने परफ़ॉर्मेंस में बड़े सुधार करने के लिए, R8 ऑप्टिमाइज़र का इस्तेमाल कैसे किया
पढ़ने में 4 मिनट लगेंगे
आज के दौर में, मोबाइल ऐप्लिकेशन का इस्तेमाल तेज़ी से बढ़ रहा है. ऐसे में, लोगों को बेहतर अनुभव देना सिर्फ़ एक सुविधा नहीं, बल्कि ज़रूरत बन गई है. ऐप्लिकेशन के लोड होने में ज़्यादा समय लगने, इंटरफ़ेस के रिस्पॉन्स न देने, और ऐप्लिकेशन के बार-बार क्रैश होने से, लोगों की दिलचस्पी और जुड़ाव पर बुरा असर पड़ सकता है. Reddit की इंजीनियरिंग टीम ने Android Developer Relations टीम के साथ काम करते हुए, अपने ऐप्लिकेशन की परफ़ॉर्मेंस का आकलन करने के लिए, ऐप्लिकेशन परफ़ॉर्मेंस स्कोर का इस्तेमाल किया. परफ़ॉर्मेंस का आकलन करने के बाद, उन्हें पता चला कि इसमें काफ़ी सुधार किया जा सकता है. इसके बाद, उन्होंने Android ऐप्लिकेशन ऑप्टिमाइज़र R8 की पूरी क्षमता का इस्तेमाल करने का फ़ैसला किया. इस पहल से, ऐप्लिकेशन के खुलने में लगने वाले समय में काफ़ी सुधार हुआ. साथ ही, स्लो या फ़्रीज़ होने वाले फ़्रेम और एएनआर की संख्या में कमी आई. इसके अलावा, Play Store पर ऐप्लिकेशन की रेटिंग में भी बढ़ोतरी हुई. इस केस स्टडी में बताया गया है कि Reddit ने ये शानदार नतीजे कैसे हासिल किए.
R8 ऑप्टिमाइज़र ने Reddit की मदद कैसे की
R8 ऑप्टिमाइज़र, Android पर परफ़ॉर्मेंस ऑप्टिमाइज़ेशन के लिए एक बुनियादी टूल है. यह ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाने के लिए कई तरीके अपनाता है.आइए, इनमें से सबसे असरदार तरीकों पर एक नज़र डालते हैं.
- ट्री शेकिंग , ऐप्लिकेशन का साइज़ कम करने का सबसे अहम तरीका है. इसमें, ऐप्लिकेशन की डिपेंडेंसी और ऐप्लिकेशन में इस्तेमाल न होने वाले कोड को हटा दिया जाता है.
- मेथड इनलाइनिंग, मेथड कॉल को असल कोड से बदलता है. इससे ऐप्लिकेशन की परफ़ॉर्मेंस बेहतर होती है.
- कोड को ज़्यादा कॉम्पैक्ट बनाने के लिए, क्लास मर्जिंग और अन्य रणनीतियां लागू की जाती हैं. इस दौरान, सोर्स कोड को पढ़ने में आसानी हो, यह ज़रूरी नहीं है. हालांकि, कंपाइल किए गए कोड का तेज़ी से काम करना ज़रूरी है. इसलिए, इंटरफ़ेस या क्लास के क्रम जैसे ऐब्सट्रैक्शन यहां मायने नहीं रखते और इन्हें हटा दिया जाएगा.
- आइडेंटिफ़ायर मिनीफ़िकेशन, क्लास, फ़ील्ड, और मेथड के नामों को छोटे और बिना मतलब वाले नामों में बदलता है. इसलिए, हो सकता है कि
MyDataModelके बजाय, आपको a नाम की कोई क्लास मिले. - रिसॉर्स श्रिंकिंग , ऐप्लिकेशन का साइज़ और कम करने के लिए, इस्तेमाल न होने वाले रिसॉर्स हटाता है. जैसे, एक्सएमएल फ़ाइलें और ड्रॉएबल.
R8 ऑप्टिमाइज़ेशन के मुख्य चरण
डेटा से लोगों की संतुष्टि तक: प्रोडक्शन में सफलता की पहचान करना
ऐप्लिकेशन का नया वर्शन लोगों के लिए रोल आउट करने के तुरंत बाद, Reddit को परफ़ॉर्मेंस के बेहतर नतीजे मिले.Android की ज़रूरी जानकारी और Crashlytics का इस्तेमाल करके, Reddit असल डिवाइसों पर, असल उपयोगकर्ताओं के साथ परफ़ॉर्मेंस मेट्रिक कैप्चर कर पाया. इससे, उन्हें नई रिलीज़ की तुलना पिछले वर्शन से करने में मदद मिली.
R8 ने Reddit के ऐप्लिकेशन की परफ़ॉर्मेंस को कैसे बेहतर बनाया
टीम ने पाया कि कोल्ड स्टार्टअप 40% तेज़ी से हुआ, "ऐप्लिकेशन काम नहीं कर रहा है" (एएनआर) से जुड़ी गड़बड़ियों में 30% की कमी आई, फ़्रेम रेंडरिंग में 25% का सुधार हुआ, और ऐप्लिकेशन का साइज़ 14% कम हुआ.
ये सुधार, लोगों की संतुष्टि के लिए ज़रूरी हैं. ऐप्लिकेशन के खुलने में कम समय लगने का मतलब है कि लोगों को कम इंतज़ार करना पड़ेगा और वे कॉन्टेंट को तेज़ी से ऐक्सेस कर पाएंगे. एएनआर की संख्या कम होने से, ऐप्लिकेशन ज़्यादा स्थिर और भरोसेमंद बनता है. इससे लोगों की निराशा कम होती है. फ़्रेम रेंडरिंग बेहतर होने से, यूज़र इंटरफ़ेस (यूआई) में होने वाली गड़बड़ियां कम होती हैं. इससे स्क्रोलिंग और ऐनिमेशन, ज़्यादा फ़्लूइड और रिस्पॉन्सिव लगते हैं. तकनीकी तौर पर मिले इस पॉज़िटिव असर को, लोगों की प्रतिक्रियाओं में भी साफ़ तौर पर देखा जा सकता है.
ऑप्टिमाइज़ेशन की सफलता के बारे में, लोगों की संतुष्टि के इंडिकेटर सीधे Google Play Store पर देखे जा सकते हैं. R8 से ऑप्टिमाइज़ किया गया वर्शन रोल आउट करने के बाद, टीम ने लोगों की प्रतिक्रियाओं और जुड़ाव में बड़ा और पॉज़िटिव बदलाव देखा.
Drew Heavner: "R8 की पूरी क्षमता का इस्तेमाल करने के लिए, दो हफ़्तों से भी कम समय लगा"
सबसे अच्छी बात यह है कि यह काम, पूरी कोशिश के साथ किया गया. Reddit के स्टाफ़ सॉफ़्टवेयर इंजीनियर Drew Heavner ने इस पहल पर काम किया. उन्होंने बताया कि R8 की पूरी क्षमता का इस्तेमाल करने के लिए, बदलावों को लागू करने में दो हफ़्तों से भी कम समय लगा.
फ़ायदों की पुष्टि करना: मैक्रो बेंचमार्क की मदद से डीप डाइव करना
असल दुनिया में मिले बड़े सुधारों को देखने के बाद, Reddit की इंजीनियरिंग टीम और Google की Android Developer Relations टीम ने, फ़ायदों की वैज्ञानिक तरीके से पुष्टि करने और आगे के ऑप्टिमाइज़ेशन के साथ एक्सपेरिमेंट करने के लिए, विस्तृत बेंचमार्क किए. इस विश्लेषण के लिए, Reddit की इंजीनियरिंग टीम ने अपने ऐप्लिकेशन के दो वर्शन उपलब्ध कराए: एक बिना ऑप्टिमाइज़ेशन वाला और दूसरा, जिसमें R8 और परफ़ॉर्मेंस ऑप्टिमाइज़ेशन के दो और बुनियादी टूल इस्तेमाल किए गए थे: बेसलाइन प्रोफ़ाइल और स्टार्टअप प्रोफ़ाइल.
बेसलाइन प्रोफ़ाइल, Just in Time (JIT) कंपाइलेशन के चरणों को लोगों के डिवाइसों से हटाकर, डेवलपर की मशीनों पर ले जाती हैं. Ahead Of Time (AOT) कंपाइल किए गए कोड से, ऐप्लिकेशन के खुलने में लगने वाला समय और रेंडरिंग से जुड़ी समस्याएं कम होती हैं.
जब कोई ऐप्लिकेशन पैकेज किया जाता है, तो d8 dexer क्लास और मेथड लेता है और आपके ऐप्लिकेशन की classes.dex फ़ाइलें बनाता है. जब कोई व्यक्ति ऐप्लिकेशन खोलता है, तो ये dex फ़ाइलें एक के बाद एक लोड होती हैं. यह प्रोसेस तब तक चलती है, जब तक ऐप्लिकेशन खुल नहीं जाता. स्टार्टअप प्रोफ़ाइल उपलब्ध कराकर, d8 को यह बताया जाता है कि किन क्लास और मेथड को पहली classes.dex फ़ाइलों में पैक करना है. इस स्ट्रक्चर से, ऐप्लिकेशन कम फ़ाइलें लोड करता है. इससे, ऐप्लिकेशन के खुलने की स्पीड बेहतर होती है.
Jetpack Macrobenchmark इस चरण के लिए, मुख्य टूल था. इसकी मदद से, कंट्रोल किए गए एनवायरमेंट में, लोगों के इंटरैक्शन को सटीक तरीके से मेज़र किया जा सकता है. लोगों के सामान्य अनुभव को सिम्युलेट करने के लिए, उन्होंने **UIAutomator API** का इस्तेमाल करके एक टेस्ट बनाया. इस टेस्ट में, ऐप्लिकेशन खोला गया, तीन बार नीचे की ओर स्क्रोल किया गया, और फिर ऊपर की ओर स्क्रोल किया गया.
बेंचमार्क लिखने के लिए, सिर्फ़ इसकी ज़रूरत थी:
uiAutomator {
startApp(REDDIT)
repeat(3) {
onView { isScrollable }.fling(Direction.DOWN) }
repeat(3) {
onView {isScrollable }.fling(Direction.UP)
}
}बेंचमार्क डेटा से, फ़ील्ड में मिले नतीजों की पुष्टि हुई और अहम जानकारी मिली. पूरी तरह से ऑप्टिमाइज़ किया गया ऐप्लिकेशन 55% तेज़ी से खुला और लोग 18% पहले ब्राउज़ करना शुरू कर पाए. ऑप्टिमाइज़ किए गए ऐप्लिकेशन में, Just in Time (JIT) कंपाइलेशन के मामलों में दो-तिहाई की कमी आई और JIT कंपाइलेशन में लगने वाले समय में एक-तिहाई की कमी आई. फ़्रेम रेंडरिंग बेहतर हुआ. इससे, बेंचमार्क किए गए उपयोगकर्ता अनुभव के दौरान 19% ज़्यादा फ़्रेम रेंडर हुए. आखिर में, ऐप्लिकेशन का साइज़ एक-तिहाई से ज़्यादा कम हो गया.
Reddit की कुल परफ़ॉर्मेंस में सुधार
कस्टम Macrobenchmark ट्रेस सेक्शन मेट्रिक की मदद से, JIT कंपाइलेशन में लगने वाले समय को मेज़र किया जा सकता है. जैसे:
val jitCompilationMetric = TraceSectionMetric("JIT Compiling %", label = "JIT compilation")बदलाव लाने वाली टेक्नोलॉजी को चालू करना: R8
R8 को फ़ुल मोड में चालू करने के लिए, app/build.gradle.kts फ़ाइल को कॉन्फ़िगर करें. इसके लिए, रिलीज़ बिल्ड टाइप में minifyEnabled और shrinkResources को true पर सेट करें.
android {
...
buildTypes {
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"keep-rules.pro",
)
}
}
}इस चरण के बाद, पूरी तरह से एंड-टू-एंड टेस्टिंग करनी होगी. ऐसा इसलिए, क्योंकि परफ़ॉर्मेंस ऑप्टिमाइज़ेशन से अनचाहा व्यवहार हो सकता है. इसे लोगों के अनुभव से पहले ही पकड़ लेना बेहतर है.
जैसा कि इस लेख में पहले दिखाया गया है, R8, परफ़ॉर्मेंस के फ़ायदों को ज़्यादा से ज़्यादा बढ़ाने के लिए, बड़े पैमाने पर ऑप्टिमाइज़ेशन करता है. R8, कोड में बड़े बदलाव करता है. इनमें क्लास, फ़ील्ड, और मेथड के नाम बदलना, उन्हें मूव करना, और हटाना शामिल है. अगर आपको लगता है कि इन बदलावों की वजह से गड़बड़ियां हो रही हैं, तो आपको यह बताना होगा कि R8 को कोड के किन हिस्सों में बदलाव नहीं करना चाहिए. इसके लिए, उन हिस्सों को कीप नियमों में शामिल करें.
अपने ऐप्लिकेशन में Reddit के उदाहरण को फ़ॉलो करना
R8 की मदद से Reddit को मिली सफलता, किसी भी डेवलपमेंट टीम के लिए एक बेहतरीन केस स्टडी है. इससे, टीम को अपने ऐप्लिकेशन की परफ़ॉर्मेंस पर कम मेहनत में बड़ा असर डालने में मदद मिलती है. तकनीकी सुधारों और लोगों की संतुष्टि में हुई बढ़ोतरी के बीच सीधा संबंध, परफ़ॉर्मेंस ऑप्टिमाइज़ेशन की अहमियत को दिखाता है.
इस केस स्टडी में बताए गए ब्लूप्रिंट को फ़ॉलो करके, अन्य डेवलपर भी इसी तरह के फ़ायदे पा सकते हैं. इसके लिए, उन्हें अवसरों की पहचान करने के लिए, ऐप्लिकेशन परफ़ॉर्मेंस स्कोर जैसे टूल का इस्तेमाल करना होगा. साथ ही, R8 की पूरी ऑप्टिमाइज़ेशन क्षमता को चालू करना होगा, असल दुनिया के डेटा पर नज़र रखनी होगी, और बेंचमार्क का इस्तेमाल करके, पुष्टि करनी होगी और बेहतर तरीके से समझना होगा.
अपने ऐप्लिकेशन में R8 का इस्तेमाल शुरू करने के लिए, R8 ऑप्टिमाइज़र को चालू करने, कॉन्फ़िगर करने, और उससे जुड़ी समस्याओं को हल करने के बारे में, हाल ही में अपडेट किए गए आधिकारिक दस्तावेज़ और दिशा-निर्देश देखें.
पढ़ना जारी रखें
-
केस स्टडी
Monzo, यूके का एक डिजिटल बैंक है. इसके 1.5 करोड़ ग्राहक हैं और इनकी संख्या लगातार बढ़ रही है. ऐप्लिकेशन के बढ़ने के साथ-साथ, इंजीनियरिंग टीम ने ऐप्लिकेशन के खुलने में लगने वाले समय को सुधार के लिए एक अहम क्षेत्र के तौर पर पहचाना. हालांकि, उन्हें चिंता थी कि इसके लिए, उनके कोडबेस में बड़े बदलाव करने पड़ेंगे.
Ben Weiss, Tracy Agyemang • पढ़ने में 2 मिनट लगेंगे
-
केस स्टडी
परफ़ॉर्मेंस में होने वाली गड़बड़ियों को दोहराना मुश्किल होता है. इसलिए, ये गड़बड़ियां मोबाइल डेवलपर के लिए एक बड़ी चुनौती बन जाती हैं.
Alice Yuan, Arti Arutiunov, Nikita Ogorodnikov • पढ़ने में 4 मिनट लगेंगे
-
केस स्टडी
हाल ही में, FotMob को Wear OS पर एक दिन में सबसे ज़्यादा उपयोगकर्ता मिले. यह संख्या, पिछले पांच सालों में एक दिन में मिलने वाले औसत उपयोगकर्ताओं की संख्या से दो से तीन गुना ज़्यादा थी. इसकी वजह क्या थी? क्रॉस-डिवाइस इंस्टॉलेशन का एक आसान फ़्लो. इससे लोगों को अपने फ़ोन से सीधे Wear OS ऐप्लिकेशन ढूंढने में मदद मिलती है.
Garan Jenkin • पढ़ने में 3 मिनट लगेंगे
अप-टू-डेट रहें
Android डेवलपमेंट से जुड़ी नई जानकारी, हर हफ़्ते अपने इनबॉक्स में पाएं.