Jetpack Compose, यूज़र इंटरफ़ेस (यूआई) के डेवलपमेंट को तेज़ करता है और Android डेवलपमेंट को बेहतर बनाता है. हालांकि, इस बात का ध्यान रखें कि किसी मौजूदा ऐप्लिकेशन में 'लिखें' जोड़ने से, ऐप्लिकेशन के APK का साइज़, बिल्ड, और रनटाइम की परफ़ॉर्मेंस जैसी मेट्रिक पर किस तरह असर पड़ सकता है.
APK का साइज़ और बिल्ड होने में लगने वाला समय
इस सेक्शन में, Sunflower सैंपल ऐप्लिकेशन के उदाहरण के ज़रिए, APK के साइज़ और बिल्ड में लगने वाले समय पर पड़ने वाले असर के बारे में बताया गया है. यह ऐप्लिकेशन, View पर आधारित ऐप्लिकेशन को Compose में माइग्रेट करने के सबसे सही तरीकों के बारे में बताता है.
APK का साइज़
अपने प्रोजेक्ट में लाइब्रेरी जोड़ने से, उसके APK का साइज़ बढ़ जाता है. यहां दिए गए नतीजे, हर प्रोजेक्ट के छोटे किए गए रिलीज़ APK के लिए हैं. इनमें रिसॉर्स और कोड को छोटा करने की सुविधा चालू है. साथ ही, R8 के फ़ुल मोड का इस्तेमाल किया गया है और APK विश्लेषक का इस्तेमाल करके मेज़र किया गया है.
सिर्फ़ व्यू | मिला-जुला व्यू और लिखना | सिर्फ़ लिखने की अनुमति | |
---|---|---|---|
डाउनलोड आकार | 2,252 केबी | 3,034 केबी | 2,966 केबी |
Sunflower में Compose को पहली बार जोड़ने पर, APK का साइज़ 2,252 केबी से बढ़कर 3,034 केबी हो गया. इसका मतलब है कि APK का साइज़ 782 केबी बढ़ा. जनरेट किए गए APK में, व्यू और Compose के मिक्स के साथ यूज़र इंटरफ़ेस (यूआई) बिल्ड शामिल था. Sunflower में अतिरिक्त डिपेंडेंसी जोड़ी गई हैं, इसलिए इसकी साइज़ में बढ़ोतरी हो सकती है.
इसके उलट, जब Sunflower को सिर्फ़ Compose वाले ऐप्लिकेशन में माइग्रेट किया गया, तो APK का साइज़ 3,034 केबी से घटकर 2,966 केबी हो गया. इसका मतलब है कि साइज़ में 68 केबी की कमी आई. यह कमी, AppCompat
और ConstraintLayout
जैसी इस्तेमाल न होने वाली व्यू डिपेंडेंसी हटाने की वजह से आई थी.
बिल्ड प्रोसेस में लगने वाला समय
Compose जोड़ने से, आपके ऐप्लिकेशन के बिल्ड होने में लगने वाला समय बढ़ जाता है. ऐसा इसलिए होता है, क्योंकि Compose कंपाइलर आपके ऐप्लिकेशन में मौजूद कॉम्पोज़ेबल को प्रोसेस करता है. यहां दिए गए नतीजे, स्टैंडअलोन gradle-profiler
टूल का इस्तेमाल करके पाए गए हैं. यह टूल, बिल्ड को कई बार चलाता है, ताकि Sunflower के डीबग बिल्ड की अवधि के लिए, बिल्ड होने में लगने वाला औसत समय पता चल सके:
gradle-profiler --benchmark --project-dir . :app:assembleDebug
सिर्फ़ व्यू | मिला-जुला व्यू और लिखना | सिर्फ़ लिखना | |
---|---|---|---|
बिल्ड प्रोसेस में लगने वाला औसत समय | 299.47 मिलीसेकंड | 399.09 मिलीसेकंड | 342.16 मिलीसेकंड |
Compose में पहली बार Sunflower जोड़ने पर, ऐप्लिकेशन बनाने का औसत समय 299 मि॰से॰ से बढ़कर 399 मि॰से॰ हो गया. यह संख्या 100 मि॰से॰ की बढ़ोतरी हुई. प्रोजेक्ट में बताए गए Compose कोड को बदलने के लिए, Compose कंपाइलर को कुछ और काम करने पड़ते हैं. इस वजह से, प्रोजेक्ट को कंपाइल होने में ज़्यादा समय लगता है.
इसके उलट, कंपोज़ पर सनफ़्लावर का माइग्रेशन पूरा होने पर, औसत बिल्ड समय घटकर 342 मि॰से॰ हो गया, जो कि 57 मि॰से॰ की कमी थी. इस कमी की कई वजहें हो सकती हैं. जैसे, बिल्ड में लगने वाला समय कम करना, जैसे कि डेटा बाइंडिंग हटाना, kapt का इस्तेमाल करने वाली डिपेंडेंसी माइग्रेट करना, और कई डिपेंडेंसी को उनके सबसे नए वर्शन पर अपडेट करना.
खास जानकारी
Compose का इस्तेमाल करने से, आपके ऐप्लिकेशन के APK का साइज़ बढ़ जाएगा. साथ ही, Compose कोड को कंपाइल करने की प्रोसेस की वजह से, ऐप्लिकेशन को बिल्ड करने में लगने वाला समय भी बढ़ जाएगा. हालांकि, इन फ़ायदों और Compose के फ़ायदों को एक साथ देखना ज़रूरी है. खास तौर पर, Compose का इस्तेमाल करने पर डेवलपर की प्रोडक्टिविटी बढ़ने के बारे में. उदाहरण के लिए, Play Store की टीम को पता चला है कि यूज़र इंटरफ़ेस (यूआई) लिखने के लिए, ज़्यादा कोड की ज़रूरत नहीं होती. कभी-कभी तो 50%तक कम कोड की ज़रूरत होती है. इससे कोड की परफ़ॉर्मेंस बेहतर होती है और उसे मैनेज करना आसान हो जाता है.
Compose for Teams का इस्तेमाल करना लेख में, ज़्यादा केस स्टडी पढ़ी जा सकती हैं.
रनटाइम की परफ़ॉर्मेंस
इस सेक्शन में, Jetpack Compose में रनटाइम परफ़ॉर्मेंस से जुड़े विषयों के बारे में बताया गया है. इससे आपको यह समझने में मदद मिलेगी कि Jetpack Compose की परफ़ॉर्मेंस, व्यू सिस्टम की परफ़ॉर्मेंस से कैसे अलग है और इसे कैसे मेज़र किया जा सकता है.
स्मार्ट तरीके से फिर से कॉम्पोज़ करना
जब यूज़र इंटरफ़ेस के कुछ हिस्से अमान्य होते हैं, तो Compose सिर्फ़ उन हिस्सों को फिर से कॉम्पोज़ करने की कोशिश करता है जिन्हें अपडेट करना ज़रूरी है. इस बारे में ज़्यादा जानने के लिए, composables के लाइफ़साइकल और Jetpack Compose के चरणों के दस्तावेज़ पढ़ें.
बेसलाइन प्रोफ़ाइलें
बेसलाइन प्रोफ़ाइलें, उपयोगकर्ताओं के सामान्य सफ़र को तेज़ करने का एक बेहतरीन तरीका है. अपने ऐप्लिकेशन में बेसलाइन प्रोफ़ाइल शामिल करने से, कोड को पहली बार लॉन्च करने के मुकाबले, कोड को लागू करने की स्पीड में करीब 30% की बढ़ोतरी हो सकती है. ऐसा, शामिल किए गए कोड पाथ के लिए, इंटरप्रिटेशन और जस्ट-इन-टाइम (JIT) कंपाइलेशन चरणों को छोड़कर किया जा सकता है.
Jetpack Compose लाइब्रेरी में, अपनी बेसलाइन प्रोफ़ाइल शामिल होती है. साथ ही, अपने ऐप्लिकेशन में Compose का इस्तेमाल करने पर, आपको ये ऑप्टिमाइज़ेशन अपने-आप मिल जाते हैं. हालांकि, इन ऑप्टिमाइज़ेशन का असर सिर्फ़ Compose लाइब्रेरी के कोड पाथ पर पड़ता है. इसलिए, हमारा सुझाव है कि आप अपने ऐप्लिकेशन में बेसलाइन प्रोफ़ाइल जोड़ें, ताकि Compose के बाहर के कोड पाथ को कवर किया जा सके.
View सिस्टम के साथ तुलना
Jetpack Compose में, View सिस्टम के मुकाबले कई सुधार किए गए हैं. इन सुधारों के बारे में, नीचे दिए गए सेक्शन में बताया गया है.
हर चीज़ व्यू का विस्तार करती है
स्क्रीन पर दिखने वाले हर View
, जैसे कि TextView
, Button
या
ImageView
के लिए, मेमोरी का ऐलोकेशन, साफ़ तौर पर स्टेटस ट्रैकिंग, और अलग-अलग
कॉलबैक की ज़रूरत होती है, ताकि सभी इस्तेमाल के उदाहरणों के साथ काम किया जा सके. इसके अलावा, कस्टम View
के मालिक को साफ़ तौर पर तर्क लागू करना होगा, ताकि ज़रूरी न होने पर उसे फिर से ड्रॉ होने से रोका जा सके. उदाहरण के लिए, बार-बार होने वाली डेटा प्रोसेसिंग के मामले में.
Jetpack Compose, इस समस्या को हल करने के लिए कुछ तरीके अपनाता है. ड्रॉइंग व्यू के लिए, Compose में साफ़ तौर पर अपडेट किए जा सकने वाले ऑब्जेक्ट नहीं होते. यूज़र इंटरफ़ेस (यूआई) एलिमेंट, कंपोज़ेबल फ़ंक्शन हैं, जिनकी जानकारी को कंपोज़िशन में बार-बार इस्तेमाल किया जा सकता है. इससे, किसी दिए गए View
टाइप के सभी एक्सटेंशन के लिए, साफ़ तौर पर स्टेटस ट्रैकिंग, मेमोरी ऐलोकेशन, और कॉलबैक की ज़रूरत नहीं होती. इसके बजाय, सिर्फ़ उन कॉम्पोज़ेबल के लिए इनकी ज़रूरत होती है जिन्हें इन सुविधाओं की ज़रूरत होती है.
इसके अलावा, Compose में स्मार्ट रीकंपोज़िशन की सुविधा भी मिलती है. इसकी मदद से, अगर आपको कोई बदलाव नहीं करना है, तो पहले से तैयार किए गए नतीजे को फिर से चलाया जा सकता है.
एक से ज़्यादा लेआउट पास
पारंपरिक ViewGroups के मेज़र और लेआउट एपीआई में बहुत सारी जानकारी होती है. इस वजह से, उन्हें कई लेआउट पास की ज़रूरत पड़ती है. अगर व्यू हैरारकी में खास नेस्ट किए गए पॉइंट पर ये कई लेआउट पास किए गए हैं, तो इनकी वजह से एक्सपोनेन्शियल काम कर सकता है.
Jetpack Compose अपने एपीआई समझौते की मदद से, सभी लेआउट कंपोज़ेबल के लिए एक लेआउट पास लागू करता है. इससे Compose, डीप यूआई ट्री को बेहतर तरीके से मैनेज कर पाता है. अगर कई मेज़रमेंट की ज़रूरत हो, तो 'लिखें' सुविधा में इंट्रिमिनिक मेज़रमेंट होते हैं.
ऐप्लिकेशन के शुरू होने की परफ़ॉर्मेंस देखना
किसी खास लेआउट को पहली बार दिखाते समय, व्यू सिस्टम को एक्सएमएल लेआउट को फ़्लोरेट करना पड़ता है. यह समय, Jetpack Compose में सेव किया जाता है, क्योंकि लेआउट को Kotlin में लिखा जाता है और आपके ऐप्लिकेशन के बाकी हिस्सों की तरह ही कंपाइल किया जाता है.
Compose का बेंचमार्क
Jetpack Compose 1.0 में, debug
और release
मोड में किसी ऐप्लिकेशन की परफ़ॉर्मेंस में काफ़ी अंतर होता है. सही समय चुनने के लिए, अपने ऐप्लिकेशन की प्रोफ़ाइल बनाते समय, हमेशा
debug
के बजाय release
बिल्ड का इस्तेमाल करें.
यह देखने के लिए कि आपका Jetpack Compose कोड कैसा परफ़ॉर्म कर रहा है, Jetpack Macrobenchmark लाइब्रेरी का इस्तेमाल किया जा सकता है. Jetpack Compose के साथ इसका इस्तेमाल करने का तरीका जानने के लिए, MacrobenchmarkSample प्रोजेक्ट देखें.
Jetpack Compose की टीम, किसी भी तरह के रेग्रेशन का पता लगाने के लिए, मैक्रोबेंचमार्क का भी इस्तेमाल करती है. उदाहरण के लिए, रीग्रेशन को ट्रैक करने के लिए, लेज़ी कॉलम के लिए बेंचमार्क और उसका डैशबोर्ड देखें.
प्रोफ़ाइल इंस्टॉल करने के लिए कंपोज़ करें
Jetpack Compose एक अनबंडल की गई लाइब्रेरी है. इसलिए, इसे Zygote से कोई फ़ायदा नहीं मिलता. Zygote, व्यू सिस्टम के यूआई टूलकिट क्लास और ड्रॉबल को पहले से लोड करता है. Jetpack Compose 1.0, रिलीज़ के लिए प्रोफ़ाइल इंस्टॉलेशन का इस्तेमाल करता है. प्रोफ़ाइल इंस्टॉलर की मदद से, ऐप्लिकेशन में ज़रूरी कोड को इंस्टॉलेशन के समय पहले से ही (एओटी) संकलित किया जा सकता है. Compose में प्रोफ़ाइल के इंस्टॉलेशन के नियमों को शिप किया जाता है. इन नियमों से, Compose ऐप्लिकेशन को शुरू होने में लगने वाला समय और ऐप्लिकेशन में होने वाली रुकावट कम हो जाती है.
आपके लिए सुझाव
- ध्यान दें: JavaScript बंद होने पर लिंक टेक्स्ट दिखता है
- ध्यान देने वाली अन्य बातें
- व्यू में 'लिखें' सुविधा का इस्तेमाल करना
- Scroll