Reddit ने परफ़ॉर्मेंस में बड़े सुधार करने के लिए, R8 ऑप्टिमाइज़र का इस्तेमाल कैसे किया
पढ़ने में 4 मिनट लगेंगे
आज के दौर में, मोबाइल ऐप्लिकेशन का इस्तेमाल तेज़ी से बढ़ रहा है. ऐसे में, लोगों को बेहतर अनुभव देना सिर्फ़ एक सुविधा नहीं, बल्कि ज़रूरत बन गई है. ऐप्लिकेशन के लोड होने में ज़्यादा समय लगने, इंटरफ़ेस के रिस्पॉन्स न देने, और ऐप्लिकेशन के बार-बार क्रैश होने से, लोगों की दिलचस्पी और जुड़ाव पर बुरा असर पड़ सकता है. Android डेवलपर रिलेशंस टीम के साथ काम करते हुए, Reddit की इंजीनियरिंग टीम ने अपने ऐप्लिकेशन की परफ़ॉर्मेंस का आकलन करने के लिए, ऐप्लिकेशन परफ़ॉर्मेंस स्कोर का इस्तेमाल किया. परफ़ॉर्मेंस का आकलन करने के बाद, उन्हें पता चला कि इसमें काफ़ी सुधार किया जा सकता है. इसके बाद, उन्होंने 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 से ऑप्टिमाइज़ किया गया वर्शन रोल आउट करने के बाद, टीम ने लोगों की प्रतिक्रियाओं और जुड़ाव में बड़ा और पॉज़िटिव बदलाव देखा.
ड्रू हेवनर: "R8 की पूरी क्षमता का इस्तेमाल करने के लिए, दो हफ़्तों से भी कम समय लगा"
सबसे अच्छी बात यह है कि यह काम, कम समय में किया गया. Reddit के स्टाफ़ सॉफ़्टवेयर इंजीनियर ड्रू हेवनर ने इस पहल पर काम किया. उन्होंने बताया कि R8 की पूरी क्षमता का इस्तेमाल करने के लिए, बदलावों को लागू करने में दो हफ़्तों से भी कम समय लगा.
फ़ायदों की पुष्टि करना: मैक्रो बेंचमार्क की मदद से डीप डाइव करना
असल में मिले बड़े सुधारों को देखने के बाद, Reddit की इंजीनियरिंग टीम और Google की Android डेवलपर रिलेशंस टीम ने, फ़ायदों की वैज्ञानिक तरीके से पुष्टि करने और ऑप्टिमाइज़ेशन को और बेहतर बनाने के लिए, विस्तृत बेंचमार्क किए. इस विश्लेषण के लिए, 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 मिनट लगेंगे -
केस स्टडीज़्यादातर Android ऐप्लिकेशन, Kotlin को अपनी मुख्य भाषा के तौर पर अपना रहे हैं. ऐसे में, kotlinx.coroutines, एसिंक्रोनस प्रोग्रामिंग के लिए एक डिफ़ॉल्ट स्टैंडर्ड बन गया है. यह लाइब्रेरी, Kotlin में एक साथ कई काम करने के लिए, अच्छी तरह से डिज़ाइन किया गया और स्ट्रक्चर्ड तरीका उपलब्ध कराती है.
Jonathan Starup, Andrei Shikov • पढ़ने में 7 मिनट लगेंगे -
केस स्टडीपरफ़ॉर्मेंस में होने वाली गड़बड़ियों को दोहराना मुश्किल होता है. इसलिए, ये गड़बड़ियां मोबाइल डेवलपर के लिए एक बड़ी चुनौती बन जाती हैं.
Alice Yuan, Arti Arutiunov, Nikita Ogorodnikov • पढ़ने में 4 मिनट लगेंगे
Android डेवलपमेंट से जुड़ी नई जानकारी, हर हफ़्ते अपने इनबॉक्स में पाएं.