رویدادها و برنامه‌ها

از R8 برای کوچک کردن، بهینه‌سازی، و تسریع برنامه‌تان استفاده کنید

‫۵ دقیقه خواندن
مشاهده نمایه بن وایس
Ben Weiss مهندس روابط توسعه‌دهندگان

استفاده از R8 برای کوچک کردن، بهینه‌سازی، و تسریع برنامه

به روز اول «هفته برجسته عملکرد Android» خوش آمدید!

کار را با تأثیرگذارترین و کم‌زحمت‌ترین تغییری که می‌توانید برای بهبود عملکرد برنامه‌تان ایجاد کنید شروع می‌کنیم: فعال کردن بهینه‌ساز R8 در حالت کامل.

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

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

پس‌از خواندن این مقاله، مقدمه «هفته برجسته‌سازی عملکرد» درباره بهینه‌ساز R8 را در YouTube ببینید.

چگونه R8 عملکرد برنامه‌تان را بهبود می‌بخشد

تصویر.png

بیایید به بزرگ‌ترین گام‌هایی که بهینه‌ساز R8 برای بهبود عملکرد برنامه برمی‌دارد بپردازیم.

تکان دادن درخت مهم‌ترین مرحله برای کاهش اندازه برنامه است. درطول این مرحله، بهینه‌ساز R8 کد استفاده‌نشده را از کتابخانه‌هایی که برنامه‌تان به آن‌ها وابسته است و همچنین کد مرده را از پایگاه کد خودتان برمی‌دارد.

درون‌خطی کردن روش فراخوانی روش را با کد واقعی جایگزین می‌کند که عملکرد زمان اجرا را بهبود می‌بخشد.

ادغام کلاس و استراتژی‌های دیگر برای فشرده‌تر کردن کد اعمال می‌شود. همه انتزاع‌های زیبای شما، مانند رابط‌ها و سلسله‌مراتب کلاس‌ها، در این مرحله اهمیتی ندارند و احتمالاً حذف خواهند شد.

از کوچک‌سازی کد برای تغییر نام کلاس‌ها، فیلدها، و روش‌ها به نام‌های کوتاه‌تر و بی‌معنی استفاده می‌شود. بنابراین به‌جای MyDataModel ممکن است کلاسی با نام a داشته باشید. این موضوع بیشترین سردرگمی را هنگام خواندن ردیابی‌های پشته از یک برنامه بهینه‌سازی‌شده با R8 ایجاد می‌کند. (توجه داشته باشید که ما این مورد را در AGP 9.0 بهبود داده‌ایم!)

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

با اعمال این مراحل، بهینه‌ساز R8 زمان راه‌اندازی برنامه را بهبود می‌بخشد، پرداز روان‌تر واسط کاربر را با قاب‌های آهسته و ثابت کمتر فعال می‌کند، و استفاده کلی از منابع درون‌دستگاهی را بهبود می‌بخشد.

مطالعه موردی: بهبود عملکرد Reddit با R8

به‌عنوان نمونه‌ای از بهبودهای عملکردی که R8 می‌تواند ایجاد کند، بیایید نگاهی به نمونه‌ای از Reddit بیندازیم. پس‌از فعال کردن R8 در حالت کامل، برنامه Reddit برای Android بهبودهای عملکردی قابل‌توجهی را در بخش‌های مختلف تجربه کرد.

تصویر.png

زیرنویس: چگونه R8 عملکرد برنامه Reddit را بهبود بخشید

این تیم شاهد راه‌اندازی سرد ۴۰٪ سریع‌تر، کاهش ۳۰٪ در خطاهای «برنامه پاسخ نمی‌دهد» (ANR)، بهبود ۲۵٪ در پرداز فریم، و کاهش ۱۴٪ در اندازه برنامه بود.

این بهبودها برای رضایت کاربر حیاتی هستند. راه‌اندازی سریع‌تر به‌معنای انتظار کمتر و دسترسی سریع‌تر به محتوا است. خطاهای ANR کمتر منجر به برنامه‌ای پایدارتر و قابل‌اعتمادتر می‌شود و نارضایتی کاربر را کاهش می‌دهد. پرداز روان‌تر قاب، لرزش واسط کاربر را برطرف می‌کند و باعث می‌شود پیمایش و پویانمایی‌ها روان و واکنش‌گرا به‌نظر برسند. این تأثیر فنی مثبت در احساسات کاربر نیز به‌وضوح قابل‌مشاهده بود.

