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

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

۴ دقیقه مطالعه
۳ نویسنده
Ajesh Pai, Ulises Uriel Verduzco Díaz , Tracy Agyemang

تیندر ماموریت دارد تا با آسان و سرگرم‌کننده کردن جلسات برای هر نسل جدیدی از مجردها، ارتباطات واقعی را تقویت و الهام بخشد. با این حال، با افزایش حجم کد برنامه اندروید آنها، پیچیدگی آن نیز افزایش یافت. قبل از آخرین تلاش‌های بهینه‌سازی آنها، تقریباً 70٪ از برنامه بهینه نشده بود و 17 فایل dex، از جمله سه فایل اختصاص داده شده فقط برای راه‌اندازی، در آن وجود داشت. اگرچه آنها R8 را فعال کرده بودند، اما بخش زیادی از پتانسیل بهینه‌سازی آن به دلیل حفظ قوانین مسدود شده بود و تیم قادر به شناسایی قوانین خاصی که مانع بهینه‌سازی می‌شدند، نبود. برای کاهش زمان راه‌اندازی و کاهش خطاهای عدم پاسخگویی برنامه (ANR) که توسط کاربر درک می‌شود، تیندر برای مقابله با این چالش‌ها به تحلیلگر پیکربندی R8 جدید روی آورد.

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

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

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

معیارهای کلیدی نشان داده شده در Configuration Analyzer عبارتند از:

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

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

  • یافتن قوانین کلی: دامنه قوانین سراسری بسته که بهینه‌سازی R8 را محدود می‌کنند، محدود کنید و کلاس‌ها، روش‌ها و فیلدهای خاصی را که از کوچک‌سازی، بهینه‌سازی و مبهم‌سازی مستثنی شده‌اند، شناسایی کنید.
  • اصلاح قوانین: فقط کلاس‌ها/روش‌های خاصی را که برای باز کردن قفل بهینه‌سازی نیاز به بازتاب دارند، هدف قرار دهید.
  • حذف قوانین اضافی : قوانینی را که با هیچ کلاس، متد یا فیلدی در ساختار فعلی شما مطابقت ندارند، حذف کنید.
  • قوانین یکسان : قوانین keep یکسان به قوانینی اطلاق می‌شود که کلاس‌ها، فیلدها و متدهای یکسانی را هدف قرار می‌دهند یا اعلان‌های تکراری از قانون keep را در فایل‌های قانون keep یکسان یا در فایل‌های مختلف آن دارند.
  • یافتن قوانین فرعی: قوانین خاصی را که قبلاً توسط پیکربندی‌های گسترده‌تر پوشش داده شده‌اند، پاک کنید.
  • کتابخانه‌های مشکل‌ساز را شناسایی کنید: تأثیر بهینه‌سازی ترکیبی قوانین ادغام‌شده‌ی نگهداری مصرف‌کننده از همه کتابخانه‌ها را بررسی کنید.
تصویر صفحه تحلیلگر پیکربندی R8.png
گزارش تحلیلگر پیکربندی R8 از یک برنامه نمونه

برای کمک به شما در استفاده از R8 Configuration Analyzer با ابزارهای agentic، ما یک مهارت R8 Analyzer منتشر کرده‌ایم. این مهارت با خلاصه کردن گزارش R8 Configuration Analyzer برای نمایش معیارهای کلیدی: بهینه‌سازی، مبهم‌سازی و کاهش امتیازها، گردش‌های کاری توسعه خودکار را بهینه می‌کند. همچنین پنج قانون Keep که بیشترین تأثیر را دارند را برجسته می‌کند و به شما بینش روشنی در مورد آنچه که بهینه‌سازی کد را مسدود می‌کند، می‌دهد.

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

تصویر.png

پیش از ادغام R8 Configuration Analyzer، برنامه اندروید Tinder به دلیل کدبیس به‌شدت بهینه‌سازی نشده، از بدهی فنی قابل توجهی رنج می‌برد. این عدم بهینه‌سازی مستقیماً تجربه کاربری را تخریب می‌کرد و منجر به شروع کند و سرد برنامه توسط کاربران می‌شد.

برای حل این مشکلات، تیم تیندر از R8 Configuration Analyzer برای بررسی جامع پیکربندی R8 خود استفاده کرد. این تحلیلگر نشان داد که بهینه‌سازی R8 در پایگاه کد، حتی با حالت کامل R8، حدود 28 درصد بوده است. با R8 Configuration Analyzer، تیندر متوجه شد که یک کتابخانه داخلی، یک قانون Keep گسترده و بدون دامنه را معرفی می‌کند.

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

-keep public class * {
    public protected *;
}

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

با بهره‌گیری از بینش‌های ارائه شده توسط تحلیلگر پیکربندی R8، تیم با موفقیت کلاس‌های خاصی را که تحت تأثیر قانون کلی keep از کتابخانه قرار گرفته بودند، ردیابی و تجزیه و تحلیل کرد. تیم بلافاصله متوجه شد که بهینه‌سازی در کلاس‌های بزرگ‌تر و غیرپویا که R8 می‌توانست بهینه‌سازی را در آنها انجام دهد، مسدود شده است. اصلاح این قانون خاص keep به Tinder اجازه داد تا قابلیت‌های بهینه‌سازی قابل توجهی را آزاد کند، پیکربندی‌های قدیمی خود را از هم جدا کند و تعداد کلی بهینه‌سازی خود را به طرز چشمگیری بهبود بخشد، به طوری که امتیازات R8 از 28٪ به 50٪ افزایش یافت و باعث افزایش فوری عملکرد در سراسر برنامه شد و تیم Tinder به طور فعال در تلاش است تا این رقم را بیشتر بهبود بخشد.

  • بارگذاری سریع‌تر: این تیم به کاهش ۴۷ درصدی تعداد کاربرانی که هنگام شروع سرد برنامه، کند ظاهر می‌شدند، دست یافت.
  • حجم کمتر: حجم دانلود برنامه از ۸۶.۶ مگابایت به ۶۱.۵ مگابایت کاهش یافته است (۲۸.۹۸٪ کاهش).
  • پایداری بهبود یافته: خطاهای عدم پاسخگویی برنامه (ANR) از نظر کاربر از 0.35٪ به 0.28٪ کاهش یافته و آنها را به طور قابل توجهی به اعداد میانگین همتا نزدیک‌تر می‌کند.
  • کاهش پیچیدگی: تعداد کل فایل‌های DEX از ۱۷ به ۱۱ کاهش یافت، که شامل تنها دو فایل راه‌اندازی می‌شود.

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

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

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

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

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

نکات کلیدی

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

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

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

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

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

./gradlew :app:analyzeReleaseR8Config

این گزارش در build/reports/r8/r8-config-analyzer-release.html.

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

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

برای کسب اطلاعات بیشتر، به مستندات R8 Configuration Analyzer مراجعه کنید.

نوشته شده توسط:
ادامه مطلب