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