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

يساعد 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 Profile

ملفات 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 عمليات إعادة إنشاء ذكية، حيث يعيد عرض النتيجة التي تم رسمها سابقًا إذا لم تكن بحاجة إلى إجراء تغييرات.

عمليات تمرير متعددة للتصميم

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

تفرض 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.