مقارنة مقاييس "الإنشاء" و"العرض"

تسرِّع Jetpack Compose عملية تطوير واجهة المستخدم وتحسِّن عملية تطوير تطبيقات Android. ومع ذلك، يجب مراعاة كيف يمكن أن تؤثر إضافة Compose إلى تطبيق حالي في مقاييس مثل حجم حزمة APK للتطبيق وأداء الإصدار ووقت التشغيل.

حجم حزمة APK وأوقات الإنشاء

يتناول هذا القسم تأثير ذلك في حجم حزمة APK ووقت الإنشاء من خلال الاطّلاع على نموذج تطبيق Sunflower، وهو تطبيق يوضّح أفضل الممارسات المتعلّقة بنقل تطبيق مستند إلى View إلى Compose.

حجم حزمة APK

تؤدي إضافة المكتبات إلى مشروعك إلى زيادة حجم حزمة APK. النتائج التالية هي لملف APK المصغّر لكل مشروع مع تفعيل ميزة تقليص حجم الموارد والرموز، باستخدام وضع R8 الكامل، ويتم قياسها باستخدام أداة تحليل ملفات APK.

للاطّلاع فقط طرق العرض المختلطة وCompose Compose-only
حجم التنزيل ‫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
للاطّلاع فقط طرق العرض المختلطة وCompose Compose-only
متوسط وقت الإنشاء ‫299.47 ملي ثانية ‫399.09 ملّي ثانية ‫342.16 ملي ثانية

عند إضافة Compose إلى Sunflower لأول مرة، زاد متوسط وقت الإنشاء من 299 مللي ثانية إلى 399 مللي ثانية، أي زيادة بمقدار 100 مللي ثانية. يرجع سبب هذه المدة إلى أنّ برنامج تجميع Compose يؤدي مهام إضافية لتحويل رمز Compose المحدّد في المشروع.

في المقابل، انخفض متوسط وقت الإنشاء إلى 342 ملي ثانية، أي بمقدار 57 ملي ثانية، بعد اكتمال عملية نقل بيانات Sunflower إلى Compose. يمكن أن يُعزى هذا الانخفاض إلى عدة عوامل تقلّل بشكل جماعي من وقت الإنشاء، مثل إزالة ربط البيانات، ونقل التبعيات التي تستخدم kapt إلى KSP، وتحديث عدة تبعيات إلى أحدث إصداراتها.

ملخّص

سيؤدي استخدام Compose إلى زيادة حجم حزمة APK لتطبيقك بشكل فعّال، كما سيؤدي إلى زيادة أداء وقت الإنشاء في تطبيقك بسبب عملية تجميع رمز Compose. ومع ذلك، يجب الموازنة بين هذه المفاضلات ومزايا Compose، خاصةً في ما يتعلّق بزيادة إنتاجية المطوّرين عند استخدام Compose. على سبيل المثال، وجد فريق "متجر Google Play" أنّ كتابة واجهة المستخدم تتطلّب رمزًا أقل بكثير، وأحيانًا بنسبة تصل إلى%50، ما يؤدي إلى زيادة الإنتاجية وقابلية صيانة الرمز.

يمكنك الاطّلاع على المزيد من دراسات الحالة في اعتماد Compose for Teams.

أداء وقت التشغيل

يتناول هذا القسم المواضيع المتعلّقة بأداء وقت التشغيل في Jetpack Compose لفهم كيفية مقارنة Jetpack Compose بأداء نظام العرض، وكيف يمكنك قياسه.

إعادة التركيب الذكي

عندما تكون أجزاء من واجهة المستخدم غير صالحة، يحاول Compose إعادة إنشاء الأجزاء التي تحتاج إلى تعديل فقط. يمكنك الاطّلاع على مزيد من المعلومات حول هذا الموضوع في مستندات مراحل نشاط الدوال المركّبة ومراحل Jetpack Compose.

الملفات الشخصية للمرجع

ملفات Baseline Profiles هي طريقة ممتازة لتسريع تجارب المستخدمين الشائعة. يمكن أن يؤدي تضمين ملف شخصي أساسي في تطبيقك إلى تحسين سرعة تنفيذ الرموز البرمجية بنسبة% 30 تقريبًا من أول تشغيل من خلال تجنُّب خطوات التفسير والتجميع أثناء التنفيذ (JIT) للمسارات البرمجية المضمّنة.

تتضمّن مكتبة Jetpack Compose "ملفًا شخصيًا للمرجع" خاصًا بها، وستحصل تلقائيًا على هذه التحسينات عند استخدام Compose في تطبيقك. ومع ذلك، لا تؤثّر هذه التحسينات إلا في المسارات البرمجية داخل مكتبة Compose، لذا ننصحك بإضافة "ملف شخصي للمرجع" إلى تطبيقك لتغطية المسارات البرمجية خارج Compose.

