स्टाइल की मदद से बेहतर परफ़ॉर्मेंस

Compose में स्टाइल, लेआउट और ड्रॉइंग फ़ेज़ में काम करती हैं. इससे, लैम्डा-आधारित मॉडिफ़ायर बनाने की ज़रूरत नहीं पड़ती, क्योंकि स्टाइल हमेशा कंपोज़िशन फ़ेज़ को छोड़ देती हैं.

Compose के फ़ेज़ और स्टाइल कहाँ लागू होती हैं
पहली इमेज. Compose के फ़ेज़ और स्टाइल कहां काम करती हैं.

मॉडिफ़ायर की तुलना में, परफ़ॉर्मेंस में सुधार तीन मुख्य ऑप्टिमाइज़ेशन की वजह से होता है:

  • फ़ेज़ शिफ़्ट करना: स्टाइल अक्सर ड्रॉ फ़ेज़ को टारगेट करती हैं. जब कोई वैल्यू बदलती है, तो Compose, पूरे रीकंपोज़िशन या रीलेआउट को ट्रिगर करने के बजाय, सिर्फ़ उस फ़ेज़ को अमान्य करता है जिस पर असर पड़ा है. जैसे, रीड्रॉ.
  • लेज़ी ऐलोकेशन: स्टाइल, ऐनिमेशन के संसाधन का ऐलोकेशन तब तक टालती हैं, जब तक कि कोई ऐनिमेशन असल में शुरू नहीं हो जाता. इससे, शुरुआती कंपोज़िशन के दौरान लगने वाला समय कम हो जाता है.
  • ऑब्जेक्ट ओवरहेड कम करना: चेन किए गए मॉडिफ़ायर, हर प्रॉपर्टी के लिए एक ऑब्जेक्ट ऐलोकेट करते हैं. जैसे, पैडिंग, बॉर्डर. स्टाइल, कई प्रॉपर्टी लागू करने के लिए एक ही लैम्डा का इस्तेमाल करती हैं. इससे, मेमोरी ऐलोकेशन काफ़ी कम हो जाता है. अगर किसी थीम में कोई स्टाइल तय की जाती है, तो उस लैम्डा को उस थीम का इस्तेमाल करने वाले सभी कॉम्पोनेंट के साथ शेयर किया जाता है.

यहां दी गई टेबल में, Compose 1.11.0-alpha06 के स्टाइल के लिए, परफ़ॉर्मेंस के इंटरनल परफ़ॉर्मेंस बेंचमार्क के उदाहरण के तौर पर नतीजे दिखाए गए हैं. इनकी तुलना, Compose में स्टाइल के बिना लागू करने से की गई है.

basic_box_border_change टेस्ट में, प्रॉपर्टी अपडेट के दौरान कई मॉडिफ़ायर ऑब्जेक्ट के ऐलोकेशन से बचने में, स्टाइल सिस्टम की ताकत को हाइलाइट किया गया है. इससे, ऐलोकेशन में करीब 77% और समय में करीब 59% की कमी आई है.

टेस्ट का तरीका

ब्यौरा

समय में बदलाव

ऐलोकेशन में बदलाव

basic_box_border_change

अपडेट की परफ़ॉर्मेंस मेज़र करने के लिए, Box के बॉर्डर का कलर टॉगल करता है.

-59.91%

-77.22%

input_state_basic_box

स्टाइल-आधारित होवर/फ़ोकस/प्रेस की स्थितियों की तुलना, मैन्युअल इंटरैक्शन की स्थिति के कलेक्शन से करता है.

-5.24%

-14.72%

basic_box

चेन किए गए पांच मॉडिफ़ायर के साथ, Box के शुरुआती कंपोज़िशन और लेआउट को मेज़र करता है.

-4.78%

-6.60%

basic_text

हार्डकोड की गई स्ट्रिंग वाले पांच BasicText कॉम्पोनेंट रेंडर करता है.

+0.62%

+2.41%

basic_text_provided_color

CompositionLocalProvider का इस्तेमाल करने के मुकाबले, स्टाइल के ज़रिए टेक्स्ट का कलर सेट करने की तुलना करता है.

+5.86%

+9.82%