چگونه تیم تقویم Android راه‌اندازی و جابجایی برنامه را با نمایه‌های پایه بهبود بخشید

نمایه‌های خط پایه با اجتناب از مراحل تدوین مترجم و به‌موقع (JIT) برای سفرهای معمول کاربر، سرعت اجرای کد را تا 30 درصد بهبود می‌بخشد. نمایه‌های خط پایه به شما امکان می‌دهند سفرهای کاربری را که می‌خواهید بهینه کنید انتخاب کنید و می‌تواند به بهبود راه‌اندازی برنامه، کاهش jank و موارد دیگر کمک کند - که به نوبه خود منجر به بهبود معیارهای تجاری، مانند حفظ کاربر و رتبه‌بندی می‌شود. درباره نمایه های پایه بیشتر بیاموزید .

تیم Android Calendar نمایه‌های پایه را پیاده‌سازی کرد و 20% بهبود زمان راه‌اندازی برنامه و 50% کاهش در فریم‌های کند یا ثابت مشاهده کرد. در اینجا آنچه که آنها برای دستیابی به این بردهای عملکردی انجام دادند، از این که چرا تصمیم به استفاده از نمایه‌های خط پایه گرفته‌اند تا نحوه اندازه‌گیری تأثیر، آمده است.

نمایه های ابری در مقابل نمایه های خط پایه

تیم تقویم Android قبلاً از Cloud Profiles استفاده کرده بود که یکی دیگر از روش‌های بهینه‌سازی هدایت‌شده نمایه (PGO) بر اساس تعاملات کاربر در دنیای واقعی با برنامه است. در اینجا نحوه مقایسه نمایه های ابری و نمایه های پایه آمده است:

نوع پروفایل راه اندازی کنید سفرهای کاربر گنجانده شده است وقتی پایگاه کاربر باشد بهترین کار را می کند تاثیر متوجه شد نسخه های اندروید پشتیبانی شده

پروفایل های ابری

به طور پیش فرض فعال است

به طور خودکار بر اساس داده های کاربر در دنیای واقعی انتخاب می شود

بزرگ

ظرف چند روز

اندروید 9 (سطح API 28) و بالاتر

پروفایل های پایه

توسط شما پیکربندی شده است

منتخب شما

همه سایزها

فوری

اندروید 7 (سطح API 24) و بالاتر

یکی از دلایل کلیدی که تیم تقویم Android تصمیم گرفت پروفایل های پایه را به پایگاه کد خود اضافه کند، این بود که آنها به سمت چرخه انتشار هفتگی سریعتر حرکت می کردند. در حالی که نمایه‌های ابری عملکرد قابل توجهی را ارائه می‌کنند، پس از راه‌اندازی برنامه، ۱ تا ۲ روز طول می‌کشد تا به اوج تاثیر خود برسند، زیرا به جمع‌آوری داده‌های کاربر در دنیای واقعی متکی هستند. تکمیل نمایه‌های ابری با نمایه‌های پایه به کاربران زمان بیشتری می‌دهد تا قبل از عرضه نسخه بعدی برنامه، اوج بهبود عملکرد را تجربه کنند.

علاوه بر این، برای تیم تقویم Android مهم بود که بتواند انتخاب کند کدام سفرهای کاربر حیاتی (CUJ) به طور خاص در نمایه گنجانده می‌شود، که می‌توانید با استفاده از نمایه‌های پایه انجام دهید.

به طور کلی، توصیه می‌کنیم از نمایه‌های پایه علاوه بر نمایه‌های ابری که به‌طور پیش‌فرض فعال است، برای بهترین نتایج عملکرد استفاده کنید.

سفرهای کاربر گنجانده شده است

تیم Android Calendar انتخاب کرد که دو CUJ را در نمایه های پایه خود قرار دهد:

  • باز کردن برنامه در نمای برنامه: در ابتدا نمای پیش‌فرض، بسیار مهم است که برای کاربرانی که برای اولین بار از برنامه استفاده می‌کنند یا تنظیمات پیش‌فرض را تغییر نمی‌دهند، بهینه‌سازی شود.
  • باز کردن برنامه در نمای ماه: نمای انتخابی برای بسیاری از کاربران، بر اساس داده های کاربر. برای پیگیری نحوه استفاده کاربران از برنامه شما، می‌توانید از ابزارهایی مانند Firebase استفاده کنید.

به طور کلی، باید CUJ هایی را که برای تجارت سودآور هستند (در صورت وجود) و CUJ هایی که رایج ترین هستند اضافه کنید. برای کسب اطلاعات بیشتر در مورد نحوه انتخاب CUJ ها برای بهینه سازی، به مواردی که باید اضافه شود مراجعه کنید.

پیاده سازی

تیم تقویم Android از یک پوشش داخلی برای کتابخانه Jetpack Macrobenchmark برای ایجاد نمایه های پایه برای سهولت یکپارچه سازی با ابزارهای داخلی و مقیاس پذیری عمومی استفاده می کند.

در اینجا پیکربندی تست Macrobenchmark برای باز کردن برنامه در نمای برنامه آمده است:

@Test
fun generateProfile() =
    baselineProfileRule.collect(PACKAGE_NAME, includeInStartupProfile = true) {
        startActivityAndWait()
        // Verify pre-existing recurring events and tasks are shown.
        device.waitAndFindObject(By.text("Recurring event"), 20_000)
        device.waitAndFindObject(By.text("Recurring task"), 20_000)

        // Open drawer and verify selected view.
        device.findObject(By.desc("Show Calendar List and Settings drawer")).click()
        device.waitAndFindObject(By.desc("Schedule view, Selected"), 1_000)
    }

اندازه گیری تاثیر با استفاده از رهاسازی های کنترل شده

از آنجایی که نمایه‌های خط پایه کاملاً با APK ارسال شده همراه هستند و قبل از اجرای برنامه شما گنجانده شده‌اند، نمی‌توان یک آزمایش استاندارد A/B را برای درک تأثیر آنها اجرا کرد. با این حال، تیم تقویم Android با استفاده از نسخه‌های کنترل‌شده توانسته است اندازه‌گیری دقیقی از تأثیر را دریافت کند، که در آن شما اساساً نسخه جدید برنامه را فقط برای زیرمجموعه‌ای از کاربران منتشر می‌کنید و آن‌ها را با کاربرانی که در نسخه‌ای مشابه نسخه قبلی هستند مقایسه می‌کنید.

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

  • تأخیر متوسط ​​راه‌اندازی برنامه تعاملی (شایع‌ترین سناریو) از 775 میلی‌ثانیه به 644 میلی‌ثانیه (17 درصد) کاهش یافت.
  • متوسط ​​تأخیر شروع سرد از 1058 میلی‌ثانیه به 901 میلی‌ثانیه (15 درصد) کاهش یافت.
  • متوسط ​​تأخیر شروع گرم از 453 میلی‌ثانیه به 378 میلی‌ثانیه (17 درصد) کاهش یافت.
  • میانگین نرخ فریم جنکی 42 تا 60 درصد در زمان‌بندی و بازدیدهای ماهانه کاهش یافت

به خاطر داشته باشید که اگر از Cloud Profiles همراه با Baseline Profiles استفاده کنید، احتمالاً با ایجاد نمایه‌های Cloud، بهبودها در طول هفته اول اندکی کاهش می‌یابد. با این حال، شما همچنان باید عملکرد قابل توجهی را با نمایه‌های پایه در کنار سایر بهینه‌سازی‌هایی که دارید مشاهده کنید.

برای کسب اطلاعات بیشتر در مورد ابزارها و ویژگی ها، به منابع زیر مراجعه کنید: