نشرها بن فايس – كبير مهندسي علاقات المطورين

في عالم تطبيقات الهاتف المحمول اليوم، لا تعد تجربة المستخدم السلسة مجرد ميزة، بل هي ضرورة. يمكن أن تشكل أوقات التحميل البطيئة والواجهات غير المستجيبة وعدم الاستقرار عوائق كبيرة أمام مشاركة المستخدم والاحتفاظ به. أثناء عملهم مع فريق علاقات مطوري Android، الفريق الهندسي في رديت استخدم نقاط أداء التطبيق لتقييم تطبيقهم. وبعد تقييم أدائهم، حددوا إمكانات التحسين الكبيرة وقرروا اتخاذ الخطوات اللازمة لتمكين القوة الكاملة R8، مُحسِّن تطبيقات Android. أدت هذه المبادرة المركزة إلى تحسينات ملحوظة في أوقات بدء التشغيل، وانخفاض في الإطارات البطيئة أو المجمدة وأخطاء ANR، وزيادة إجمالية في تقييمات متجر Play. توضح دراسة الحالة هذه كيفية تحقيق Reddit لهذه النتائج المبهرة.
يعد R8 Optimizer أداة أساسية لتحسين الأداء على نظام Android. يستغرق الأمر عدة خطوات لتحسين أداء التطبيق. دعنا نلقي نظرة سريعة على الخطوات الأكثر تأثيرًا.
-
تهتز الشجرة هي أهم خطوة لتقليل حجم التطبيق. هنا، تتم إزالة التعليمات البرمجية غير المستخدمة من تبعيات التطبيق والتطبيق نفسه.
-
طريقة التبطين يستبدل استدعاءات الطريقة بالرمز الفعلي، مما يجعل التطبيق أكثر أداءً.
-
دمج الصف، ويتم تطبيق استراتيجيات أخرى لجعل التعليمات البرمجية أكثر إحكاما. في هذه المرحلة، لم يعد الأمر يتعلق بإمكانية قراءة الكود المصدري بعد الآن، ولكن جعل الكود المترجم يعمل بسرعة. لذا فإن التجريدات، مثل الواجهات أو التسلسلات الهرمية للفئات، لا تهم هنا وستتم إزالتها.
-
تصغير المعرف يغير أسماء الفئات والحقول والأساليب إلى أسماء أقصر لا معنى لها. لذلك بدلا من MyDataModel قد ينتهي بك الأمر بفصل دراسي يسمى أ.
-
تقلص الموارد يزيل الموارد غير المستخدمة مثل ملفات xml والرسومات لتقليل حجم التطبيق بشكل أكبر.
التسمية التوضيحية: المراحل الرئيسية لتحسين R8
شهد Reddit نتائج أداء محسنة فورًا بعد طرح إصدار جديد من التطبيق للمستخدمين. باستخدام الروبوت الحيوية و Crashlytics، تمكن Reddit من التقاط مقاييس الأداء على الأجهزة الحقيقية مع المستخدمين الفعليين، مما سمح لهم بمقارنة الإصدار الجديد مع الإصدارات السابقة.
التسمية التوضيحية: كيف قام R8 بتحسين أداء تطبيق Reddit
ولاحظ الفريق أ بدء تشغيل بارد أسرع بنسبة 40%، أ انخفاض بنسبة 30% في أخطاء “عدم استجابة التطبيق” (ANR).، أ تحسين بنسبة 25% في عرض الإطار، و أ تخفيض بنسبة 14% في حجم التطبيق.
تعتبر هذه التحسينات ضرورية لرضا المستخدم. بدء التشغيل الأسرع يعني انتظارًا أقل ووصولاً أسرع إلى المحتوى. يؤدي تقليل حالات ANR إلى تطبيق أكثر استقرارًا وموثوقية، مما يقلل من إحباط المستخدم. يعمل عرض الإطار الأكثر سلاسة على إزالة واجهة المستخدم غير المرغوب فيها، مما يجعل التمرير والرسوم المتحركة يبدو سلسًا وسريع الاستجابة. وكان هذا التأثير الفني الإيجابي واضحًا أيضًا في معنويات المستخدمين.
كانت مؤشرات رضا المستخدم عن نجاح التحسين مرئية مباشرة على متجر Google Play. بعد طرح الإصدار المحسّن لـ R8، شهد الفريق تحولًا كبيرًا وإيجابيًا في مشاعر المستخدم ومشاركته.
درو هيفنر: “تمكين أداة R8 الكاملة في أقل من أسبوعين”
والأكثر إثارة للإعجاب هو أن هذا تم إنجازه بجهد مركز. أشار درو هيفنر، مهندس برمجيات الموظفين في Reddit الذي عمل على هذه المبادرة، إلى أن تنفيذ التغييرات لتمكين إمكانات R8 الكاملة استغرق أقل من أسبوعين.
بعد ملاحظة التحسينات المهمة في العالم الحقيقي، أجرى فريق Reddit الهندسي وفريق علاقات مطوري Android في Google معايير تفصيلية لتأكيد المكاسب علميًا وتجربة المزيد من التحسينات. بالنسبة لهذا التحليل، قدمت هندسة Reddit نسختين من تطبيقها: أحدهما بدون تحسينات والآخر قابل للتطبيق ص8 وأداتين أساسيتين لتحسين الأداء: الملامح الأساسية، و ملفات تعريف بدء التشغيل.
تعمل ملفات التعريف الأساسية على نقل خطوات التجميع في الوقت المناسب (JIT) بشكل فعال بعيدًا عن أجهزة المستخدم وعلى أجهزة المطورين. لقد أثبت الكود المترجم الذي تم إنشاؤه مسبقًا (AOT) أنه يقلل من وقت بدء التشغيل ومشكلات العرض على حدٍ سواء.
عندما يتم حزم تطبيق ما، يأخذ d8 dexer الفئات والأساليب ويقوم بإنشاء التطبيق الخاص بك classs.dex ملفات. عندما يفتح المستخدم التطبيق، يتم تحميل ملفات dex هذه، واحدًا تلو الآخر حتى يتمكن التطبيق من بدء التشغيل. من خلال توفير أ ملف تعريف بدء التشغيل لقد سمحت لـ d8 بمعرفة الفئات والأساليب التي يجب حزمها في البداية classs.dex ملفات. تسمح هذه البنية للتطبيق بتحميل عدد أقل من الملفات، مما يؤدي بدوره إلى تحسين سرعة بدء التشغيل.
Jetpack ماكروبينتشمارك كانت الأداة الأساسية لهذه المرحلة، مما يسمح بقياس دقيق لتفاعلات المستخدم في بيئة خاضعة للرقابة. لمحاكاة رحلة مستخدم نموذجية، استخدموا واجهة برمجة تطبيقات UIAutomator لإنشاء اختبار، تم فتح التطبيق، والتمرير لأسفل ثلاث مرات، ثم التمرير لأعلى مرة أخرى.
في النهاية، كل ما هو مطلوب لكتابة المعيار هو:
uiAutomator {
ابدأالتطبيق (ريديت)
يكرر(3) {
onView { قابل للتمرير .fling(الاتجاه.أسفل) }
يكرر(3) {
onView {يمكن التمرير }.fling(Direction.UP)
}
}
وأكدت البيانات المعيارية الملاحظات الميدانية وقدمت رؤى أعمق. بدأ التطبيق الأمثل بالكامل أسرع بنسبة 55% ويمكن للمستخدمين البدء في التصفح 18% أسرع. أظهر التطبيق الأمثل أيضًا أ انخفاض بمقدار الثلثين في حالات التجميع في الوقت المناسب (JIT). و أ انخفاض بمقدار الثلث في وقت تجميع JIT. تم تحسين عرض الإطار، مما أدى إلى إطارات أكثر بنسبة 19% يتم تقديمها خلال رحلة المستخدم المعيارية. وأخيرًا، تم تقليل حجم التطبيق بأكثر من الثلث.
تسمية توضيحية: تحسينات أداء Reddit الشاملة
يمكنك قياس وقت التحويل البرمجي لـ JIT باستخدام مقياس قسم تتبع Macrobenchmark المخصص مثل هذا:
فال jitCompilationMetric = تتبع القسم متري (“تجميع JIT %”, ملصق = “تجميع JIT”)
لتمكين R8 في الوضع الكامل، يمكنك تكوين app/build.gradle.kts الملف عن طريق الإعداد miniifyEnabled و تقليص الموارد ل حقيقي في يطلق نوع البناء.
أندرويد {
…
أنواع البناء {
يطلق {
isMinifyEnabled = true
isShrinkResources = true
ملفات الحماية(
getDefaultProguardFile(“proguard-android-optimize.txt”)،
“keep-rules.pro”,
)
}
}
}
يجب أن يتبع هذه الخطوة اختبار شامل شامل، حيث أن تحسينات الأداء يمكن أن تؤدي إلى سلوك غير مرغوب فيه، والذي من الأفضل أن تكتشفه قبل أن يفعله المستخدمون.
كما هو موضح سابقًا في هذه المقالة، يقوم R8 بإجراء تحسينات واسعة النطاق من أجل زيادة فوائد الأداء إلى الحد الأقصى. يقوم R8 بإجراء تعديلات جوهرية على الكود بما في ذلك إعادة تسمية الفئات والحقول والأساليب ونقلها وإزالتها. إذا لاحظت أن هذه التعديلات تسبب أخطاء، فأنت بحاجة إلى تحديد أجزاء الكود R8 التي لا ينبغي تعديلها عن طريق الإعلان عن الأجزاء الموجودة في الحفاظ على القواعد.
يعد نجاح Reddit مع R8 بمثابة دراسة حالة قوية لأي فريق تطوير يتطلع إلى إحداث تأثير كبير ومنخفض الجهد على أداء تطبيقه. ويؤكد الارتباط المباشر بين التحسينات التقنية والارتفاع اللاحق في رضا المستخدمين على قيمة تحسين الأداء.
من خلال اتباع المخطط الموضح في دراسة الحالة هذه – باستخدام أدوات مثل نقاط أداء التطبيق لتحديد الفرص، وتمكين إمكانات التحسين الكاملة لـ R8، ومراقبة بيانات العالم الحقيقي، واستخدام المعايير لتأكيد الفهم وتعميقه – يمكن للمطورين الآخرين تحقيق مكاسب مماثلة.
لبدء استخدام R8 في تطبيقك الخاص، راجع الإصدار المحدث حديثًا التوثيق والتوجيه الرسمي حول تمكين مُحسِّن R8 وتكوينه واستكشاف الأخطاء وإصلاحها.

