كيف استخدمت Reddit أداة التحسين R8 لإجراء تحسينات كبيرة على الأداء
مدّة القراءة: 4 دقائق
في عالم التطبيقات للأجهزة الجوّالة اليوم، لم تعُد تجربة المستخدم السلسة ميزة إضافية، بل أصبحت ضرورة. ويمكن أن تشكّل مدّة التحميل الطويلة والواجهات غير المستجيبة وعدم الاستقرار عوائق كبيرة أمام تفاعل المستخدمين والاحتفاظ بهم. أثناء عمل فريق الهندسة في Reddit مع فريق علاقات المطوّرين في Android، استخدموا نتيجة أداء التطبيق لتقييم تطبيقهم. وبعد تقييم الأداء، حدّدوا إمكانية إجراء تحسينات كبيرة وقرّروا اتّخاذ الخطوات اللازمة لتفعيل الإمكانات الكاملة لأداة التحسين R8، وهي أداة تحسين تطبيقات Android. أدّى هذا الجهد المركّز إلى تحسينات ملحوظة في أوقات بدء التشغيل، وتقليل عدد اللقطات البطيئة أو المجمّدة وأخطاء ANR، وزيادة التقييمات الإجمالية على "متجر Google Play". توضّح دراسة الحالة هذه بالتفصيل كيف حقّقت Reddit هذه النتائج المذهلة.
كيف ساعدت أداة التحسين R8 شركة Reddit؟
أداة التحسين R8 هي أداة أساسية لتحسين الأداء على Android. تتّخذ هذه الأداة خطوات مختلفة لتحسين أداء التطبيق.لنلقِ نظرة سريعة على الخطوات الأكثر تأثيرًا.
- إزالة الرموز غير المستخدَمة هي أهم خطوة لتقليل حجم التطبيق. في هذه الخطوة، تتم إزالة الرموز غير المستخدَمة من تبعيات التطبيق والتطبيق نفسه.
- تضمين الأساليب يستبدل استدعاءات الأساليب بالرمز الفعلي، ما يجعل التطبيق أكثر فعالية.
- دمج الفئات، ويتم تطبيق استراتيجيات أخرى لجعل الرمز أكثر إحكامًا. في هذه المرحلة، لم يعُد الأمر يتعلق بقراءة التعليمات البرمجية المصدرية، بل بجعل التعليمات البرمجية المجمَّعة تعمل بسرعة. لذلك، لا تهم هنا التجريدات، مثل الواجهات أو التسلسلات الهرمية للفئات، وستتم إزالتها.
- تقليل حجم المعرّفات يغيّر أسماء الفئات والحقول والأساليب إلى أسماء أقصر وبلا معنى. لذلك، بدلاً من
MyDataModel، قد ينتهي بك الأمر بفئة تُسمى a. - تقليص الموارد يزيل الموارد غير المستخدَمة، مثل ملفات XML والرسومات، لتقليل حجم التطبيق بشكل أكبر.
المراحل الرئيسية لتحسين الأداء باستخدام R8
من البيانات الدقيقة إلى رضا المستخدمين: تحديد النجاح في مرحلة الإنتاج
لاحظت Reddit نتائج محسّنة للأداء فور طرح إصدار جديد من التطبيق للمستخدمين.من خلال استخدام مؤشرات Android الحيوية وCrashlytics، تمكّنت Reddit من جمع مقاييس الأداء على أجهزة فعلية مع مستخدمين فعليين، ما سمح لها بمقارنة الإصدار الجديد بالإصدارات السابقة.
كيف حسّنت أداة التحسين R8 أداء تطبيق Reddit؟
لاحظ الفريق تسريع وقت تشغيل على البارد بنسبة% 40، وتقليل أخطاء "التطبيق لا يستجيب" (ANR) بنسبة% 30، وتحسُّن عرض اللقطات بنسبة% 25، وتقليل حجم التطبيق بنسبة% 14.
هذه التحسينات ضرورية لرضا المستخدمين. يعني بدء التشغيل بشكل أسرع وقت انتظار أقل والوصول إلى المحتوى بشكل أسرع. يؤدي تقليل أخطاء ANR إلى توفير تطبيق أكثر استقرارًا وموثوقية، ما يقلل من إحباط المستخدمين. يؤدي عرض الإطارات بسلاسة إلى إزالة إيقاف مؤقت لعرض واجهة المستخدم، ما يجعل التمرير والصور المتحركة تبدو سلسة ومتجاوبة مع مختلف الأجهزة. كان لهذا التأثير الفني الإيجابي تأثير واضح أيضًا على آراء المستخدمين.
كانت مؤشرات رضا المستخدمين عن نجاح التحسين ظاهرة مباشرةً على "متجر Google Play". بعد طرح الإصدار المحسّن باستخدام R8، لاحظ الفريق تحوّلاً كبيرًا وإيجابيًا في آراء المستخدمين وتفاعلهم.
Drew Heavner: "تفعيل الإمكانات الكاملة لأداة التحسين R8 في أقل من أسبوعَين"
الأمر الأكثر إثارة للإعجاب هو أنّ هذا التحسين تم تحقيقه بجهد مركّز. أشار Drew Heavner، وهو مهندس برامج أول في Reddit عمل على هذه المبادرة، إلى أنّ تطبيق التغييرات لتفعيل الإمكانات الكاملة لأداة التحسين R8 استغرق أقل من أسبوعَين.
تأكيد المكاسب: تحليل تفصيلي باستخدام الاختبارات المعيارية الكلية
بعد ملاحظة التحسينات الكبيرة في العالم الحقيقي، أجرى فريق الهندسة في Reddit وفريق علاقات المطوّرين في Android في Google اختبارات معيارية تفصيلية لتأكيد المكاسب علميًا وتجربة تحسينات إضافية. لإجراء هذا التحليل، قدّم فريق الهندسة في Reddit إصدارَين من تطبيقهم: أحدهما بدون تحسينات والآخر يطبّق أداة التحسين R8 وأداتَين أساسيتَين إضافيتَين لتحسين الأداء: الملفات الشخصية الأساسية و الملفات الشخصية لبدء التشغيل.
تنقل الملفات الشخصية الأساسية بشكل فعّال خطوات التجميع في الوقت المناسب (JIT) من أجهزة المستخدمين إلى أجهزة المطوّرين. لقد ثبت أنّ الرمز المجمَّع الذي تم إنشاؤه قبل وقت التشغيل (AOT) يقلل من وقت بدء التشغيل ومشاكل العرض على حد سواء.
عند تجميع تطبيق، يأخذ برنامج d8 dexer الفئات والأساليب وينشئ ملفات classes.dex لتطبيقك. عندما يفتح المستخدم التطبيق، يتم تحميل ملفات dex هذه واحدًا تلو الآخر إلى أن يتمكّن التطبيق من بدء التشغيل. من خلال تقديم ملف شخصي لبدء التشغيل ، يمكنك إعلام برنامج d8 بالفئات والأساليب التي يجب تجميعها في أول ملفات classes.dex. يسمح هذا الهيكل للتطبيق بتحميل عدد أقل من الملفات، ما يؤدي بدوره إلى تحسين سرعة بدء التشغيل.
كانت حزمة Jetpack Macrobenchmark هي الأداة الأساسية لهذه المرحلة، ما يسمح بالقياس الدقيق لتفاعلات المستخدمين في بيئة خاضعة للرقابة. لمحاكاة تجربة المستخدم النموذجية، استخدموا واجهة برمجة التطبيقات UIAutomator لإنشاء اختبار يفتح التطبيق، ثم يمرّر لأسفل ثلاث مرات، ثم يمرّر لأعلى مرة أخرى.
في النهاية، كل ما كان مطلوبًا لكتابة الاختبار المعياري هو ما يلي:
uiAutomator {
startApp(REDDIT)
repeat(3) {
onView { isScrollable }.fling(Direction.DOWN) }
repeat(3) {
onView {isScrollable }.fling(Direction.UP)
}
}أكّدت بيانات الاختبار المعياري الملاحظات الميدانية وقدّمت إحصاءات أكثر تفصيلاً. بدأ تشغيل التطبيق المحسّن بالكامل بسرعة أكبر بنسبة% 55 وتمكّن المستخدمون من بدء التصفّح بشكل أسرع بنسبة% 18. أظهر التطبيق المحسّن أيضًا انخفاضًا بمقدار الثلثَين في حالات التجميع أثناء التنفيذ (JIT) وانخفاضًا بمقدار الثلث في وقت التجميع أثناء التنفيذ (JIT). تحسّن عرض اللقطات، ما أدّى إلى عرض لقطات أكثر بنسبة% 19 خلال تجربة المستخدم التي تم قياسها. أخيرًا، تم تقليل حجم التطبيق بأكثر من الثلث.
التحسينات الإجمالية لأداء تطبيق Reddit
يمكنك قياس وقت التجميع أثناء التنفيذ باستخدام مقياس قسم تتبُّع مخصّص في Macrobenchmark، مثل ما يلي:
val jitCompilationMetric = TraceSectionMetric("JIT Compiling %", label = "JIT compilation")تفعيل التكنولوجيا التي تقف وراء التحويل: أداة التحسين R8
لتفعيل أداة التحسين R8 في الوضع الكامل، عليك ضبط ملف app/build.gradle.kts من خلال ضبط minifyEnabled وshrinkResources على true في نوع بنية الإصدار.
android {
...
buildTypes {
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"keep-rules.pro",
)
}
}
}يجب أن تتبع هذه الخطوة اختبار شامل من البداية إلى النهاية، لأنّ تحسينات الأداء يمكن أن تؤدي إلى سلوك غير مرغوب فيه، ومن الأفضل أن تكتشفه قبل أن يكتشفه المستخدمون.
كما هو موضّح سابقًا في هذه المقالة، تجري أداة التحسين R8 تحسينات شاملة لزيادة مزايا الأداء إلى أقصى حد. تُجري أداة التحسين R8 تعديلات كبيرة على الرمز، بما في ذلك إعادة تسمية الفئات والحقول والأساليب ونقلها وإزالتها. إذا لاحظت أنّ هذه التعديلات تتسبب في حدوث أخطاء، عليك تحديد أجزاء الرمز التي لا يجب أن تعدّلها أداة التحسين R8 من خلال الإعلان عنها في قواعد الاحتفاظ.
اتّباع مثال Reddit في تطبيقك
يمثّل نجاح Reddit مع أداة التحسين R8 دراسة حالة قوية لأي فريق تطوير يتطلع إلى إحداث تأثير كبير على أداء تطبيقه بجهد قليل. تؤكّد العلاقة المباشرة بين التحسينات الفنية والارتفاع اللاحق في رضا المستخدمين قيمة تحسين الأداء.
من خلال اتّباع المخطط الموضّح في دراسة الحالة هذه، يمكن للمطوّرين الآخرين تحقيق مكاسب مماثلة، وذلك باستخدام أدوات مثل نتيجة أداء التطبيق لتحديد الفرص، وتفعيل الإمكانات الكاملة لأداة التحسين R8، ومراقبة البيانات الفعلية، واستخدام الاختبارات المعيارية لتأكيد الفهم وتعميقه.
لبدء استخدام أداة التحسين R8 في تطبيقك، يُرجى الرجوع إلى المستندات الرسمية والإرشادات التي تم تحديثها مؤخرًا بشأن تفعيل أداة التحسين R8 وضبطها وحلّ المشاكل فيها.
-
دراسات الحالةMonzo هو بنك رقمي في المملكة المتحدة يضم 15 مليون عميل، والعدد في ازدياد. مع توسّع نطاق التطبيق، حدّد فريق الهندسة وقت بدء تشغيل التطبيق كمنطقة مهمة للتحسين، لكنّه كان قلقًا من أنّ ذلك سيتطلب تغييرات كبيرة في قاعدة التعليمات البرمجية.
Ben Weiss, Tracy Agyemang • مدّة القراءة: دقيقتان -
دراسات الحالةمع استخدام غالبية تطبيقات Android للغة Kotlin كلغة رئيسية، أصبحت مكتبة kotlinx.coroutines معيارًا فعليًا للبرمجة غير المتزامنة. تقدّم المكتبة طريقة منظّمة ومصمّمة جيدًا لإدارة التدفقات المتزامنة التي تتوافق مع لغة Kotlin.
Jonathan Starup, Andrei Shikov • مدّة القراءة: 7 دقائق -
دراسات الحالةمن المعروف أنّ حالات تدهور الأداء يصعب إعادة إنتاجها، ما يجعلها تشكّل عائقًا كبيرًا أمام مطوّري الأجهزة الجوّالة.
Alice Yuan, Arti Arutiunov, Nikita Ogorodnikov • مدّة القراءة: 4 دقائق
يمكنك تلقّي أحدث الإحصاءات عن تطوير تطبيقات Android في بريدك الوارد أسبوعيًا.