Reddit ने परफ़ॉर्मेंस को बेहतर बनाने के लिए, R8 ऑप्टिमाइज़र का इस्तेमाल कैसे किया
पढ़ने में 4 मिनट लगेंगे
आज के दौर में, मोबाइल ऐप्लिकेशन का इस्तेमाल बहुत बढ़ गया है. ऐसे में, उपयोगकर्ता को बेहतर अनुभव देना सिर्फ़ एक सुविधा नहीं, बल्कि एक ज़रूरत है. पेज लोड होने में ज़्यादा समय लगना, इंटरफ़ेस का काम न करना, और ऐप्लिकेशन का ठीक से काम न करना, उपयोगकर्ता जुड़ाव और उन्हें बनाए रखने में बड़ी समस्याएं पैदा कर सकता है. Android Developer Relations टीम के साथ काम करते समय, Reddit की इंजीनियरिंग टीम ने अपने ऐप्लिकेशन का आकलन करने के लिए, ऐप्लिकेशन परफ़ॉर्मेंस स्कोर का इस्तेमाल किया. परफ़ॉर्मेंस का आकलन करने के बाद, उन्हें पता चला कि ऐप्लिकेशन की परफ़ॉर्मेंस को काफ़ी हद तक बेहतर बनाया जा सकता है. इसके बाद, उन्होंने Android ऐप्लिकेशन ऑप्टिमाइज़र R8 की पूरी क्षमता का इस्तेमाल करने के लिए ज़रूरी कदम उठाए. इस पहल की वजह से, ऐप्लिकेशन के खुलने में लगने वाले समय में काफ़ी सुधार हुआ. साथ ही, स्लो या फ़्रीज़ हुए फ़्रेम और एएनआर के मामलों में कमी आई. इसके अलावा, Play Store पर ऐप्लिकेशन की रेटिंग में भी बढ़ोतरी हुई. इस केस स्टडी में बताया गया है कि Reddit ने ये शानदार नतीजे कैसे हासिल किए.
R8 ऑप्टिमाइज़र ने Reddit की कैसे मदद की
R8 ऑप्टिमाइज़र, Android पर परफ़ॉर्मेंस ऑप्टिमाइज़ेशन के लिए एक बुनियादी टूल है. ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाने के लिए, कई चरणों को पूरा करना होता है.आइए, सबसे अहम चरणों पर एक नज़र डालते हैं.
- ऐप्लिकेशन का साइज़ कम करने के लिए, ट्री शेकिंग सबसे ज़रूरी तरीका है. यहां, ऐप्लिकेशन की डिपेंडेंसी और ऐप्लिकेशन से इस्तेमाल न होने वाले कोड को हटा दिया जाता है.
- मेथड इनलाइनिंग, मेथड कॉल को असल कोड से बदल देती है. इससे ऐप्लिकेशन की परफ़ॉर्मेंस बेहतर हो जाती है.
- कोड को ज़्यादा कॉम्पैक्ट बनाने के लिए, क्लास मर्ज करने और अन्य रणनीतियों का इस्तेमाल किया जाता है. इस चरण में, सोर्स कोड को इंसानों के पढ़ने लायक बनाने पर ध्यान नहीं दिया जाता. इसके बजाय, कंपाइल किए गए कोड को तेज़ी से काम करने लायक बनाने पर ध्यान दिया जाता है. इसलिए, इंटरफ़ेस या क्लास हैरारकी जैसे ऐब्सट्रैक्शन यहां काम के नहीं हैं और इन्हें हटा दिया जाएगा.
- पहचानकर्ता को छोटा करना, क्लास, फ़ील्ड, और मेथड के नामों को छोटे और बेमतलब के नामों में बदल देता है. इसलिए, हो सकता है कि आपको
MyDataModelके बजाय, a नाम की क्लास दिखे. - संसाधन कम करने की सुविधा का इस्तेमाल करके, इस्तेमाल न होने वाले संसाधनों को हटाया जाता है. जैसे, एक्सएमएल फ़ाइलें और ड्रॉएबल. इससे ऐप्लिकेशन का साइज़ और कम हो जाता है.
R8 ऑप्टिमाइज़ेशन के मुख्य चरण
हार्ड डेटा से लेकर उपयोगकर्ता की संतुष्टि तक: प्रोडक्शन में सफलता की पहचान करना
Reddit ने ऐप्लिकेशन का नया वर्शन लॉन्च किया. इसके तुरंत बाद, उसे परफ़ॉर्मेंस के बेहतर नतीजे मिले. Reddit ने Android की ज़रूरी जानकारी और Crashlytics का इस्तेमाल किया. इससे उसे असली उपयोगकर्ताओं के साथ-साथ असली डिवाइसों पर परफ़ॉर्मेंस मेट्रिक कैप्चर करने में मदद मिली. इससे वह नई रिलीज़ की तुलना पिछले वर्शन से कर सका.
R8 ने Reddit के ऐप्लिकेशन की परफ़ॉर्मेंस को कैसे बेहतर बनाया
टीम ने पाया कि ऐप्लिकेशन 40% तेज़ी से कोल्ड स्टार्टअप हो रहा है. साथ ही, "ऐप्लिकेशन काम नहीं कर रहा" (एएनआर) वाली गड़बड़ियों में 30% की कमी आई है, फ़्रेम रेंडरिंग में 25% का सुधार हुआ है, और ऐप्लिकेशन के साइज़ में 14% की कमी आई है.
ये सुधार, लोगों की संतुष्टि के लिए ज़रूरी हैं. तेज़ी से शुरू होने का मतलब है कि आपको कम इंतज़ार करना पड़ेगा और कॉन्टेंट को तुरंत ऐक्सेस किया जा सकेगा. ANR की संख्या कम होने से, ऐप्लिकेशन ज़्यादा भरोसेमंद और स्थिर होता है. इससे लोगों को बेहतर अनुभव मिलता है. फ़्रेम को बेहतर तरीके से रेंडर करने से, यूज़र इंटरफ़ेस (यूआई) में होने वाली गड़बड़ियां दूर हो जाती हैं. इससे स्क्रोलिंग और ऐनिमेशन, आसानी से और तेज़ी से काम करते हैं. तकनीकी तौर पर हुए इस फ़ायदे का असर, लोगों की भावनाओं पर भी साफ़ तौर पर दिखा.
ऑप्टिमाइज़ेशन के सफल होने के बारे में, उपयोगकर्ताओं की संतुष्टि से जुड़े इंडिकेटर सीधे तौर पर Google Play Store पर दिख रहे थे. R8-ऑप्टिमाइज़ किए गए वर्शन को रोल आउट करने के बाद, टीम ने देखा कि उपयोगकर्ताओं की दिलचस्पी और जुड़ाव में काफ़ी बदलाव हुआ है.
ड्रू हेवनर: "R8 की पूरी क्षमता वाले टूल को दो हफ़्ते से भी कम समय में चालू करना"
सबसे अहम बात यह है कि यह काम, फ़ोकस के साथ किया गया. Reddit के स्टाफ़ सॉफ़्टवेयर इंजीनियर, ड्रू हेवनर ने इस पहल पर काम किया. उन्होंने बताया कि R8 की पूरी क्षमता को चालू करने के लिए, बदलावों को लागू करने में दो हफ़्ते से भी कम समय लगा.
फ़ायदे की पुष्टि करना: मैक्रोबेंचमार्क के साथ ज़्यादा जानकारी
असल दुनिया में हुए बड़े बदलावों को देखने के बाद, Reddit की इंजीनियरिंग टीम और Google की Android Developer Relations टीम ने, फ़ायदों की पुष्टि करने के लिए विस्तृत बेंचमार्क तैयार किए. साथ ही, बेहतर बनाने के लिए एक्सपेरिमेंट किए. इस विश्लेषण के लिए, Reddit की इंजीनियरिंग टीम ने अपने ऐप्लिकेशन के दो वर्शन उपलब्ध कराए: एक वर्शन में ऑप्टिमाइज़ेशन नहीं किया गया था, जबकि दूसरे वर्शन में R8 और परफ़ॉर्मेंस ऑप्टिमाइज़ेशन के लिए दो और बुनियादी टूल इस्तेमाल किए गए थे: बेसलाइन प्रोफ़ाइलें और स्टार्टअप प्रोफ़ाइलें.
बेसलाइन प्रोफ़ाइलें, Just in Time (JIT) कंपाइलेशन के चरणों को उपयोगकर्ता के डिवाइसों से हटाकर डेवलपर के कंप्यूटर पर ले जाती हैं. जनरेट किए गए, कंपाइल किए गए, और पहले से तैयार (एओटी) कोड से, स्टार्टअप में लगने वाले समय और रेंडरिंग से जुड़ी समस्याओं को कम किया जा सकता है.
जब किसी ऐप्लिकेशन को पैकेज किया जाता है, तो d8 dexer क्लास और तरीकों को लेता है और आपके ऐप्लिकेशन की classes.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% पहले ब्राउज़िंग शुरू कर पाए. ऑप्टिमाइज़ किए गए ऐप्लिकेशन में, जस्ट इन टाइम (जेआईटी) कंपाइलेशन की घटनाओं में दो-तिहाई की कमी और जेआईटी कंपाइलेशन के समय में एक-तिहाई की कमी भी देखी गई. फ़्रेम रेंडरिंग में सुधार हुआ. इससे, बेंचमार्क की गई उपयोगकर्ता गतिविधि के दौरान 19% ज़्यादा फ़्रेम रेंडर हुए. आखिरकार, ऐप्लिकेशन का साइज़ एक तिहाई से ज़्यादा कम हो गया.
Reddit की परफ़ॉर्मेंस में सुधार
इस तरह की कस्टम मैक्रोबेंचमार्क ट्रेस सेक्शन मेट्रिक की मदद से, 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 के उदाहरण का पालन करें
Reddit ने R8 का इस्तेमाल करके काफ़ी सफलता हासिल की है. यह डेवलपमेंट टीम के लिए एक बेहतरीन केस स्टडी है. इससे उन्हें अपने ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाने में मदद मिलेगी. इसके लिए, उन्हें ज़्यादा मेहनत भी नहीं करनी पड़ेगी. तकनीकी सुधारों और उसके बाद उपयोगकर्ता संतुष्टि में हुई बढ़ोतरी के बीच सीधा संबंध है. इससे परफ़ॉर्मेंस ऑप्टिमाइज़ेशन की अहमियत का पता चलता है.
इस केस स्टडी में बताए गए ब्लूप्रिंट को फ़ॉलो करके, दूसरे डेवलपर भी इसी तरह के फ़ायदे पा सकते हैं. जैसे, ऐप्लिकेशन परफ़ॉर्मेंस स्कोर जैसे टूल का इस्तेमाल करके, मौके ढूंढना, R8 की ऑप्टिमाइज़ेशन की पूरी क्षमता को चालू करना, असल डेटा को मॉनिटर करना, और बेंचमार्क का इस्तेमाल करके पुष्टि करना और बेहतर तरीके से समझना.
अपने ऐप्लिकेशन में R8 का इस्तेमाल शुरू करने के लिए, R8 ऑप्टिमाइज़र को चालू करने, कॉन्फ़िगर करने, और उससे जुड़ी समस्याओं को हल करने के बारे में आधिकारिक दस्तावेज़ और दिशा-निर्देश देखें. इन्हें हाल ही में अपडेट किया गया है.
-
केस स्टडीMonzo, यूनाइटेड किंगडम का एक डिजिटल बैंक है. इसके 1.5 करोड़ ग्राहक हैं और इनकी संख्या लगातार बढ़ रही है. ऐप्लिकेशन के बढ़ने के साथ-साथ, इंजीनियरिंग टीम ने ऐप्लिकेशन के शुरू होने में लगने वाले समय को सुधार के लिए एक अहम क्षेत्र के तौर पर पहचाना. हालांकि, टीम को चिंता थी कि इसके लिए, उन्हें अपने कोडबेस में काफ़ी बदलाव करने होंगे.
Ben Weiss, Tracy Agyemang • दो मिनट में पढ़ें -
केस स्टडीपरफ़ॉर्मेंस में गिरावट की समस्या को दोहराना बहुत मुश्किल होता है. इसलिए, यह मोबाइल डेवलपर के लिए एक बड़ी समस्या है.
Alice Yuan, Arti Arutiunov, Nikita Ogorodnikov • पढ़ने में 4 मिनट लगेंगे -
केस स्टडीहाल ही में, FotMob को Wear OS पर इंस्टॉल करने वाले लोगों की संख्या में एक दिन में सबसे ज़्यादा बढ़ोतरी देखने को मिली. यह बढ़ोतरी, पिछले पांच सालों में एक दिन में हुई सबसे ज़्यादा बढ़ोतरी थी. यह बढ़ोतरी, रोज़ाना के औसत से दो से तीन गुना ज़्यादा थी. इसका सीक्रेट क्या है? क्रॉस-डिवाइस इंस्टॉलेशन का आसान तरीका. इससे लोग सीधे अपने फ़ोन से Wear OS ऐप्लिकेशन ढूंढ सकते हैं.
Garan Jenkin • तीन मिनट में पढ़ा जा सकता है
Android डेवलपमेंट से जुड़ी नई अहम जानकारी, हर हफ़्ते अपने इनबॉक्स में पाएं.