می‌توانید درباره بهبودهای آن‌ها در وبلاگ ما بیشتر بخوانید.

عوارض جانبی غیرفنی استفاده از R8

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

تصویر.png

پس بیایید آن را همان چیزی که هست بنامیم: بهینه‌سازی عمدی عملکرد یک فضیلت است.

راهنمایی شما به برنامه‌ای با عملکرد بهتر

شنیدیم که راهنمای توسعه‌دهنده ما برای R8 نیاز به بهبود دارد. بنابراین دست‌به‌کار شدیم. راهنمای توسعه‌دهنده برای بهینه‌ساز R8 اکنون بسیار کاربردی‌تر است و راهنمایی جامعی برای فعال کردن و اشکال‌زدایی R8 ارائه می‌دهد.

این سند شما را درزمینه استراتژی سطح بالا برای پذیرش راهنمایی می‌کند و بر اهمیت انتخاب کتابخانه‌های مناسب برای بهینه‌سازی و، از همه مهم‌تر، پذیرش تدریجی ویژگی‌های R8 برای اطمینان از پایداری تأکید می‌کند. این رویکرد مرحله‌ای به شما امکان می‌دهد به‌طور ایمن از مزایای R8 بهره‌مند شوید و درعین‌حال راهنمایی‌هایی درباره مشکلات دشوار برای اشکال‌زدایی ارائه می‌دهد.

راهنمای Keep Rules را که سازوکار اصلی برای کنترل بهینه‌ساز R8 است به‌طور قابل‌توجهی گسترش داده‌ایم. اکنون بخشی را ارائه می‌دهیم که توضیح می‌دهد «قوانین نگهداری» چیست، چگونه آن‌ها را اعمال کنید، و شما را با روال‌های مطلوب برای نوشتن و حفظ آن‌ها راهنمایی می‌کند. همچنین موارد استفاده و مثال‌های کاربردی و عملی ارائه می‌دهیم تا به شما کمک کنیم متوجه شوید چگونه به‌درستی از حذف کدهای موردنیاز در زمان اجرا توسط R8 جلوگیری کنید، مانند کدهایی که ازطریق بازتاب یا استفاده از میانای بومی JNI قابل‌دسترسی هستند.

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

فعال کردن تمام قابلیت‌های بالقوه بهینه‌ساز R8

بهینه‌ساز R8 از نسخه ۸.۰ افزایه Android Gradle به‌طور پیش‌فرض از «حالت کامل» استفاده می‌کند. اگر پروژه شما طی سال‌های متمادی توسعه یافته است، ممکن است هنوز پرچم قدیمی برای غیرفعال کردن آن داشته باشد. فایل gradle.properties را برای این خط بررسی کنید و آن را بردارید.

android.enableR8.fullMode=false // delete this line to enable R8's full potential

اکنون بررسی کنید که آیا R8 را در فایل build.gradle.kts برنامه‌تان برای نسخه انتشار فعال کرده‌اید یا نه. این ویژگی با تنظیم isMinifyEnabled و isShrinkResources روی true فعال می‌شود. همچنین می‌توانید فایل‌های پیکربندی پیش‌فرض و سفارشی را در این مرحله ارسال کنید.

release {

   isMinifyEnabled = true

   isShrinkResources = true

   proguardFiles(

       getDefaultProguardFile("proguard-android-optimize.txt"),

       "keep-rules.pro"

   )

}

مطالعه موردی: بهبود عملکرد Disney+‎

مهندسان Disney+ روی عملکرد برنامه سرمایه‌گذاری می‌کنند و درحال بهینه‌سازی تجربه کاربری برنامه هستند. گاهی اوقات حتی تغییرات به‌ظاهر کوچک می‌تواند تأثیر بزرگی داشته باشد. تیم درحین بررسی پیکربندی R8 خود متوجه شد که از پرچم -dontoptimize استفاده می‌شود. این ویژگی توسط یک فایل پیکربندی پیش‌فرض معرفی شد که هنوز هم در بسیاری از برنامه‌های امروزی استفاده می‌شود.

