مطالعات موردی

Tinder بااستفاده از «تحلیل‌گر پیکربندی R8» جدید، شروع سرد برنامه را تا ۴۷٪ کاهش می‌دهد

زمان خواندن: ۴ دقیقه

Tinder مأموریت دارد با آسان و سرگرم‌کننده کردن ملاقات برای هر نسل جدید از افراد مجرد، ارتباطات واقعی را تقویت کند و الهام‌بخش آن‌ها باشد. بااین‌حال، با افزایش اندازه پایگاه کد برنامه Android، پیچیدگی آن نیز افزایش یافت. پیش‌از آخرین تلاش‌های آن‌ها برای بهینه‌سازی، تقریباً ۷۰٪ برنامه بهینه‌سازی نشده بود و ۱۷ فایل dex داشت که سه مورد از آن‌ها فقط به راه‌اندازی اختصاص داشت. اگرچه آن‌ها R8 را فعال کرده بودند، اما بخش زیادی از پتانسیل بهینه‌سازی آن به‌دلیل قوانین نگهداری مسدود شده بود و تیم نمی‌توانست تشخیص دهد کدام قوانین خاص مانع بهینه‌سازی می‌شوند. Tinder برای کاهش زمان راه‌اندازی و کاهش خطاهای «برنامه پاسخ نمی‌دهد» (ANR) مشهود برای کاربر، از «تحلیل‌گر پیکربندی R8» جدید برای مقابله با این چالش‌ها استفاده کرد.

Tinder بااستفاده از R8 Configuration Analyzer، مسدودکننده‌های بهینه‌سازی ناخواسته را با موفقیت شناسایی و حذف کرد. نتایج فوری و تأثیرگذار بود: Tinder به کاهش ۴۷ درصدی در راه‌اندازی سرد برنامه دست یافت، اندازه بارگیری برنامه‌اش را ۲۸٫۹۸٪ (تا ۶۱٫۵ مگابایت) کاهش داد، و خطاهای ANR مشهود برای کاربر را ۲۸٪ کاهش داد.

تحلیل‌گر پیکربندی 

R8 Configuration Analyzer بهینه‌سازی R8 را با ردیابی امتیازهای کوچک‌سازی، بهینه‌سازی، و مبهم‌سازی نشان می‌دهد تا بخش‌های قابل‌بهبود را نمایش دهد. این گزارش قوانین نگهداری گسترده، زائد، یا منسوخ را نشان می‌دهد، ازجمله قوانین مربوط به کتابخانه‌های خارجی، تا بتوانید تأثیر قانون نگهداری را تحلیل کنید و قوانین نگهداری را اصلاح کنید.

سنجه‌های کلیدی نشان‌داده‌شده در «تحلیل‌گر پیکربندی» عبارت‌اند از:

  • امتیاز فشرده‌سازی کد: درصد کدی که برای فشرده‌سازی R8 دردسترس است.
  • امتیاز بهینه‌سازی: درصد کدی که برای بهینه‌سازی باز است (برای مثال، درون‌خطی کردن روش، ادغام کلاس افقی).
  • امتیاز مبهم‌سازی کد: درصد کلاس‌ها، روش‌ها، و فیلدهایی که R8 می‌تواند برای کاهش اندازه تغییر نام دهد.

از تحلیل‌گر برای ممیزی قوانین نگهداری و تأثیرات آن‌ها استفاده کنید:

  • یافتن قوانین گسترده: دامنه قوانین سراسری بسته را که بهینه‌سازی R8 را محدود می‌کنند محدود کنید و کلاس‌ها، روش‌ها، و فیلدهای خاصی را که از کوچک‌سازی، بهینه‌سازی، و مبهم‌سازی مستثنی شده‌اند شناسایی کنید.
  • قوانین را اصلاح کنید: فقط کلاس‌ها/روش‌های خاصی را که برای باز کردن قفل بهینه‌سازی به بازتاب نیاز دارند هدف قرار دهید
  • برداشتن قوانین زائد: قوانینی را که با هیچ کلاس، روش، یا فیلدی در ساخت فعلی شما مطابقت ندارند بردارید.
  • قوانین یکسان: قوانین حفظ یکسان به قوانینی گفته می‌شود که کلاس‌ها، فیلدها، و روش‌های یکسانی را هدف قرار می‌دهند یا اعلامیه‌های تکراری قانون حفظ در فایل‌های قانون حفظ یکسان یا متفاوت هستند.
  • پیدا کردن قوانین فرعی: قوانین خاصی را که قبلاً تحت پوشش پیکربندی‌های گسترده‌تر قرار گرفته‌اند پاک‌سازی کنید.
  • شناسایی کتابخانه‌های مشکل‌دار: تأثیر بهینه‌سازی ترکیبی قوانین حفظ مصرف‌کننده ادغام‌شده از همه کتابخانه‌ها را بررسی کنید.
