Reddit ने परफ़ॉर्मेंस को बेहतर बनाने के लिए, R8 ऑप्टिमाइज़र का इस्तेमाल कैसे किया
4 मिनट में पढ़ें
आज के दौर में मोबाइल ऐप्लिकेशन का इस्तेमाल बहुत बढ़ गया है. ऐसे में, उपयोगकर्ता को बेहतर अनुभव देना सिर्फ़ एक सुविधा नहीं, बल्कि एक ज़रूरत है. पेज लोड होने में ज़्यादा समय लगने, इंटरफ़ेस के काम न करने, और पेज के बार-बार बदलते रहने से, उपयोगकर्ता जुड़ाव और उन्हें अपने साथ जोड़े रखने में काफ़ी समस्याएं आ सकती हैं. Android Developer Relations टीम के साथ काम करते समय, Reddit की इंजीनियरिंग टीम ने अपने ऐप्लिकेशन का आकलन करने के लिए, ऐप्लिकेशन की परफ़ॉर्मेंस के स्कोर का इस्तेमाल किया. परफ़ॉर्मेंस का आकलन करने के बाद, उन्हें पता चला कि ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाया जा सकता है. इसके बाद, उन्होंने Android ऐप्लिकेशन ऑप्टिमाइज़र R8 की पूरी क्षमता का इस्तेमाल करने के लिए ज़रूरी कदम उठाए. इस पहल की वजह से, ऐप्लिकेशन के खुलने में लगने वाले समय में काफ़ी सुधार हुआ. साथ ही, स्लो या फ़्रीज़ हुए फ़्रेम और एएनआर की संख्या में कमी आई. इसके अलावा, Play Store पर ऐप्लिकेशन की रेटिंग में भी बढ़ोतरी हुई. इस केस स्टडी में बताया गया है कि Reddit ने ये शानदार नतीजे कैसे हासिल किए.
R8 Optimizer ने Reddit की कैसे मदद की
R8 ऑप्टिमाइज़र, Android पर परफ़ॉर्मेंस ऑप्टिमाइज़ेशन के लिए एक बुनियादी टूल है. ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाने के लिए, कई कदम उठाए जाते हैं.आइए, सबसे असरदार कदमों पर एक नज़र डालते हैं.
- किसी ऐप्लिकेशन का साइज़ कम करने के लिए, ट्री शेकिंग सबसे ज़रूरी तरीका है. यहां, ऐप्लिकेशन की डिपेंडेंसी और ऐप्लिकेशन से इस्तेमाल न होने वाले कोड को हटाया जाता है.
- मेथड इनलाइनिंग, मेथड कॉल को असल कोड से बदल देती है. इससे ऐप्लिकेशन की परफ़ॉर्मेंस बेहतर हो जाती है.
- कोड को ज़्यादा छोटा बनाने के लिए, क्लास मर्ज करने और अन्य रणनीतियों का इस्तेमाल किया जाता है. इस चरण में, सोर्स कोड को इंसानों के पढ़ने लायक बनाने पर ध्यान नहीं दिया जाता. इसके बजाय, कंपाइल किए गए कोड को तेज़ी से काम करने लायक बनाने पर ध्यान दिया जाता है. इसलिए, इंटरफ़ेस या क्लास हैरारकी जैसे ऐब्स्ट्रैक्शन यहाँ काम के नहीं हैं और इन्हें हटा दिया जाएगा.
- पहचानकर्ता को छोटा करने की प्रोसेस में, क्लास, फ़ील्ड, और मेथड के नामों को छोटे और बेमतलब के नामों में बदल दिया जाता है. इसलिए, हो सकता है कि आपको
MyDataModelके बजाय, a नाम की क्लास दिखे. - संसाधन कम करने की सुविधा का इस्तेमाल करके, इस्तेमाल न होने वाले संसाधनों को हटाया जाता है. जैसे, एक्सएमएल फ़ाइलें और ड्रॉएबल. इससे ऐप्लिकेशन का साइज़ और कम हो जाता है.
R8 ऑप्टिमाइज़ेशन के मुख्य चरण
हार्ड डेटा से लेकर उपयोगकर्ता की संतुष्टि तक: प्रोडक्शन में सफलता की पहचान करना
Reddit ने ऐप्लिकेशन का नया वर्शन लॉन्च किया. इसके तुरंत बाद, उसे परफ़ॉर्मेंस के बेहतर नतीजे मिले. Reddit ने Android Vitals और Crashlytics का इस्तेमाल करके, असली डिवाइसों पर परफ़ॉर्मेंस मेट्रिक कैप्चर कीं. इससे उसे नई रिलीज़ की तुलना पिछले वर्शन से करने में मदद मिली.
R8 ने Reddit के ऐप्लिकेशन की परफ़ॉर्मेंस को कैसे बेहतर बनाया
टीम ने पाया कि कोल्ड स्टार्टअप में 40% की कमी आई है, "ऐप्लिकेशन काम नहीं कर रहा" (एएनआर) गड़बड़ियों में 30% की कमी आई है, फ़्रेम रेंडरिंग में 25% का सुधार हुआ है, और ऐप्लिकेशन के साइज़ में 14% की कमी आई है.
ये सुधार, लोगों की संतुष्टि के लिए ज़रूरी हैं. तेज़ी से शुरू होने का मतलब है कि आपको कम इंतज़ार करना पड़ेगा और कॉन्टेंट को तुरंत ऐक्सेस किया जा सकेगा. एएनआर की संख्या कम होने से, ऐप्लिकेशन ज़्यादा भरोसेमंद और बेहतर तरीके से काम करता है. इससे उपयोगकर्ताओं को परेशानी कम होती है. फ़्रेम को बेहतर तरीके से रेंडर करने से, यूज़र इंटरफ़ेस (यूआई) में होने वाली रुकावटें दूर हो जाती हैं. इससे स्क्रोलिंग और ऐनिमेशन, ज़्यादा बेहतर और तेज़ी से काम करते हैं. तकनीकी तौर पर हुए इस सकारात्मक बदलाव का असर, लोगों की प्रतिक्रियाओं में भी साफ़ तौर पर दिख रहा था.
ऑप्टिमाइज़ेशन के सफल होने के बारे में लोगों की संतुष्टि के इंडिकेटर, सीधे तौर पर Google Play Store पर दिख रहे थे. R8-ऑप्टिमाइज़ किए गए वर्शन को रोल आउट करने के बाद, टीम ने देखा कि उपयोगकर्ता की दिलचस्पी और जुड़ाव में काफ़ी बदलाव हुआ है.
ड्रू हेवनर: "R8 की पूरी क्षमता वाले टूल को दो हफ़्ते से भी कम समय में चालू करना"
सबसे खास बात यह है कि यह काम, फ़ोकस के साथ किया गया. Reddit के स्टाफ़ सॉफ़्टवेयर इंजीनियर, ड्रू हेवनर ने इस पहल पर काम किया. उन्होंने बताया कि R8 की पूरी क्षमता को चालू करने के लिए, बदलावों को लागू करने में दो हफ़्तों से कम समय लगा.
फ़ायदे की पुष्टि करना: मैक्रोबेंचमार्क के साथ ज़्यादा जानकारी
असली दुनिया में हुए बड़े बदलावों को देखने के बाद, Reddit की इंजीनियरिंग टीम और Google की Android डेवलपर रिलेशंस टीम ने, फ़ायदों की वैज्ञानिक पुष्टि करने के लिए, बेंचमार्क की जांच की. साथ ही, बेहतर बनाने के लिए एक्सपेरिमेंट किए. इस विश्लेषण के लिए, 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 की परफ़ॉर्मेंस में हुए सुधार
कस्टम मैक्रोबेंचमार्क ट्रेस सेक्शन मेट्रिक की मदद से, जेआईटी कंपाइलेशन के समय को इस तरह मेज़र किया जा सकता है:
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 मिनट लगेंगे -
केस स्टडीटीम ने एआई-नेटिव यूज़र इंटरफ़ेस (यूआई) कोडबेस बनाया है. यह ओरिजनल कोडबेस से 50% छोटा है. साथ ही, इससे एआई एजेंट को टास्क पूरा करने में लगने वाला समय 35% कम हो गया है. इसके अलावा, इंजीनियर और एजेंट के बीच होने वाले इंटरैक्शन में 32% की कमी आई है और टोकन की लागत में 33% की कमी आई है.
Pavlo Stavytskyi, Rebecca Franks • पढ़ने में 11 मिनट लगेंगे -
केस स्टडीWhatsApp, दुनिया का सबसे बड़ा मैसेजिंग प्लैटफ़ॉर्म है. यह दुनिया भर में अरबों लोगों को अपनी सेवाएं देता है. यह अलग-अलग देशों/इलाकों के लोगों के लिए, बातचीत करने का डिफ़ॉल्ट टूल है. यह उपयोगकर्ताओं को निजी, भरोसेमंद, और सुरक्षित मैसेजिंग की सुविधा देता है.
Niharika Arora, Tracy Agyemang, Mayank Jain • 8 मिनट में पढ़ें
Android डेवलपमेंट से जुड़ी नई अहम जानकारी, हर हफ़्ते अपने इनबॉक्स में पाएं.