تسرِّع 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 الذي تم إنشاؤه من واجهة المستخدم التي تم إنشاؤها باستخدام مزيج من طرق العرض و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.
الملفات الشخصية للمرجع
الملفات الشخصية الأساسية هي طريقة ممتازة لتسريع تجارب المستخدمين الشائعة. يمكن أن يؤدي تضمين ملف شخصي أساسي في تطبيقك إلى تحسين سرعة تنفيذ الرموز البرمجية بنسبة %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
في Jetpack Compose، هناك اختلافات ملحوظة بين أداء
التطبيق في وضعَي debug وrelease. للحصول على توقيتات تمثيلية، احرص دائمًا على استخدام الإصدار release بدلاً من debug عند تحليل أداء تطبيقك.
للتحقّق من أداء رمز Jetpack Compose، يمكنك استخدام مكتبة Jetpack Macrobenchmark. لمعرفة كيفية استخدامها مع Jetpack Compose، يُرجى الاطّلاع على مشروع MacrobenchmarkSample.
يستخدم فريق Jetpack Compose أيضًا Macrobenchmark لتتبُّع حالات التراجع والتحقّق من الأداء مقارنةً بـ "طرق العرض" في جميع الإصدارات. للحصول على مقاييس أداء مفصّلة لبدء التشغيل والتمرير تقارن بين Compose وViews في تطبيق Pokedex المفتوح المصدر، يُرجى الاطّلاع على مقاييس الأداء الرئيسية.
تثبيت ملف تعريف Compose
بما أنّ Jetpack Compose هي مكتبة غير مجمّعة، فهي لا تستفيد من Zygote الذي يحمّل مسبقًا فئات مجموعة أدوات واجهة المستخدم والعناصر القابلة للرسم في نظام View. يستخدم Jetpack Compose تثبيت الملف الشخصي لإصدارات الإصدار. تتيح أدوات تثبيت الملفات الشخصية للتطبيقات تحديد الرموز البرمجية المهمة التي يجب تجميعها مسبقًا (AOT) في وقت التثبيت. يوفّر Compose قواعد تثبيت الملفات الشخصية التي تقلّل من وقت بدء التشغيل والبطء في تطبيقات Compose.
التطبيقات المقترَحة لك
- ملاحظة: يتم عرض نص الرابط عندما يكون JavaScript غير مفعَّل
- مقاييس الأداء الرئيسية
- اعتبارات أخرى
- استخدام Compose في طرق العرض
- الانتقال