R8-Configuration-Analyzer-Screenshot.png
گزارش «تحلیل‌گر پیکربندی R8» از یک برنامه نمونه

برای کمک به شما در استفاده از «تحلیل‌گر پیکربندی R8» با ابزارهای عاملی، مهارت تحلیل‌گر R8 را منتشر کرده‌ایم. این مهارت با خلاصه کردن گزارش «تحلیل‌گر پیکربندی R8» برای نمایش سنجه‌های کلیدی (بهینه‌سازی، مبهم‌سازی، و امتیازهای کوچک‌سازی)، گردش‌های کار توسعه خودکارشده را بهینه‌سازی می‌کند. همچنین پنج قانون حفظ تأثیرگذار را برجسته می‌کند و به شما بینش واضحی درباره آنچه بهینه‌سازی کد را مسدود می‌کند می‌دهد.

شناسایی دقیق مسدودکننده‌های پنهان بهینه‌سازی

تصویر.png

پیش‌از ادغام «تحلیل‌گر پیکربندی R8»، برنامه Android‏ Tinder به‌دلیل پایگاه کد به‌شدت بهینه‌نشده، از بدهی فنی قابل‌توجهی رنج می‌برد. این عدم بهینه‌سازی مستقیماً تجربه کاربری را تنزل داد و باعث شد کاربران شروع سرد آهسته را تجربه کنند 

برای حل این مشکلات، تیم Tinder از «تحلیل‌گر پیکربندی R8» استفاده کرد تا پیکربندی R8 خود را به‌طور جامع ممیزی کند. تحلیل‌گر نشان داد که بهینه‌سازی R8 پایگاه کد حتی با حالت کامل R8 حدود ۲۸٪ بود. بااستفاده از «تحلیل‌گر پیکربندی R8»،‏ Tinder متوجه شد که یک کتابخانه داخلی درحال معرفی یک قانون نگهداری گسترده و بدون محدوده است. 

# Prevents optimization in all public classes along with all of their public and protected members

-keep public class * {
    public protected *;
}

این قانون «گسترده» به‌طور ناخواسته وابستگی‌های مختلفی را در سراسر برنامه پوشش می‌داد و مانع از بهینه‌سازی در تعداد زیادی از کلاس‌ها می‌شد. چون قانون بیش‌ازحد فراگیر از خرابی زمان اجرا جلوگیری می‌کرد، توسعه‌دهندگان اغلب فراموش می‌کردند قوانین جدیدی برای ویژگی‌های جدیدی که از بازتاب استفاده می‌کردند اضافه کنند، و این امر باعث می‌شد مشکلات پنهان درطول زمان روی هم انباشته شوند.

با بهره‌گیری از اطلاعات آماری ارائه‌شده توسط «تحلیل‌گر پیکربندی R8»، تیم توانست کلاس‌های خاصی را که تحت‌تأثیر قانون حفظ گسترده از کتابخانه قرار گرفته بودند، با موفقیت ردیابی و تحلیل کند. تیم فوراً متوجه شد که بهینه‌سازی در کلاس‌های بزرگ‌تر و غیرپویا که R8 می‌توانست بهینه‌سازی را انجام دهد مسدود شده است. پالایش این قانون حفظ خاص به Tinder اجازه داد تا قابلیت‌های بهینه‌سازی قابل‌توجهی را باز کند، پیکربندی‌های قدیمی خود را باز کند، و اعداد بهینه‌سازی کلی خود را به‌طور چشمگیری بهبود بخشد، با افزایش امتیاز R8 از ۲۸٪ به ۵۰٪، که باعث افزایش عملکرد فوری در سراسر برنامه شد، و تیم Tinder فعالانه در تلاش است تا این رقم را بیشتر بهبود بخشد.

  • بار کردن سریع‌تر: این تیم توانست تعداد کاربرانی را که شروع سرد آهسته برنامه را تجربه می‌کردند ۴۷٪ کاهش دهد.
  • ردپای کوچک‌تر: اندازه بارگیری برنامه از ۸۶٫۶ مگابایت به ۶۱٫۵ مگابایت کاهش یافت (۲۸٫۹۸٪ کاهش).
  • پایداری بهبودیافته: خطاهای «برنامه پاسخ نمی‌دهد» (ANR) مشهود برای کاربر از ۰٫۳۵٪ به ۰٫۲۸٪ کاهش یافت و به‌طور قابل‌توجهی به میانه‌های همتا نزدیک‌تر شد
  • کاهش پیچیدگی: تعداد کل فایل‌های DEX از ۱۷ به ۱۱ کاهش یافت، ازجمله فقط دو فایل راه‌اندازی.

