مِخبارMIKHBAR
الروبوتات

Grab تخفض زمن بدء التشغيل 35% وتقلل الأخطاء عبر تحسينات R8

اعتمدت منصة Grab على تحسينات عميقة في بنية التطبيق لتجاوز تحديات حجم الكود الضخم، محققة مكاسب ملموسة في الأداء والاستقرار.

Grab تخفض زمن بدء التشغيل 35% وتقلل الأخطاء عبر تحسينات R8

تحديات تطبيق ضخم في جنوب شرق آسيا

تواجه شركة Grab، التي تعد التطبيق الخارق الرائد في جنوب شرق آسيا، تحديات هندسية معقدة نظراً لحجم كودها الذي يتجاوز 10 ملايين سطر ويضم مئات المكتبات الخارجية. كانت هذه البنية الهجينة تعتمد على نظامي Bazel وGradle، مما أدى إلى ارتفاع معدلات أخطاء عدم الاستجابة (ANR) وزيادة تدريجية في حجم التطبيق وزمن بدء التشغيل عاماً بعد عام.

لم تكن هذه المشاكل تقنية فحسب، بل أثرت مباشرة على تجربة ملايين المستخدمين في ثمانية دول. سعت فرق التطوير إلى إيجاد حلول جذرية لتقليل التأخير في الإقلاع البارد (Cold Start) والحد من القفزات المفاجئة في معدل الأخطاء بعد كل تحديث أسبوعي، وهو ما كان سببه الرئيسي تكلفة قراءة ملفات DEX العديدة أثناء تهيئة التطبيق.

Grab تخفض زمن بدء التشغيل 35% وتقلل الأخطاء عبر تحسينات R8
صورة مرتبطة بالخبر من Android Developers · المصدر: Android Developers

دور ملفات Baseline Profiles في معالجة الأخطاء

رغم توفر ملفات السحابة من Google Play لتحسين المسارات القياسية، إلا أنها لم تغطي جميع مسارات التهيئة الحرجة الخاصة بمسارات المستخدمين في Grab، مثل تهيئة رسوميات الاعتماديات Dagger عند بدء التشغيل. كان الاعتماد على الترجمة الفورية (JIT) في الأيام التالية للتركيب غير كافٍ لضمان الأداء الفوري.

حلّت Grab هذه المشكلة من خلال تنفيذ ملف Baseline Profile مخصص، مما سمح بتضمين هذه المسارات الحرجة مباشرة في ملفات السحابة. هذا الإجراء وسّع نطاق التحسين بحيث تم تجميع المسارات الرئيسية إلى كود آلة فور التثبيت، بدلاً من انتظار التحسين في الخلفية، مما أسهم بشكل مباشر في القضاء على ذروات الأخطاء بعد الإصدار.

Grab تخفض زمن بدء التشغيل 35% وتقلل الأخطاء عبر تحسينات R8
صورة مرتبطة بالخبر من Android Developers · المصدر: Android Developers

المرحلة الأولى: تفعيل تحسينات R8

بدأت رحلة التحسين في عام 2025 بالانتقال من ملفات Proguard التقليدية إلى إعدادات proguard-android-optimize.txt التي تفعّل محسن R8. نظراً لعمر قاعدة الكود الذي يتجاوز عقداً، تطلب هذا التحول معالجة إعدادات قديمة واستخدامات الانعكاس (Reflection) بشكل دقيق لتجنب كسر الوظائف الحالية.

أثمرت هذه المرحلة الأولى، عند دمجها مع ملفات Baseline وStartup Profiles، عن نتائج فورية ملموسة. شهدت الشركة انخفاضاً بنسبة 25% في معدل أخطاء ANR التي يدركها المستخدم، وتقليصاً لحجم التحميل بنسبة 16%، وتحسناً بنسبة 27% في زمن بدء التشغيل البارد، مما وضع أساساً متيناً للمراحل اللاحقة.

