پروفایلهای پایه با اجتناب از مراحل کامپایل مفسر و JIT برای سفرهای رایج کاربر، سرعت اجرای کد را تا 30٪ بهبود میبخشند. پروفایلهای پایه به شما امکان میدهند سفرهای کاربری را که میخواهید بهینه کنید انتخاب کنید و میتوانند به بهبود راهاندازی برنامه، کاهش خطاهای ناخواسته و موارد دیگر کمک کنند - که به نوبه خود منجر به بهبود معیارهای تجاری، مانند حفظ کاربر و رتبهبندی میشود. درباره پروفایلهای پایه بیشتر بدانید .
تیم تقویم اندروید، پروفایلهای پایه (Baseline Profiles) را پیادهسازی کرد و شاهد بهبود حدود ۲۰ درصدی زمان راهاندازی برنامه و کاهش حدود ۵۰ درصدی فریمهای کند یا هنگشده بود. در اینجا کارهایی که آنها برای دستیابی به این بهبودهای عملکردی انجام دادند، از دلیل تصمیم آنها برای استفاده از پروفایلهای پایه گرفته تا نحوه اندازهگیری تأثیر آنها، آورده شده است.
پروفایلهای ابری در مقابل پروفایلهای پایه
تیم تقویم اندروید پیش از این از Cloud Profiles استفاده میکرده است که یکی دیگر از روشهای بهینهسازی هدایتشده توسط پروفایل (PGO) مبتنی بر تعاملات کاربر در دنیای واقعی با برنامه است. در اینجا نحوه مقایسه Cloud Profiles و Baseline Profiles آورده شده است:
| نوع پروفیل | تنظیم کنید | سفرهای کاربر گنجانده شده است | وقتی پایگاه کاربر است، بهترین عملکرد را دارد | تأثیر محقق شد | نسخههای اندروید پشتیبانیشده |
|---|---|---|---|---|---|
پروفایلهای ابری | به طور پیشفرض فعال است | به طور خودکار بر اساس دادههای کاربر در دنیای واقعی انتخاب میشود | بزرگ | ظرف چند روز | اندروید ۹ (سطح API 28) و بالاتر |
پروفایلهای پایه | پیکربندی شده توسط شما | انتخاب شده توسط شما | همه اندازهها | فوری | اندروید ۷ (سطح API 24) و بالاتر |
یکی از دلایل اصلی که تیم تقویم اندروید تصمیم گرفت پروفایلهای پایه را به کدبیس خود اضافه کند، این بود که آنها در حال حرکت به سمت چرخه انتشار سریعتر و هفتگی بودند. در حالی که پروفایلهای ابری افزایش عملکرد قابل توجهی را ارائه میدهند، ۱-۲ روز پس از راهاندازی برنامه طول میکشد تا به اوج تأثیر خود برسند، زیرا به جمعآوری دادههای کاربران در دنیای واقعی متکی هستند. تکمیل پروفایلهای ابری با پروفایلهای پایه، به کاربران زمان بیشتری میدهد تا قبل از انتشار نسخه بعدی برنامه، اوج بهبود عملکرد را تجربه کنند.
علاوه بر این، برای تیم تقویم اندروید مهم بود که بتوانند انتخاب کنند کدام سفرهای حیاتی کاربر (CUJ) به طور خاص در پروفایل گنجانده شوند، که میتوانید با استفاده از پروفایلهای پایه این کار را انجام دهید.
به طور کلی، برای بهترین نتایج عملکرد، توصیه میکنیم علاوه بر پروفایلهای ابری که به طور پیشفرض فعال هستند، از پروفایلهای پایه نیز استفاده کنید.
سفرهای کاربر گنجانده شده است
تیم تقویم اندروید تصمیم گرفت دو CUJ را در پروفایلهای پایه خود بگنجاند:
- باز کردن برنامه در نمای زمانبندی: در ابتدا نمای پیشفرض، بنابراین بهینهسازی برای کاربرانی که برای اولین بار از برنامه استفاده میکنند یا کسانی که تنظیمات پیشفرض را تغییر نمیدهند، مهم است.
- باز کردن برنامه در نمای ماهانه: نمای انتخاب شده برای بسیاری از کاربران، بر اساس دادههای کاربر. برای ردیابی نحوه استفاده کاربران از برنامه شما، میتوانید از ابزارهایی مانند Firebase استفاده کنید.
به طور کلی، شما باید CUJ هایی را که برای کسب و کار سودآور هستند (در صورت وجود) و CUJ هایی را که رایج تر هستند اضافه کنید. برای کسب اطلاعات بیشتر در مورد نحوه انتخاب CUJ ها برای بهینه سازی، به بخش موارد مورد نیاز مراجعه کنید.
پیادهسازی
تیم تقویم اندروید از یک پوشش داخلی برای کتابخانه Jetpack Macrobenchmark استفاده میکند تا پروفایلهای پایه را برای سهولت ادغام با ابزارهای داخلی و مقیاسپذیری عمومی تولید کند.
در اینجا پیکربندی تست Macrobenchmark برای باز کردن برنامه در نمای زمانبندی آمده است:
@Test
fun generateProfile() =
baselineProfileRule.collect(PACKAGE_NAME, includeInStartupProfile = true) {
uiAutomator {
startApp(packageName = PACKAGE_NAME)
// Verify pre-existing recurring events and tasks are shown.
// onElement waits for the element by default
onElement { textAsString() == "Recurring event" }
onElement { textAsString() == "Recurring task" }
// Open drawer and verify selected view.
onElement { contentDescriptionAsString() == "Show Calendar List and Settings drawer" }.click()
onElement { contentDescriptionAsString() == "Schedule view, Selected" }
}
}
موارد زیر را جایگزین کنید:
- PACKAGE_NAME : نام بستهی برنامهای که میخواهید پروفایلهای پایه برای آن تولید کنید.
اندازهگیری تأثیر با استفاده از رهاسازیهای کنترلشده
از آنجایی که پروفایلهای پایه (Baseline Profiles) به شدت با APK که با آن ارسال میشوند، مرتبط هستند و قبل از اجرای برنامه شما در آن گنجانده میشوند، اجرای یک آزمایش استاندارد A/B برای درک تأثیر آنها امکانپذیر نیست. با این حال، تیم تقویم اندروید توانست با استفاده از انتشارهای کنترلشده (Controlled Releases ) که در آن اساساً نسخه جدید برنامه را فقط برای زیرمجموعهای از کاربران منتشر میکنید و آنها را با کاربرانی که نسخهای مشابه نسخه قبلی دارند مقایسه میکنید، اندازهگیری دقیقی از تأثیر آنها به دست آورد.
با پروفایلهای پایه، آنها شاهد بهبودهای فوری و قابل توجه زیر در چندین زمینه بودند. این آمار در طیف وسیعی از دستگاهها و در بین همه کاربران جمعآوری شده است - کسانی که در نمای برنامه و ماه شروع میکنند، احتمالاً بیشترین مزایا را به دست میآورند، اما سایر کاربران نیز به دلیل بهینهسازی فرآیندهای مشترک مانند بارگیری دادههای تقویم از پایگاه داده، سود میبرند.
- میانگین تأخیر در شروع برنامه تعاملی (رایجترین سناریو) از ۷۷۵ میلیثانیه به ۶۴۴ میلیثانیه (۱۷٪) کاهش یافت.
- میانگین تأخیر شروع سرد از ۱۰۵۸ میلیثانیه به ۹۰۱ میلیثانیه (۱۵٪) کاهش یافت.
- میانگین تأخیر شروع گرم از ۴۵۳ میلیثانیه به ۳۷۸ میلیثانیه (۱۷٪) کاهش یافت.
- نرخ فریم ریت متوسط 42 تا 60 درصد در نمایشهای برنامهای و ماهانه کاهش یافته است.
به خاطر داشته باشید که اگر از Cloud Profiles همراه با Baseline Profiles استفاده کنید، احتمالاً در طول هفته اول، با تولید Cloud Profiles، شاهد کاهش جزئی بهبودها خواهید بود. با این حال، علاوه بر سایر بهینهسازیهایی که انجام دادهاید، همچنان باید شاهد افزایش قابل توجه عملکرد با Baseline Profiles باشید.
برای آشنایی بیشتر با ابزارها و امکانات، به منابع زیر مراجعه کنید: