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

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

مطالعه ۵ دقیقه‌ای
Ben Weiss
مهندس روابط توسعه‌دهنده

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

به روز اول هفته بررسی عملکرد اندروید خوش آمدید!

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

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

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

بعد از خواندن این مقاله، معرفی بهینه‌ساز R8 در هفته‌ی Performance Spotlight را در یوتیوب ببینید.

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

تصویر.png

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

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

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

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

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

کاهش منابع، با حذف منابع بلااستفاده مانند فایل‌های xml و drawableها، حجم برنامه را بیشتر کاهش می‌دهد.

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

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

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

تصویر.png

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

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

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

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

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

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

تصویر.png

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

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

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

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

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

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

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

بهینه‌ساز R8 از نسخه ۸.۰ افزونه اندروید 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"

   )

}

مطالعه موردی: بهبود عملکرد دیزنی پلاس

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

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

تصویر.png

پس از انتشار نسخه جدید برنامه حاوی این تغییر برای کاربران، دیزنی‌پلاس شاهد ۳۰٪ افزایش سرعت راه‌اندازی برنامه و ۲۵٪ کاهش ANR از نظر کاربر بود.

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

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

با شروع از اندروید استودیو Narwhal 3 Feature Drop ، هنگام استفاده از proguard-android.txt یک هشدار lint مشاهده خواهید کرد.

تصویر.png

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

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

مراحل بعدی

معرفی برنامه‌ی Performance Spotlight Week در مورد بهینه‌ساز R8 را در یوتیوب ببینید.

📣 در چالش اجرا شرکت کنید!

وقتشه که خودتون فوایدش رو ببینید.

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

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

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

سوالات خود را برای جلسه «از اندروید بپرسید» در روز جمعه بیاورید

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

    نوشته شده توسط:

    ادامه مطلب