المرحلة الثانية: الانتقال إلى وضع R8 الكامل

بعد تسعة أشهر من الإطلاق الأولي، انتقلت Grab في عام 2026 إلى وضع R8 Full Mode، وهو وضع يفتح آفاقاً أوسع للتحسينات المتقدمة. بينما عملت المكتبات القياسية مثل Retrofit وFirebase بسلاسة مع القواعد المدمجة، تطلب بقية قاعدة الكود الضخمة معالجة مسارات تعتمد بشكل كبير على الانعكاس.

واجه الفريق تحدياً خاصاً مع الوكلاء الديناميكيين في Java، حيث لا يمكن لـ R8 اكتشاف استخدامات وقت التشغيل، مما يؤدي إلى حذف الفئات اللازمة وتسبب في انهيار التطبيق. بدلاً من تطبيق استثناءات واسعة تزيد من حجم التطبيق، عززت الفرق قواعد الاحتفاظ (Keep Rules) المستهدفة بدقة للحفاظ على الاستقرار دون التضحية بالكفاءة.

أسفر هذا الانتقال عن مكاسب تراكمية كبيرة، شملت انخفاضاً إضافياً بنسبة 14% في حجم التحميل، وتحسناً بنسبة 10% في زمن البدء، وانخفاضاً بنسبة 10% أخرى في أخطاء ANR. كما ساعدت قواعد الاحتفاظ من إصدار Gson الأخير في ضمان تحليل JSON سلس دون تعقيدات إضافية.

Grab تخفض زمن بدء التشغيل 35% وتقلل الأخطاء عبر تحسينات R8
صورة مرتبطة بالخبر من Android Developers · المصدر: Android Developers

الحوكمة المستمرة وتحليل الإعدادات

تركز المرحلة الأخيرة من استراتيجية Grab على ضمان صحة قاعدة الكود على المدى الطويل من خلال المراقبة المستمرة للأداء. دمج الفريق أداة R8 Configuration Analyzer في سير عمل التقييم لقياس مدى فعالية قواعد الاحتفاظ في السماح لـ R8 بالتحسين والتقليص والتعمية.

أظهرت النتائج تحسناً في درجات التحسين من 72% إلى 78.2%، ودرجات التقليص من 73% إلى 79.1%، ودرجات التعمية من 79.6% إلى 81.7%. هذا التحليل الدقيق مكن الفريق من بناء حواجز حماية في أنظمة التكامل المستمر (CI) لضمان التزام الكود الجديد بمعايير الأداء الصارمة.

Grab تخفض زمن بدء التشغيل 35% وتقلل الأخطاء عبر تحسينات R8
صورة مرتبطة بالخبر من Android Developers · المصدر: Android Developers

تجاوز العقبات التقنية في الاختبار والبناء

لم تكن عملية التحول خالية من الصعوبات، خاصة مع وجود حالات حدية ناتجة عن سنوات من تراكم استخدامات الانعكاس. نظراً لاستحالة اختبار شامل لملايين الأسطر، اتبع الفريق نهجاً تدريجياً يركز على اختبار الكود المغطى بقواعد الاحتفاظ التي تم تضييقها، مع تحسين تلك القواعد لتستهدف الفئات المطلوبة فقط.

كما تطلبت البنية الهجينة للبناء (Bazel للتصحيح وGradle للإصدارات) معالجة فجوة في زمن التغذية الراجعة، حيث استغرقت التغييرات التجريبية حتى ساعتين في أنظمة CI عن بُعد. لسد هذه الفجوة، محاكت Grab سلوك R8 الإنتاجي في بناءات QA اليومية وأتمتت جمع الملفات الأساسية مثل mapping.txt لتسهيل التحقيق السريع في أي مشاكل.

المصادر

  • Android DevelopersGrab Reduces ANRs by 32% and improves startup time by 35% with R8 and Profile guided optimization

تابع التسلسل الزمني

تغطية الكيانات المرتبطة