المقارنة مع نظام View

يتضمّن Jetpack Compose العديد من التحسينات مقارنةً بنظام View. يتم وصف هذه التحسينات في الأقسام التالية.

كل شيء يمتد إلى View

يتطلّب كل View يتم عرضه على الشاشة، مثل TextView أو Button أو ImageView، تخصيص الذاكرة وتتبُّع الحالة الصريحة وعمليات استدعاء مختلفة لإتاحة جميع حالات الاستخدام. بالإضافة إلى ذلك، يحتاج مالك View المخصّص إلى تنفيذ منطق صريح لمنع إعادة الرسم عندما لا يكون ذلك ضروريًا، على سبيل المثال، لمعالجة البيانات المتكررة.

وتعالج Jetpack Compose هذه المشكلة بعدة طرق. لا يتضمّن Compose عناصر صريحة قابلة للتعديل لرسم طرق العرض. عناصر في واجهة المستخدم هي دوال مركّبة بسيطة تتم كتابة معلوماتها في التكوين بطريقة قابلة لإعادة التشغيل. يساعد ذلك في تقليل تتبُّع الحالة الصريحة وتخصيص الذاكرة وعمليات الاستدعاء لتقتصر على الدوال المركّبة التي تتطلّب هذه الميزات بدلاً من طلبها من جميع الإضافات من نوع View معيّن.

بالإضافة إلى ذلك، توفّر أداة Compose عمليات إعادة تركيب ذكية، حيث تعيد تشغيل النتيجة التي تم رسمها سابقًا إذا لم تكن بحاجة إلى إجراء تغييرات.

عمليات متعددة لتمرير التنسيق

تتضمّن مجموعات ViewGroups التقليدية الكثير من التعبيرات في واجهات برمجة التطبيقات الخاصة بالقياس والتخطيط، ما يجعلها عرضة لعمليات تخطيط متعددة. يمكن أن تؤدي عمليات التخطيط المتعددة هذه إلى عمل أسي إذا تم إجراؤها في نقاط متداخلة محددة في التسلسل الهرمي لطريقة العرض.

تفرض Jetpack Compose مسارًا واحدًا للتصميم لجميع الدوال المركّبة للتصميم من خلال عقد واجهة برمجة التطبيقات. يتيح ذلك لـ Compose التعامل بكفاءة مع أشجار واجهة المستخدم العميقة. إذا كانت هناك حاجة إلى قياسات متعددة، يتضمّن Compose قياسات جوهرية.

عرض أداء بدء التشغيل

يحتاج نظام العرض إلى تضخيم تخطيطات XML عند عرض تخطيط معين لأول مرة. يتم حفظ هذه التكلفة في Jetpack Compose لأنّ التنسيقات مكتوبة بلغة Kotlin ويتم تجميعها مثل بقية أجزاء التطبيق.

قياس أداء Compose

في الإصدار 1.0 من Jetpack Compose، هناك اختلافات ملحوظة بين أداء التطبيق في وضعَي debug وrelease. للحصول على توقيتات تمثيلية، يجب دائمًا استخدام الإصدار release بدلاً من debug عند تحليل أداء تطبيقك.

للتحقّق من أداء رمز Jetpack Compose، يمكنك استخدام مكتبة Jetpack Macrobenchmark. لمعرفة كيفية استخدامها مع Jetpack Compose، يُرجى الاطّلاع على مشروع MacrobenchmarkSample.

يستخدم فريق Jetpack Compose أيضًا Macrobenchmark لرصد أي تراجعات قد تحدث. على سبيل المثال، يمكنك الاطّلاع على مقياس الأداء لعمود التحميل الكسول ولوحة البيانات الخاصة به لتتبُّع حالات التراجع.

تثبيت ملف تعريف Compose

بما أنّ Jetpack Compose هي مكتبة غير مجمّعة، فهي لا تستفيد من Zygote الذي يحمّل مسبقًا فئات مجموعة أدوات واجهة المستخدم والرسومات في نظام العرض. يستخدم Jetpack Compose 1.0 تثبيت الملف الشخصي لإصدارات الإصدار. تتيح أدوات تثبيت الملفات الشخصية للتطبيقات تحديد الرموز البرمجية المهمة التي يجب تجميعها مسبقًا (AOT) في وقت التثبيت. تتضمّن حزمة Compose قواعد تثبيت الملفات الشخصية التي تقلّل من وقت بدء التشغيل والبطء في تطبيقات Compose.