كيفية استخدام Reddit لأداة تحسين R8 لإجراء تحسينات عالية التأثير في الأداء
مدّة القراءة: 4 دقائق
في عالم تطبيقات الأجهزة الجوّالة اليوم، لا تُعدّ تجربة المستخدم السلسة مجرد ميزة، بل هي ضرورة. فأوقات التحميل البطيئة والواجهات غير المستجيبة وعدم الاستقرار يمكن أن تشكّل عوائق كبيرة أمام تفاعل المستخدمين والاحتفاظ بهم. خلال عمله مع فريق علاقات مطوّري برامج Android، استخدم الفريق الهندسي في Reddit نتيجة أداء التطبيق لتقييم تطبيقه. وبعد تقييم الأداء، حدّد الفريق إمكانات تحسين كبيرة وقرّر اتّخاذ الخطوات اللازمة للاستفادة من الإمكانات الكاملة لأداة R8، وهي أداة تحسين تطبيقات Android. أدت هذه المبادرة المركّزة إلى تحسينات ملحوظة في أوقات بدء التشغيل، وتقليل عدد اللقطات البطيئة أو الثابتة وأخطاء ANR، وزيادة عامة في تقييمات التطبيق على "متجر Google Play". توضّح دراسة الحالة هذه كيف حقّق Reddit هذه النتائج المذهلة.
كيف ساعدت أداة تحسين R8 تطبيق Reddit
تُعدّ أداة R8 Optimizer أداة أساسية لتحسين الأداء على Android. يتطلّب تحسين أداء التطبيق اتّخاذ خطوات مختلفة، لذا سنلقي نظرة سريعة على الخطوات الأكثر تأثيرًا.
- إزالة الرموز غير المستخدَمة هي الخطوة الأهم لتقليل حجم التطبيق. في هذه المرحلة، تتم إزالة الرموز غير المستخدَمة من تبعيات التطبيق والتطبيق نفسه.
- يستبدل تضمين الطرق طلبات الإجراءات بالرمز الفعلي، ما يجعل التطبيق أكثر فعالية.
- دمج الفئات، ويتم تطبيق استراتيجيات أخرى لجعل الرمز أكثر إيجازًا. في هذه المرحلة، لا يتعلّق الأمر بقابلية قراءة الرمز المصدر من قِبل المستخدم، بل بجعل الرمز المجمَّع يعمل بسرعة. لذلك، لا تهمّنا هنا التجريدات، مثل الواجهات أو التسلسلات الهرمية للفئات، وستتم إزالتها.
- تعمل ميزة تصغير المعرّفات على تغيير أسماء الفئات والحقول والطرق إلى أسماء أقصر وغير مفهومة. لذلك، بدلاً من
MyDataModel، قد ينتهي بك الأمر بفئة تُسمى a. - تقليص الموارد: تتم إزالة الموارد غير المستخدَمة، مثل ملفات xml والملفات القابلة للرسم، لتقليل حجم التطبيق بشكل أكبر.
المراحل الرئيسية لتحسين R8
من البيانات الثابتة إلى رضا المستخدمين: تحديد النجاح في الإنتاج
لاحظت Reddit تحسُّنًا في نتائج الأداء فور طرح إصدار جديد من التطبيق للمستخدمين. باستخدام مؤشرات Android الحيوية وCrashlytics، تمكّن فريق Reddit من تسجيل مقاييس الأداء على أجهزة حقيقية مع مستخدمين فعليين، ما سمح لهم بمقارنة الإصدار الجديد بالإصدارات السابقة.
كيفية تحسين أداء تطبيق Reddit باستخدام R8
لاحظ الفريق زيادة سرعة التشغيل على البارد بنسبة %40، وانخفاضًا بنسبة %30 في أخطاء "التطبيق لا يستجيب" (ANR)، وتحسُّنًا بنسبة %25 في عرض اللقطات، وانخفاضًا بنسبة %14 في حجم التطبيق.
هذه التحسينات ضرورية لرضا المستخدمين. ويعني بدء التشغيل الأسرع وقت انتظار أقل ووصولاً أسرع إلى المحتوى. فكلما قلّت أخطاء ANR، زاد استقرار التطبيق وموثوقيته، ما يقلل من شعور المستخدمين بالإحباط. يؤدي عرض الإطارات بسلاسة أكبر إلى إزالة أي تقطُّع في واجهة المستخدم، ما يجعل التمرير والصور المتحركة تبدو سلسة وسريعة الاستجابة. وكان هذا التأثير الفني الإيجابي واضحًا أيضًا في آراء المستخدمين.
ظهرت مؤشرات رضا المستخدمين عن نجاح عملية التحسين مباشرةً على "متجر Google Play". بعد طرح الإصدار المحسَّن باستخدام R8، لاحظ الفريق تحوّلاً كبيرًا وإيجابيًا في آراء المستخدمين وتفاعلهم.
درو هيفنر: "استغرق تفعيل الإمكانات الكاملة لأداة R8 أقل من أسبوعين"
والأهم من ذلك أنّ هذا الإنجاز تم من خلال جهود مركّزة. أشار "درو هيفنر"، مهندس البرمجيات في Reddit الذي عمل على هذه المبادرة، إلى أنّ تنفيذ التغييرات للاستفادة من إمكانات R8 الكاملة استغرق أقل من أسبوعين.
التأكّد من التحسينات: نظرة متعمّقة باستخدام مقاييس الأداء الكلي
بعد ملاحظة التحسينات الكبيرة في الأداء الفعلي، أجرى فريق الهندسة في Reddit وفريق علاقات مطوّري برامج Android في Google اختبارات قياس أداء مفصّلة لتأكيد المكاسب علميًا وتجربة المزيد من التحسينات. لإجراء هذا التحليل، قدّم فريق الهندسة في Reddit إصدارَين من التطبيق: أحدهما بدون تحسينات والآخر تم تطبيق R8 عليه وأداتَين إضافيتَين لتحسين الأداء الأساسي: الملفات الشخصية للمرجع والملفات الشخصية لبدء التشغيل.
تنقل "الملفات الأساسية" خطوات التجميع أثناء التنفيذ (JIT) من أجهزة المستخدمين إلى أجهزة المطوّرين. وقد أثبت الرمز البرمجي الذي تم إنشاؤه باستخدام ميزة "الترجمة المسبقة" (AOT) أنّه يقلّل من وقت بدء التشغيل ومشاكل العرض على حد سواء.
عند تجميع تطبيق، يأخذ d8 dexer الفئات والطرق وينشئ ملفات classes.dex الخاصة بتطبيقك. عندما يفتح المستخدم التطبيق، يتم تحميل ملفات dex هذه، واحدًا تلو الآخر حتى يتمكن التطبيق من البدء. من خلال تقديم ملف بدء التشغيل، يمكنك إعلام d8 بالفئات والطُرق التي يجب تجميعها في ملفات classes.dex الأولى. تسمح هذه البنية للتطبيق بتحميل ملفات أقل، ما يؤدي بدوره إلى تحسين سرعة بدء التشغيل.
كانت أداة Jetpack Macrobenchmark هي الأداة الأساسية لهذه المرحلة، ما أتاح قياس تفاعلات المستخدمين بدقة في بيئة خاضعة للرقابة. لمحاكاة تجربة مستخدم عادية، استخدموا UIAutomator API لإنشاء اختبار يفتح التطبيق، ثم ينتقل للأسفل ثلاث مرات، ثم ينتقل للأعلى مرة أخرى.
في النهاية، كل ما كان مطلوبًا لكتابة مقياس الأداء هو ما يلي:
uiAutomator {
startApp(REDDIT)
repeat(3) {
onView { isScrollable }.fling(Direction.DOWN) }
repeat(3) {
onView {isScrollable }.fling(Direction.UP)
}
}أكّدت بيانات مقياس الأداء الملاحظات الميدانية وقدّمت إحصاءات أكثر تفصيلاً. بدأ التطبيق المحسَّن بالكامل بسرعة أكبر بنسبة %55 وتمكّن المستخدمون من بدء التصفّح بسرعة أكبر بنسبة %18. أظهر التطبيق المحسَّن أيضًا انخفاضًا بمقدار الثلثين في حالات التجميع أثناء التنفيذ (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 • مدّة القراءة: دقيقتان -
دراسات الحالةتتطلّب تطبيقات إثبات الهوية للخدمات المصرفية وتسجيل شريحة SIM التقاط صور واضحة وعالية الدقة للوجه من أجل رصد عمليات الانتحال والتزييف العميق. يواجه مطوّرو تطبيقات الكاميرا على Android تحديًا شائعًا يتمثل في التقاط لقطات واضحة بما يكفي لإجراء عمليات التحقّق من الحيوية ومكافحة الانتحال، بدون أن يؤدي ذلك إلى تعطُّل الأجهزة ذات الذاكرة المنخفضة
Donovan McMurray • مدّة القراءة: 4 دقائق -
دراسات الحالةGrab هو التطبيق الفائق الرائد في جنوب شرق آسيا، ويقدّم خدمات التوصيل والتنقّل والخدمات المالية لملايين المستخدمين في ثمانية بلدان من خلال تطبيق واحد.
Ajesh Pai, Nguyen Van Minh, Tracy Agyemang • مدّة القراءة: 5 دقائق
يمكنك الحصول على آخر الإحصاءات حول تطوير تطبيقات Android في بريدك الوارد أسبوعيًا.