Compose में स्टाइल, लेआउट और ड्रॉइंग फ़ेज़ में काम करती हैं. इससे, लैम्डा-आधारित मॉडिफ़ायर बनाने की ज़रूरत नहीं पड़ती, क्योंकि स्टाइल हमेशा कंपोज़िशन फ़ेज़ को छोड़ देती हैं.
मॉडिफ़ायर की तुलना में, परफ़ॉर्मेंस में सुधार तीन मुख्य ऑप्टिमाइज़ेशन की वजह से होता है:
- फ़ेज़ शिफ़्ट करना: स्टाइल अक्सर ड्रॉ फ़ेज़ को टारगेट करती हैं. जब कोई वैल्यू बदलती है, तो Compose, पूरे रीकंपोज़िशन या रीलेआउट को ट्रिगर करने के बजाय, सिर्फ़ उस फ़ेज़ को अमान्य करता है जिस पर असर पड़ा है. जैसे, रीड्रॉ.
- लेज़ी ऐलोकेशन: स्टाइल, ऐनिमेशन के संसाधन का ऐलोकेशन तब तक टालती हैं, जब तक कि कोई ऐनिमेशन असल में शुरू नहीं हो जाता. इससे, शुरुआती कंपोज़िशन के दौरान लगने वाला समय कम हो जाता है.
- ऑब्जेक्ट ओवरहेड कम करना: चेन किए गए मॉडिफ़ायर, हर प्रॉपर्टी के लिए एक ऑब्जेक्ट ऐलोकेट करते हैं. जैसे, पैडिंग, बॉर्डर. स्टाइल, कई प्रॉपर्टी लागू करने के लिए एक ही लैम्डा का इस्तेमाल करती हैं. इससे, मेमोरी ऐलोकेशन काफ़ी कम हो जाता है. अगर किसी थीम में कोई स्टाइल तय की जाती है, तो उस लैम्डा को उस थीम का इस्तेमाल करने वाले सभी कॉम्पोनेंट के साथ शेयर किया जाता है.
यहां दी गई टेबल में, Compose 1.11.0-alpha06 के स्टाइल के लिए, परफ़ॉर्मेंस के इंटरनल परफ़ॉर्मेंस बेंचमार्क के उदाहरण के तौर पर नतीजे दिखाए गए हैं. इनकी तुलना, Compose में स्टाइल के बिना लागू करने से की गई है.
basic_box_border_change टेस्ट में, प्रॉपर्टी अपडेट के दौरान कई मॉडिफ़ायर ऑब्जेक्ट के ऐलोकेशन से बचने में, स्टाइल सिस्टम की ताकत को हाइलाइट किया गया है. इससे, ऐलोकेशन में करीब 77% और समय में करीब 59% की कमी आई है.
टेस्ट का तरीका |
ब्यौरा |
समय में बदलाव |
ऐलोकेशन में बदलाव |
अपडेट की परफ़ॉर्मेंस मेज़र करने के लिए, |
-59.91% |
-77.22% |
|
स्टाइल-आधारित होवर/फ़ोकस/प्रेस की स्थितियों की तुलना, मैन्युअल इंटरैक्शन की स्थिति के कलेक्शन से करता है. |
-5.24% |
-14.72% |
|
चेन किए गए पांच मॉडिफ़ायर के साथ, |
-4.78% |
-6.60% |
|
हार्डकोड की गई स्ट्रिंग वाले पांच |
+0.62% |
+2.41% |
|
|
+5.86% |
+9.82% |