كيف استخدمت Reddit أداة تحسين R8 لتحقيق تحسينات كبيرة في الأداء
يستغرق الاطّلاع على المقال 4 دقائق
في عالم تطبيقات الأجهزة الجوّالة اليوم، لا تُعدّ تجربة المستخدم السلسة ميزة فحسب، بل هي ضرورة. يمكن أن تشكّل أوقات التحميل البطيئة وواجهات المستخدم غير المستجيبة وعدم الاستقرار عوائق كبيرة أمام تفاعل المستخدمين والاحتفاظ بهم. أثناء عمل فريق الهندسة في Reddit مع فريق علاقات المطوّرين في Android، استخدم الفريق نتيجة أداء التطبيق لتقييم التطبيق. وبعد تقييم الأداء، حدّد الفريق إمكانية تحسين كبيرة وقرّر اتّخاذ الخطوات اللازمة للاستفادة من جميع مزايا R8، أداة تحسين تطبيقات Android. أدّت هذه المبادرة المركّزة إلى تحسينات ملحوظة في أوقات بدء التشغيل، وانخفاض في اللقطات البطيئة أو المجمدة وأخطاء ANR، وزيادة عامة في التقييمات على "متجر Play". توضّح دراسة الحالة هذه كيف حقّقت Reddit هذه النتائج الرائعة.
كيف ساعدت أداة R8 Optimizer شركة Reddit؟
أداة التحسين R8 هي أداة أساسية لتحسين الأداء على Android. يجب اتّخاذ خطوات مختلفة لتحسين أداء التطبيق، وفي ما يلي نظرة سريعة على الخطوات الأكثر تأثيرًا.
- إزالة الرموز البرمجية غير المستخدَمة هي أهم خطوة لتقليل حجم التطبيق. في هذه المرحلة، تتم إزالة الرموز غير المستخدَمة من تبعيات التطبيق والتطبيق نفسه.
- تستبدل عملية تضمين الرمز البرمجي للدالة استدعاءات الدوال بالرمز البرمجي الفعلي، ما يجعل التطبيق أكثر فعالية.
- يتم تطبيق دمج الفئات واستراتيجيات أخرى لجعل الرمز أكثر إيجازًا. في هذه المرحلة، لم يعُد الأمر يتعلق بقراءة رمز المصدر من قِبل الإنسان، بل يتعلق بتسريع عمل الرمز المجمَّع. لذلك، لا تهمّ هنا التجريدات، مثل الواجهات أو التسلسلات الهرمية للفئات، وسيتم إزالتها.
- تعمل تصغير المعرّفات على تغيير أسماء الفئات والحقول والطرق إلى أسماء أقصر وبلا معنى. لذا بدلاً من
MyDataModelقد ينتهي بك الأمر بفئة اسمها a. - يؤدي تقليص الموارد إلى إزالة الموارد غير المستخدَمة، مثل ملفات XML والرسومات القابلة للرسم، لتقليل حجم التطبيق بشكل أكبر.
المراحل الرئيسية لعملية تحسين R8
من البيانات الصعبة إلى رضا المستخدمين: تحديد النجاح في مرحلة الإنتاج
لاحظت Reddit تحسُّنًا في نتائج الأداء فور طرح إصدار جديد من التطبيق للمستخدمين. باستخدام مؤشرات Android الحيوية وCrashlytics، تمكّنت Reddit من تسجيل مقاييس الأداء على أجهزة فعلية مع مستخدمين حقيقيين، ما أتاح لها مقارنة الإصدار الجديد بالإصدارات السابقة.
كيف حسّنت الأداة R8 أداء تطبيق Reddit
لاحظ الفريق سرعة أكبر بنسبة% 40 في بدء التشغيل على البارد وانخفاضًا بنسبة% 30 في أخطاء "التطبيق لا يستجيب" (ANR) وتحسّنًا بنسبة% 25 في عرض اللقطات وانخفاضًا بنسبة% 14 في حجم التطبيق.
هذه التحسينات ضرورية لضمان رضا المستخدمين. يعني بدء التشغيل بشكل أسرع انتظارًا أقل ووصولاً أسرع إلى المحتوى. يؤدي انخفاض عدد أخطاء ANR إلى توفير تطبيق أكثر استقرارًا وموثوقية، ما يقلّل من إحباط المستخدمين. يؤدي عرض الإطارات بشكل أكثر سلاسة إلى إزالة إيقاف مؤقت لعرض واجهة المستخدم، ما يجعل التمرير والصور المتحركة تبدو سلسة ومتجاوبة مع مختلف الأجهزة. كان لهذا التأثير الفني الإيجابي تأثير واضح أيضًا في آراء المستخدمين.
كانت مؤشرات رضا المستخدمين عن نجاح التحسين ظاهرة مباشرةً على "متجر Google Play". بعد طرح الإصدار المحسّن من R8، لاحظ الفريق تحسّنًا كبيرًا وإيجابيًا في آراء المستخدمين وتفاعلهم.
درو هيفنر: "تفعيل الأداة التي تتيح الاستفادة من إمكانات R8 الكاملة في أقل من أسبوعَين"
والأمر الأكثر إثارة للإعجاب هو أنّ هذا الإنجاز تمّ من خلال جهد مركّز. أشار "درو هيفنر"، مهندس البرامج في Reddit الذي عمل على هذه المبادرة، إلى أنّ تنفيذ التغييرات للاستفادة من إمكانات R8 الكاملة استغرق أقل من أسبوعَين.
تأكيد التحسينات: نظرة متعمّقة باستخدام اختبارات الأداء الشاملة
بعد ملاحظة التحسينات الكبيرة في الأداء الفعلي، أجرى فريق الهندسة في Reddit وفريق علاقات المطوّرين في Android في Google مقاييس تفصيلية للتأكّد علميًا من التحسينات وتجربة المزيد من عمليات التحسين. لإجراء هذا التحليل، قدّم فريق الهندسة في Reddit إصدارَين من التطبيق: أحدهما بدون تحسينات والآخر يطبّق R8 وأداتَين أساسيتَين إضافيتَين لتحسين الأداء: ملفات Baseline Profiles وملفات Startup Profiles.
تنقل "ملفات تعريف الخط الأساس" خطوات التجميع أثناء التنفيذ (JIT) بشكل فعّال من أجهزة المستخدمين إلى أجهزة المطوّرين. وقد ثبت أنّ الرمز البرمجي الذي تم تجميعه مسبقًا (AOT) يقلّل من وقت بدء التشغيل ومشاكل العرض على حدّ سواء.
عند تجميع تطبيق، يأخذ برنامج d8 لتحويل الرموز البرمجية إلى صيغة dex الفئات والطرق وينشئ ملفات classes.dex لتطبيقك. عندما يفتح المستخدم التطبيق، يتم تحميل ملفات dex هذه واحدًا تلو الآخر إلى أن يتمكّن التطبيق من البدء. من خلال توفير ملف بدء التشغيل، يمكنك إعلام أداة d8 بالفئات والطرق التي يجب تضمينها في ملفات classes.dex الأولى. يسمح هذا البناء للتطبيق بتحميل عدد أقل من الملفات، ما يؤدي بدوره إلى تحسين سرعة بدء التشغيل.
كانت أداة Macrobenchmark من Jetpack هي الأداة الأساسية لهذه المرحلة، إذ تتيح قياس تفاعلات المستخدمين بدقة في بيئة خاضعة للرقابة. لمحاكاة رحلة المستخدم النموذجية، استخدموا UIAutomator API لإنشاء اختبار يفتح التطبيق وينتقل للأسفل ثلاث مرات ثم يعود للأعلى.
في النهاية، كل ما كان مطلوبًا لكتابة مقياس الأداء هو ما يلي:
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 • مدّة القراءة: دقيقتان -
دراسات الحالةمن المعروف أنّ أخطاء الأداء يصعب إعادة إنتاجها، ما يجعلها عائقًا كبيرًا أمام مطوّري تطبيقات الأجهزة الجوّالة.
Alice Yuan, Arti Arutiunov, Nikita Ogorodnikov • مدّة القراءة: 4 دقائق -
دراسات الحالةحقّق تطبيق FotMob مؤخرًا أكبر زيادة في عدد المستخدمين على Wear OS في يوم واحد خلال 5 سنوات، حيث بلغ عدد المستخدمين ضِعف أو ثلاثة أضعاف المتوسط اليومي. ما هو السرّ؟ مسار بسيط للتثبيت يعمل من خلال جهاز آخر يساعد المستخدمين في اكتشاف تطبيق Wear OS مباشرةً من هواتفهم
Garan Jenkin • يستغرق الاطِّلاع على المقال 3 دقائق
يمكنك تلقّي أحدث الإحصاءات حول تطوير تطبيقات Android في بريدك الوارد أسبوعيًا.