فراتر از این بهبودهای عملکرد فنی، افزایش بهینه‌سازی برنامه مستقیماً به رشد ملموس کسب‌وکار و تعامل بیشتر کاربر، به‌ویژه در بازارهای با منابع محدود، منجر شد.

  • تعامل منطقه‌ای: کشورهایی که دستگاه‌های با حافظه دسترسی تصادفی کم بخش بزرگی از بازار را به خود اختصاص می‌دهند، بیشترین افزایش را در تعامل نشان دادند و کاهش نرخ ANR کلید بهبود تعامل در این بازار وسیع بود.
  • رشد تعامل: تعامل از زمان افزایش بهینه‌سازی برنامه ۳٪ افزایش یافته است.
تصویر.png

محافظت از عملکرد آینده با ادغام مداوم

رسیدگی به کوچک‌سازی کد فقط یک اصلاح یک‌باره نیست؛ بلکه نیازمند هوشیاری مداوم است. تیم Android در Tinder با الهام از دستاوردهای عظیمی که ازطریق R8 Configuration Analyzer به‌دست آمده بود، پایش بهینه‌سازی را به‌طور فعال در گردش کار روزانه خود ادغام کرد تا از پس‌رفت جلوگیری کند.

تیم Tinder کار جدیدی به خط لوله CI/CD خود اضافه کرد تا تغییرات در آمار بهینه‌سازی را گزارش کند تا همه بتوانند ببینند مشارکتشان چگونه بر بهینه‌سازی تأثیر می‌گذارد.  هنگام مشاوره دادن به توسعه‌دهندگان دیگری که ادغام پیکربندی R8 را درنظر دارند، تیم بر اهمیت ممیزی وابستگی‌های داخلی تأکید می‌کند. درحالی‌که اکثر کتابخانه‌های طرف سوم پرطرفدار با قوانین کاملاً تعریف‌شده ارائه می‌شوند، پروژه‌های داخلی شرکت که «پایدار» درنظر گرفته می‌شوند ممکن است درواقع قوانین گسترده‌ای را معرفی کنند که بر بهینه‌سازی کلی تأثیر منفی می‌گذارد.

نکات کلیدی

Tinder با پایگاه کد بسیار بهینه‌نشده و حجم بالایی از فایل‌های DEX مواجه بود و به راهی برای ممیزی تمیز قوانین کوچک‌سازی برنامه‌اش نیاز داشت. «تحلیل‌گر پیکربندی R8» ابزار ایده‌آل لازم را برای شناسایی قوانین کتابخانه داخلی بیش‌ازحد گسترده، کلاس‌های تحت‌تأثیر قانون حفظ، فراهم کرد و به تیم اجازه داد تا پایگاه کد خود را با اطمینان بهینه‌سازی کند. درنتیجه، Tinder با موفقیت شروع‌های سرد را تقریباً به نصف کاهش داد، اندازه APK خود را بیش‌از ۲۸٪ کوچک کرد، و پایه‌ای سالم‌تر و با عملکرد بهتر برای کاربرانش ایجاد کرد، و تیم به‌طور فعال برای بهبود بیشتر این اعداد تلاش می‌کند.

نحوه استفاده از «تحلیل‌گر پیکربندی R8»

«تحلیل‌گر پیکربندی R8» و ویژگی‌های مستقل آن را می‌توان براساس نسخه فعلی «افزایه Android Gradle»‏ (AGP) شما استفاده کرد:

۱. نسخه AGP 9.3: «تحلیل‌گر پیکربندی R8» به‌طور کامل با AGP 9.3 ادغام و منتشر شده است. هنگام اجرای ساخت نسخه پخش R8، گزارش در پوشه `build/outputs/mapping/release/configanalyzer.html` تولید خواهد شد.

۲. تکلیف Gradle مستقل: AGP 9.3 تکلیف Gradle مستقلی را معرفی می‌کند که به شما امکان می‌دهد گزارش تحلیل‌گر را بدون اجرای ساخت نسخه پخش کامل تولید کنید، که این امر حلقه بازخورد بسیار سریع‌تری را هنگام پالایش محلی قوانین حفظ ارائه می‌دهد:

./gradlew :app:analyzeReleaseR8Config

گزارش در build/reports/r8/r8-config-analyzer-release.html. تولید می‌شود

۳. استفاده در نسخه‌های قدیمی‌تر AGP: اگر از نسخه‌ای قدیمی‌تر از AGP 9.3 استفاده می‌کنید، برای تجزیه‌وتحلیل پیکربندی‌تان نیازی به انتقال کل نسخه AGP ندارید. می‌توانید نسخه R8 را به‌طور مستقل به 9.3.7-dev یا بالاتر به‌روز کنید. برای این کار، دستورالعمل‌های جایگزین کردن R8 در AGP را دنبال کنید. برای تولید گزارش به‌صورت محلی، ساخت خود را با ویژگی مشخص‌شده اجرا کنید:

./gradlew assembleRelease  -Dcom.android.tools.r8.dumpkeepradiushtmltodirectory=<output_directory>

برای کسب اطلاعات بیشتر، به سند تحلیل‌گر پیکربندی R8 مراجعه کنید.

نویسنده:
ادامه خواندن