تسرّع Jetpack Compose عملية تطوير واجهة المستخدم وتحسّن عملية تطوير تطبيقات Android. ومع ذلك، يجب مراعاة كيفية تأثير إضافة Compose إلى تطبيق حالي في مقاييس مثل حجم حِزمة APK للتطبيق، وعملية الإنشاء، وأداء وقت التشغيل.
حجم حزمة APK وأوقات الإنشاء
يتناول هذا القسم تأثير استخدام Compose في حجم حزمة APK ووقت الإنشاء من خلال النظر إلى تطبيق Sunflower التجريبي، وهو تطبيق يوضّح أفضل الممارسات عند نقل تطبيق يستند إلى View إلى Compose.
حجم حزمة APK
تؤدي إضافة المكتبات إلى مشروعك إلى زيادة حجم حزمة APK. تتعلّق النتائج التالية بحِزمة APK المصغّرة للإصدار الخاص بكل مشروع مع تفعيل تقليص حجم الموارد والرموز، وذلك باستخدام وضع R8 الكامل، وتم قياسها باستخدام أداة تحليل حِزم APK.
| المشاهدات فقط | طرق العرض المختلطة والكتابة | إنشاء فقط | |
|---|---|---|---|
| حجم التنزيل | 2,252 كيلوبايت | 3,034 كيلوبايت | 2,966 كيلوبايت |
عند إضافة Compose إلى Sunflower لأول مرة، زاد حجم حزمة APK من 2,252 كيلوبايت إلى 3,034 كيلوبايت، أي بمقدار 782 كيلوبايت. تضمّن حِزمة APK التي تم إنشاؤها إصدار واجهة المستخدم مع مزيج من Views وCompose. هذه الزيادة متوقّعة لأنّه تمت إضافة تبعيات إضافية إلى Sunflower.
في المقابل، عند نقل تطبيق Sunflower إلى تطبيق يستخدِم Compose فقط، انخفض حجم حزمة APK من 3,034 كيلوبايت إلى 2,966 كيلوبايت، أي انخفاض بمقدار 68 كيلوبايت. ويعود هذا الانخفاض إلى إزالة التبعيات غير المستخدَمة في View، مثل 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 ملي ثانية، عند اكتمال عملية نقل تطبيق Sunflower إلى Compose. يمكن أن يُعزى هذا الانخفاض إلى عدة عوامل تقلّل بشكل جماعي من وقت الإنشاء، مثل إزالة ربط البيانات ونقل التبعيات التي تستخدم kapt إلى KSP وتحديث العديد من التبعيات إلى أحدث إصداراتها.
ملخّص
سيؤدي استخدام Compose إلى زيادة حجم حزمة APK لتطبيقك بشكل فعّال، كما سيؤدي إلى تحسين أداء وقت الإنشاء في تطبيقك بسبب عملية تجميع رمز Compose. ومع ذلك، يجب مقارنة هذه المفاضلات مع مزايا Compose، خاصةً ما يتعلّق بزيادة إنتاجية المطوّرين عند استخدام Compose. على سبيل المثال، وجد فريق "متجر Play" أنّ كتابة واجهة المستخدم تتطلّب عددًا أقل بكثير من الأسطر البرمجية، يصل أحيانًا إلى%50، ما يؤدي إلى زيادة الإنتاجية وسهولة صيانة الرمز البرمجي.
يمكنك الاطّلاع على مزيد من دراسات الحالة في استخدام Compose for Teams.
أداء وقت التشغيل
يتناول هذا القسم مواضيع ذات صلة بأداء وقت التشغيل في Jetpack Compose للمساعدة في فهم مستوى أداء Jetpack Compose مقارنةً بنظام View، وكيفية قياسه.
إعادة التكوين الذكي
عندما تكون أجزاء من واجهة المستخدم غير صالحة، تحاول Compose إعادة إنشاء الأجزاء التي تحتاج إلى تعديل فقط. يمكنك الاطّلاع على مزيد من المعلومات حول ذلك في مستندات مراحل نشاط العناصر القابلة للإنشاء ومراحل Jetpack Compose.
Baseline Profiles
ملفات Baseline Profiles هي طريقة ممتازة لتسريع تجارب المستخدمين الشائعة. يمكن أن يؤدي تضمين ملف Baseline Profile في تطبيقك إلى تحسين سرعة تنفيذ الرمز البرمجي بنسبة% 30 تقريبًا من عملية التشغيل الأولى من خلال تجنُّب خطوات التفسير والتجميع أثناء التنفيذ (JIT) لمسارات الرموز البرمجية المضمَّنة.
تتضمّن مكتبة Jetpack Compose ملف تعريف أساسي خاصًا بها، وستحصل تلقائيًا على عمليات التحسين هذه عند استخدام Compose في تطبيقك. ومع ذلك، لا تؤثّر عمليات التحسين هذه إلا في مسارات الرموز البرمجية ضِمن مكتبة Compose، لذا ننصحك بإضافة ملف تعريف أساسي إلى تطبيقك لتغطية مسارات الرموز البرمجية خارج Compose.
المقارنة بنظام View
يوفّر Jetpack Compose العديد من التحسينات مقارنةً بنظام View. يتم توضيح هذه التحسينات في الأقسام التالية.
كل شيء يمتد إلى View
يتطلّب كل View يتم رسمه على الشاشة، مثل TextView أو Button أو ImageView، عمليات تخصيص للذاكرة وتتبُّعًا صريحًا للحالة وعمليات ردّ اتصال متنوعة لتوفير الدعم لجميع حالات الاستخدام. بالإضافة إلى ذلك، يجب أن ينفّذ مالك View المخصّص منطقًا صريحًا لمنع إعادة الرسم عندما لا يكون ذلك ضروريًا، مثلاً، لمعالجة البيانات المتكرّرة.
تعالج Jetpack Compose هذه المشكلة بعدة طرق. لا يحتوي Compose على عناصر قابلة للتعديل بشكل صريح لعرض الرسومات. عناصر واجهة المستخدم هي دوال مركّبة بسيطة
تتم كتابة معلوماتها في التركيب بطريقة قابلة لإعادة التشغيل. يساعد ذلك في تقليل تتبُّع الحالة الواضحة وتخصيص الذاكرة وعمليات معاودة الاتصال إلى العناصر القابلة للإنشاء التي تتطلّب الميزات المذكورة فقط بدلاً من طلبها من جميع إضافات نوع View معيّن.
بالإضافة إلى ذلك، يوفّر Compose عمليات إعادة إنشاء ذكية، حيث يعيد عرض النتيجة التي تم رسمها سابقًا إذا لم تكن بحاجة إلى إجراء تغييرات.
عمليات تمرير متعددة للتصميم
تتضمّن عناصر ViewGroup التقليدية الكثير من التعبيرات في واجهات برمجة التطبيقات الخاصة بالقياس والتصميم، ما يجعلها عرضة لعمليات تصميم متعدّدة. يمكن أن تتسبّب عمليات التخطيط المتعددة هذه في حدوث عمل مضاعف إذا تم تنفيذها في نقاط متداخلة معيّنة في تسلسل هرمي للعرض.
تفرض Jetpack Compose تمريرة تصميم واحدة لجميع العناصر القابلة للإنشاء الخاصة بالتصميم من خلال عقد واجهة برمجة التطبيقات. يتيح ذلك لـ Compose التعامل بكفاءة مع بنى واجهة المستخدم المعقّدة. إذا كنت بحاجة إلى قياسات متعددة، يتضمّن Compose قياسات مضمّنة.
عرض أداء بدء التشغيل
يحتاج نظام العرض إلى توسيع تنسيقات XML عند عرض تنسيق معيّن للمرة الأولى. يتم حفظ هذه التكلفة في Jetpack Compose لأنّ التنسيقات تتم كتابتها بلغة Kotlin ويتم تجميعها مثل بقية تطبيقك.
Benchmark Compose
في Jetpack Compose 1.0، هناك اختلافات ملحوظة بين أداء التطبيق في الوضعين debug وrelease. بالنسبة إلى التوقيتات التمثيلية، عليك دائمًا
استخدام الإصدار release بدلاً من الإصدار debug عند إنشاء ملف تعريف لتطبيقك.
للتحقّق من أداء رمز Jetpack Compose، يمكنك استخدام مكتبة Jetpack Macrobenchmark. لمعرفة كيفية استخدامها مع Jetpack Compose، راجِع مشروع MacrobenchmarkSample.
يستخدم فريق Jetpack Compose أيضًا Macrobenchmark لرصد أي تراجعات محتملة في الأداء. على سبيل المثال، يمكنك الاطّلاع على مقياس الأداء لعمود التحميل الكسول ولوحة البيانات الخاصة به لتتبُّع حالات التراجع.
إنشاء ملف شخصي للتثبيت
بما أنّ Jetpack Compose هي مكتبة غير مجمّعة، فإنّها لا تستفيد من Zygote التي تحمّل مسبقًا فئات وأدوات الرسم الخاصة بنظام View. يستخدم الإصدار 1.0 من Jetpack Compose عملية تثبيت الملف الشخصي لإنشاءات الإصدار. تتيح برامج تثبيت الملفات الشخصية للتطبيقات تحديد الرموز البرمجية المهمة التي سيتم تجميعها مسبقًا (AOT) في وقت التثبيت. تتضمّن Compose قواعد تثبيت الملفات الشخصية التي تقلّل وقت بدء التشغيل والتشويش في تطبيقات Compose.
اقتراحات مخصصة لك
- ملاحظة: يتم عرض نص الرابط عندما تكون JavaScript غير مفعّلة
- اعتبارات أخرى
- استخدام Compose في طرق العرض
- التمرير