پس‌از جایگزین کردن proguard-android.txt با proguard-android-optimize.txt، تیم Disney+‎ بهبودهای قابل‌توجهی در عملکرد برنامه‌شان مشاهده کردند.

تصویر.png

پس‌از عرضه نسخه جدید برنامه حاوی این تغییر برای کاربران، Disney+‎ شاهد راه‌اندازی ۳۰٪ سریع‌تر برنامه و ۲۵٪ کاهش در خطاهای ANR مشهود برای کاربر بود. 

امروزه بسیاری از برنامه‌ها هنوز از فایل proguard-android.txt استفاده می‌کنند که حاوی پرچم dontoptimize- است. و اینجاست که بهبودهای ابزارسازی ما وارد عمل می‌شوند.

پشتیبانی ابزار

از نوویژگی Android Studio Narwhal 3، هنگام استفاده از proguard-android.txt هشدار lint خواهید دید

تصویر.png

و از AGP 9.0 به بعد، پشتیبانی از این فایل را به‌طور کامل متوقف می‌کنیم. این یعنی باید به proguard-android-optimize.txt منتقل شوید.

همچنین روی ویژگی‌های جدید «استودیو Android» سرمایه‌گذاری کرده‌ایم تا اشکال‌زدایی کد بهینه‌شده با R8 را آسان‌تر از همیشه کنیم. از AGP 9.0 به بعد، اکنون می‌توانید ردگیری‌های پشته را در logcat در Android Studio برای ساخت‌های پردازش‌شده با R8 به‌طور خودکار ابهام‌زدایی کنید، که به شما کمک می‌کند خط دقیق کدی را که باعث مشکل شده است، حتی در یک برنامه کاملاً بهینه‌شده، مشخص کنید. این موضوع به‌طور عمیق‌تر در پست وبلاگ فردا در این هفته Spotlight عملکرد Android پوشش داده خواهد شد.

مراحل بعدی

مقدمه «هفته برجسته عملکرد» درباره بهینه‌ساز R8 را در YouTube ببینید.

📣 در «چالش عملکرد» شرکت کنید!

وقت آن است که مزایا را خودتان ببینید.

از شما می‌خواهیم که حالت کامل R8 را برای برنامه‌تان امروز فعال کنید.

  1. برای شروع، راهنماهای توسعه‌دهنده ما را دنبال کنید: فعال کردن بهینه‌سازی برنامه.
  2. بررسی کنید که آیا هنوز از proguard-android.txt استفاده می‌کنید و آن را با proguard-android-optimize.txt جایگزین کنید.
  3. سپس، تأثیر را بسنجید. فقط تفاوت را احساس نکنید، آن را درستی‌سنجی کنید. با اقتباس کردن کد از  برنامه نمونه Macrobenchmark در GitHub، بهبود عملکردتان را بسنجید تا زمان‌های راه‌اندازی را قبل و بعداز آن اندازه‌گیری کنید.

مطمئنیم که بهبود قابل‌توجهی در عملکرد برنامه‌تان خواهید دید. برای هرگونه سؤال درباره فعال‌سازی یا عیب‌یابی R8، از optimizationEnabled #استفاده کنید. ما اینجاییم تا به شما کمک کنیم.

سؤالاتتان را برای جلسه «از Android بپرسید» در روز جمعه آماده کنید

بااستفاده از برچسب اجتماعی AskAndroid#، هرگونه سؤال درباره عملکرد را مطرح کنید. درطول هفته سؤالات شما را پایش می‌کنیم و به چند سؤال در جلسه «از Android بپرسید» درباره عملکرد در روز جمعه ۲۱ نوامبر پاسخ خواهیم داد. منتظر فردا باشید، فردا عمیق‌تر به اشکال‌زدایی و عیب‌یابی خواهیم پرداخت. ولی فعلاً با R8 شروع کنید و برنامه‌تان را در مسیر سریع قرار دهید.

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