نمایه های پایه

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

با ارسال نمایه خط پایه در یک برنامه یا کتابخانه، Android Runtime (ART) می تواند مسیرهای کد مشخص شده را از طریق تلفیقی پیش از زمان (AOT) بهینه کند و برای هر کاربر جدید و هر به روز رسانی برنامه، بهبود عملکرد را ارائه دهد. این بهینه‌سازی هدایت‌شده نمایه (PGO) به برنامه‌ها اجازه می‌دهد راه‌اندازی را بهینه کنند، جابجایی تعامل را کاهش دهند و عملکرد کلی زمان اجرا را برای کاربران از اولین راه‌اندازی بهبود بخشند.

این بهبودهای عملکرد مستقیماً منجر به بهبود معیارهای تجاری مانند حفظ کاربر، تراکنش‌ها و رتبه‌بندی می‌شود. می‌توانید در داستان‌های Josh ، Lyft ، TikTok و Zomato درباره نحوه تأثیر عملکرد بر معیارهای کسب‌وکار بیشتر بخوانید.

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

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

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

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

پروفایل های راه اندازی

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

شروع کنید

برای شروع بهینه سازی عملکرد در برنامه موجود خود، به ایجاد نمایه های خط پایه مراجعه کنید.

زنجیره وابستگی نسخه‌های انتشار پایدار و توسعه‌یافته را ارائه می‌کند. برای ایجاد و نصب نمایه خط پایه، از نسخه های پشتیبانی شده زیر یا بالاتر از افزونه Android Gradle، کتابخانه Macrobenchmark و Profile Installer استفاده کنید. این وابستگی ها در زمان های مختلف مورد نیاز هستند و با هم به عنوان یک زنجیره ابزار کار می کنند تا نمایه خط پایه بهینه را فعال کنند.

  • افزونه اندروید Gradle: com.android.tools.build:8.0.0
  • کتابخانه Macrobenchmark: androidx.benchmark:benchmark-macro-junit4:1.3.4
  • نصب کننده پروفایل: androidx.profileinstaller:profileinstaller:1.4.1

توصیه می کنیم از آخرین نسخه AGP برای ایجاد و مدیریت پروفایل های پایه استفاده کنید. در اینجا عملکردهای اصلی ارائه شده با نسخه های مختلف AGP آورده شده است:

نسخه AGP ویژگی ها
8.4 نصب برنامه‌های محلی ساخت‌های غیرقابل اشکال‌زدایی با استفاده از ابزار خط فرمان Gradle wrapper یا Android Studio نصب نمایه‌های پایه، بنابراین عملکرد ساخت نسخه محلی شما بیشتر با تولید مطابقت دارد. این به‌روزرسانی بر عملکرد تولید نمایه‌های پایه تأثیری نمی‌گذارد.
8.3
  • پشتیبانی کامل از فهرست راهنمای مجموعه منبع (ماژول های کتابخانه): چندین فایل مبدأ نمایه پایه را اعلام کنید، و از دایرکتوری های آگاه از انواع مختلف، مانند src/free/generated/baselineProfiles/baseline-prof1.txt ، اکنون برای ماژول های کتابخانه و همچنین ماژول های برنامه استفاده کنید.
  • نمایه‌های پایه شامل کلاس‌های قندزدایی می‌شوند.
8.2
  • بازنویسی قوانین R8: D8 و R8 می‌توانند قوانین پایه و نمایه راه‌اندازی قابل خواندن برای انسان را تغییر دهند تا تمام قوانینی را که برای بهینه‌سازی عملکرد برنامه نیاز دارید، به‌طور کامل دربرگیرد. پوشش نمایه پایه روش ها را تا 30٪ افزایش می دهد و عملکرد برنامه را تا 15٪ افزایش می دهد.
  • نمایه های راه اندازی: این نوع جدید از نمایه خط پایه را برای اطلاع رسانی طرح بندی کد در DEX ایجاد کنید. عملکرد راه‌اندازی را تا 15% اضافی یا به میزان قابل توجهی برای برنامه‌های بزرگ افزایش می‌دهد.
8.0 حداقل نسخه پیشنهادی: از پلاگین Baseline Profile Gradle برای تولید نمایه های پایه با یک کار Gradle استفاده کنید.
  • پشتیبانی کامل از فهرست راهنمای مجموعه منبع (ماژول های برنامه): چندین فایل مبدأ نمایه پایه را اعلام کنید و از دایرکتوری های آگاه از انواع مختلف مانند src/free/generated/baselineProfiles/baseline-prof1.txt استفاده کنید.
7.4 حداقل نسخه پشتیبانی شده: برنامه ها می توانند نمایه های خط پایه را از کتابخانه ها مصرف کنند و نمایه خط پایه خود را در فایل src/main/baseline-prof.txt ارائه دهند.
  • هنگام ساختن APK از یک بسته برنامه، نمایه‌های خط پایه به درستی بسته‌بندی می‌شوند ( مساله شماره 230361284 ).
  • برای برنامه‌هایی که بیش از یک فایل .dex دارند، نمایه‌های پایه به درستی برای فایل .dex اولیه بسته‌بندی می‌شوند.

نمونه تولید پروفایل

در زیر یک کلاس مثال برای ایجاد یک نمایه پایه برای راه اندازی برنامه، و همچنین چندین رویداد پیمایش و پیمایش با استفاده از کتابخانه Macrobenchmark توصیه شده است:

@OptIn(ExperimentalBaselineProfilesApi::class)
class BaselineProfileGenerator {
    @get:Rule
    val baselineProfileRule = BaselineProfileRule()

    @Test
    fun appStartupAndUserJourneys() {
        baselineProfileRule.collect(packageName = PACKAGE_NAME) {
            // App startup journey.
            startActivityAndWait()

            device.findObject(By.text("COMPOSE LAZYLIST")).clickAndWait(Until.newWindow(), 1_000)
            device.findObject(By.res("myLazyColumn")).also {
                it.fling(Direction.DOWN)
                it.fling(Direction.UP)
            }
            device.pressBack()
        }
    }
}

شما می توانید این کد را به صورت کامل و با جزئیات بیشتر به عنوان بخشی از نمونه عملکرد ما در GitHub مشاهده کنید.

چه چیزی را شامل شود

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

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

کتابخانه‌ها می‌توانند نمایه‌های پایه خود را ارائه کنند و برای بهبود عملکرد برنامه، نسخه‌های منتشر شده را به آنها ارسال کنند. برای مثال، بخش استفاده از نمایه خط پایه را در عملکرد Jetpack Compose ببینید.

نمایه های پایه چگونه کار می کنند

هنگام توسعه برنامه یا کتابخانه خود، تعریف نمایه های خط پایه را در نظر بگیرید تا تعاملات رایج کاربر را در جایی که زمان رندر یا تأخیر مهم هستند پوشش دهید. در اینجا نحوه کار آنها آمده است:

  1. قوانین نمایه قابل خواندن توسط انسان برای برنامه شما ایجاد می شود و به شکل باینری در برنامه کامپایل می شود. می توانید آنها را در assets/dexopt/baseline.prof پیدا کنید. سپس می‌توانید AAB را طبق معمول در Google Play آپلود کنید.

  2. Google Play نمایه را پردازش کرده و مستقیماً همراه با APK برای کاربران ارسال می کند. در حین نصب، ART کامپایل AOT متدهای موجود در نمایه را انجام می دهد که در نتیجه آن روش ها سریعتر اجرا می شوند. اگر نمایه حاوی روش‌هایی باشد که در راه‌اندازی برنامه یا در حین ارائه فریم استفاده می‌شوند، کاربر ممکن است زمان راه‌اندازی سریع‌تر و کاهش jank را تجربه کند.

  3. این جریان برای تنظیم دقیق عملکرد بر اساس استفاده واقعی از برنامه در طول زمان، با تجمع نمایه‌های ابری همکاری می‌کند.

شکل 1. این نمودار گردش کار نمایه پایه را از بارگذاری تا تحویل کاربر نهایی نشان می دهد، و نحوه ارتباط آن گردش کار با پروفایل های ابری را نشان می دهد.

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

Cloud Profiles یک فرم اضافی از PGO را ارائه می‌کند - که توسط Google Play Store جمع‌آوری شده و برای جمع‌آوری زمان نصب توزیع شده است - همراه با Baseline Profiles.

در حالی که نمایه‌های ابری توسط تعاملات کاربر در دنیای واقعی با برنامه هدایت می‌شوند، چند ساعت تا چند روز پس از توزیع به‌روزرسانی طول می‌کشد و در دسترس بودن آن‌ها را محدود می‌کند. تا زمانی که نمایه‌ها به طور کامل توزیع نشده باشند، عملکرد برنامه برای کاربران برنامه‌های جدید یا به‌روزرسانی شده کمتر از حد مطلوب است. علاوه بر این، Cloud Profiles فقط از دستگاه‌های Android دارای Android 9 (سطح API 28) یا بالاتر پشتیبانی می‌کند و فقط برای برنامه‌هایی که پایگاه کاربر به اندازه کافی بزرگ دارند، به خوبی مقیاس می‌شوند.

رفتار جمع‌آوری در نسخه‌های اندروید

نسخه‌های پلتفرم Android از روش‌های تلفیقی برنامه‌های متفاوتی استفاده می‌کنند که هرکدام دارای یک مبادله عملکرد مربوطه هستند. نمایه های خط پایه با ارائه نمایه ای برای همه نصب ها نسبت به روش های کامپایل قبلی بهبود می یابند.

نسخه اندروید روش تالیف رویکرد بهینه سازی
5 تا 6 (سطح API 21 تا 23) AOT کامل کل برنامه در حین نصب بهینه می‌شود، در نتیجه زمان انتظار طولانی برای استفاده از برنامه، افزایش استفاده از رم و فضای دیسک، و زمان‌های طولانی‌تر برای بارگیری کد از دیسک، به طور بالقوه افزایش زمان راه‌اندازی سرد می‌شود.
7 تا 8.1 (سطح API 24 تا 27) AOT جزئی (نمایه پایه) نمایه های خط پایه توسط androidx.profileinstaller در اولین اجرا نصب می شوند که ماژول برنامه این وابستگی را تعریف می کند. ART می‌تواند با افزودن قوانین نمایه اضافی در حین استفاده از برنامه، و کامپایل آنها در زمانی که دستگاه بی‌حرکت است، این را بیشتر بهبود بخشد. این کار فضای دیسک و زمان بارگیری کد از دیسک را بهینه می کند و در نتیجه زمان انتظار برای برنامه را کاهش می دهد.
9 (سطح API 28) و بالاتر AOT جزئی (پایه + نمایه ابری) Play هنگام نصب برنامه از نمایه‌های خط پایه برای بهینه‌سازی نمایه‌های APK و Cloud—در صورت موجود بودن، استفاده می‌کند. پس از نصب، نمایه‌های ART در Play آپلود می‌شوند، جمع‌آوری می‌شوند و پس از نصب یا به‌روزرسانی برنامه، به‌عنوان نمایه‌های ابری در اختیار سایر کاربران قرار می‌گیرند.

مسائل شناخته شده

موارد زیر مسائل و راه‌حل‌های احتمالی یا مسائلی هستند که پیشرفت‌های مداومی برای راه‌حل‌ها برای آنها وجود دارد:

  • ممکن است به دلیل تنظیمات مجوز در برخی دستگاه‌ها، از جمله دستگاه‌های OnePlus، تولید نمایه خط پایه ناموفق باشد. برای حل این مشکل، گزینه Disable permission monitoring را در تنظیمات Developer Options خاموش کنید.

  • تولید نمایه خط پایه در دستگاه‌های Firebase Test Lab، از جمله دستگاه‌های Test Lab با مدیریت Gradle ( نسخه #285187547 ) پشتیبانی نمی‌شود.

  • برای ارائه موفقیت آمیز نمایه های خط پایه برای کتابخانه ها، حداقل از پلاگین Baseline Profile Gradle 1.2.3 یا AGP 8.3 استفاده کنید ( شماره 313992099 ).

  • اگر نمایه‌های خط پایه را با دستور ./gradlew app:generateBaselineProfile ایجاد کنید، معیارهای ماژول آزمایشی نیز اجرا می‌شوند و نتایج نادیده گرفته می‌شوند. اگر این اتفاق بیفتد، با اجرای دستور با -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile . این مشکل در AGP 8.2 رفع شده است.

  • دستور ایجاد نمایه های خط پایه برای همه انواع ساخت ./gradlew app:generateBaselineProfile - فقط پروفایل های خط پایه را برای نوع ساخت نسخه تولید می کند. این مشکل در AGP 8.1 رفع شده است.

  • ممکن است کانال‌های توزیع برنامه غیر Google Play از استفاده از نمایه‌های خط پایه در هنگام نصب پشتیبانی نکنند. کاربران برنامه‌هایی که از طریق این کانال‌ها نصب می‌شوند تا زمانی که dexopt پس‌زمینه اجرا نشود، مزایایی را مشاهده نمی‌کنند - که احتمالاً یک شبه است.

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

  • بهینه‌سازی باتری در برخی دستگاه‌ها، مانند دستگاه‌های Huawei، می‌تواند در نصب نمایه اختلال ایجاد کند. برای اطمینان از نصب مؤثر نمایه‌هایتان، بهینه‌سازی باتری را در دستگاه‌های معیار خود غیرفعال کنید.

منابع اضافی

{% کلمه به کلمه %} {% آخر کلمه %} {% کلمه به کلمه %} {% endverbatim %}،

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

با ارسال نمایه خط پایه در یک برنامه یا کتابخانه، Android Runtime (ART) می تواند مسیرهای کد مشخص شده را از طریق تلفیقی پیش از زمان (AOT) بهینه کند و برای هر کاربر جدید و هر به روز رسانی برنامه، بهبود عملکرد را ارائه دهد. این بهینه‌سازی هدایت‌شده نمایه (PGO) به برنامه‌ها اجازه می‌دهد راه‌اندازی را بهینه کنند، جابجایی تعامل را کاهش دهند و عملکرد کلی زمان اجرا را برای کاربران از اولین راه‌اندازی بهبود بخشند.

این بهبودهای عملکرد مستقیماً منجر به بهبود معیارهای تجاری مانند حفظ کاربر، تراکنش‌ها و رتبه‌بندی می‌شود. می‌توانید در داستان‌های Josh ، Lyft ، TikTok و Zomato درباره نحوه تأثیر عملکرد بر معیارهای کسب‌وکار بیشتر بخوانید.

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

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

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

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

پروفایل های راه اندازی

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

شروع کنید

برای شروع بهینه سازی عملکرد در برنامه موجود خود، به ایجاد نمایه های خط پایه مراجعه کنید.

زنجیره وابستگی نسخه‌های انتشار پایدار و توسعه‌یافته را ارائه می‌کند. برای ایجاد و نصب نمایه خط پایه، از نسخه های پشتیبانی شده زیر یا بالاتر از افزونه Android Gradle، کتابخانه Macrobenchmark و Profile Installer استفاده کنید. این وابستگی ها در زمان های مختلف مورد نیاز هستند و با هم به عنوان یک زنجیره ابزار کار می کنند تا نمایه خط پایه بهینه را فعال کنند.

  • افزونه اندروید Gradle: com.android.tools.build:8.0.0
  • کتابخانه Macrobenchmark: androidx.benchmark:benchmark-macro-junit4:1.3.4
  • نصب کننده پروفایل: androidx.profileinstaller:profileinstaller:1.4.1

توصیه می کنیم از آخرین نسخه AGP برای ایجاد و مدیریت پروفایل های پایه استفاده کنید. در اینجا عملکردهای اصلی ارائه شده با نسخه های مختلف AGP آورده شده است:

نسخه AGP ویژگی ها
8.4 نصب برنامه‌های محلی ساخت‌های غیرقابل اشکال‌زدایی با استفاده از ابزار خط فرمان Gradle wrapper یا Android Studio نصب نمایه‌های پایه، بنابراین عملکرد ساخت نسخه محلی شما بیشتر با تولید مطابقت دارد. این به‌روزرسانی بر عملکرد تولید نمایه‌های پایه تأثیری نمی‌گذارد.
8.3
  • پشتیبانی کامل از فهرست راهنمای مجموعه منبع (ماژول های کتابخانه): چندین فایل مبدأ نمایه پایه را اعلام کنید، و از دایرکتوری های آگاه از انواع مختلف، مانند src/free/generated/baselineProfiles/baseline-prof1.txt ، اکنون برای ماژول های کتابخانه و همچنین ماژول های برنامه استفاده کنید.
  • نمایه‌های پایه شامل کلاس‌های قندزدایی می‌شوند.
8.2
  • بازنویسی قوانین R8: D8 و R8 می‌توانند قوانین پایه و نمایه راه‌اندازی قابل خواندن برای انسان را تغییر دهند تا تمام قوانینی را که برای بهینه‌سازی عملکرد برنامه نیاز دارید، به‌طور کامل دربرگیرد. پوشش نمایه پایه روش ها را تا 30٪ افزایش می دهد و عملکرد برنامه را تا 15٪ افزایش می دهد.
  • نمایه های راه اندازی: این نوع جدید از نمایه خط پایه را برای اطلاع رسانی طرح بندی کد در DEX ایجاد کنید. عملکرد راه‌اندازی را تا 15% اضافی یا به میزان قابل توجهی برای برنامه‌های بزرگ افزایش می‌دهد.
8.0 حداقل نسخه پیشنهادی: از پلاگین Baseline Profile Gradle برای تولید نمایه های پایه با یک کار Gradle استفاده کنید.
  • پشتیبانی کامل از فهرست راهنمای مجموعه منبع (ماژول های برنامه): چندین فایل مبدأ نمایه پایه را اعلام کنید و از دایرکتوری های آگاه از انواع مختلف مانند src/free/generated/baselineProfiles/baseline-prof1.txt استفاده کنید.
7.4 حداقل نسخه پشتیبانی شده: برنامه ها می توانند نمایه های خط پایه را از کتابخانه ها مصرف کنند و نمایه خط پایه خود را در فایل src/main/baseline-prof.txt ارائه دهند.
  • هنگام ساختن APK از یک بسته برنامه، نمایه‌های خط پایه به درستی بسته‌بندی می‌شوند ( مساله شماره 230361284 ).
  • برای برنامه‌هایی که بیش از یک فایل .dex دارند، نمایه‌های پایه به درستی برای فایل .dex اولیه بسته‌بندی می‌شوند.

نمونه تولید پروفایل

در زیر یک کلاس مثال برای ایجاد یک نمایه پایه برای راه اندازی برنامه، و همچنین چندین رویداد پیمایش و پیمایش با استفاده از کتابخانه Macrobenchmark توصیه شده است:

@OptIn(ExperimentalBaselineProfilesApi::class)
class BaselineProfileGenerator {
    @get:Rule
    val baselineProfileRule = BaselineProfileRule()

    @Test
    fun appStartupAndUserJourneys() {
        baselineProfileRule.collect(packageName = PACKAGE_NAME) {
            // App startup journey.
            startActivityAndWait()

            device.findObject(By.text("COMPOSE LAZYLIST")).clickAndWait(Until.newWindow(), 1_000)
            device.findObject(By.res("myLazyColumn")).also {
                it.fling(Direction.DOWN)
                it.fling(Direction.UP)
            }
            device.pressBack()
        }
    }
}

شما می توانید این کد را به صورت کامل و با جزئیات بیشتر به عنوان بخشی از نمونه عملکرد ما در GitHub مشاهده کنید.

چه چیزی را شامل شود

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

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

کتابخانه‌ها می‌توانند نمایه‌های پایه خود را ارائه کنند و برای بهبود عملکرد برنامه، نسخه‌های منتشر شده را به آنها ارسال کنند. برای مثال، بخش استفاده از نمایه خط پایه را در عملکرد Jetpack Compose ببینید.

نمایه های پایه چگونه کار می کنند

هنگام توسعه برنامه یا کتابخانه خود، تعریف نمایه های خط پایه را در نظر بگیرید تا تعاملات رایج کاربر را در جایی که زمان رندر یا تأخیر مهم هستند پوشش دهید. در اینجا نحوه کار آنها آمده است:

  1. قوانین نمایه قابل خواندن توسط انسان برای برنامه شما ایجاد می شود و به شکل باینری در برنامه کامپایل می شود. می توانید آنها را در assets/dexopt/baseline.prof پیدا کنید. سپس می‌توانید AAB را طبق معمول در Google Play آپلود کنید.

  2. Google Play نمایه را پردازش کرده و مستقیماً همراه با APK برای کاربران ارسال می کند. در حین نصب، ART کامپایل AOT متدهای موجود در نمایه را انجام می دهد که در نتیجه آن روش ها سریعتر اجرا می شوند. اگر نمایه حاوی روش‌هایی باشد که در راه‌اندازی برنامه یا در حین ارائه فریم استفاده می‌شوند، کاربر ممکن است زمان راه‌اندازی سریع‌تر و کاهش jank را تجربه کند.

  3. این جریان برای تنظیم دقیق عملکرد بر اساس استفاده واقعی از برنامه در طول زمان، با تجمع نمایه‌های ابری همکاری می‌کند.

شکل 1. این نمودار گردش کار نمایه پایه را از بارگذاری تا تحویل کاربر نهایی نشان می دهد، و نحوه ارتباط آن گردش کار با پروفایل های ابری را نشان می دهد.

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

Cloud Profiles یک فرم اضافی از PGO را ارائه می‌کند - که توسط Google Play Store جمع‌آوری شده و برای جمع‌آوری زمان نصب توزیع شده است - همراه با Baseline Profiles.

در حالی که نمایه‌های ابری توسط تعاملات کاربر در دنیای واقعی با برنامه هدایت می‌شوند، چند ساعت تا چند روز پس از توزیع به‌روزرسانی طول می‌کشد و در دسترس بودن آن‌ها را محدود می‌کند. تا زمانی که نمایه‌ها به طور کامل توزیع نشده باشند، عملکرد برنامه برای کاربران برنامه‌های جدید یا به‌روزرسانی شده کمتر از حد مطلوب است. علاوه بر این، Cloud Profiles فقط از دستگاه‌های Android دارای Android 9 (سطح API 28) یا بالاتر پشتیبانی می‌کند و فقط برای برنامه‌هایی که پایگاه کاربر به اندازه کافی بزرگ دارند، به خوبی مقیاس می‌شوند.

رفتار جمع‌آوری در نسخه‌های اندروید

نسخه‌های پلتفرم Android از روش‌های تلفیقی برنامه‌های متفاوتی استفاده می‌کنند که هرکدام دارای یک مبادله عملکرد مربوطه هستند. نمایه های خط پایه با ارائه نمایه ای برای همه نصب ها نسبت به روش های کامپایل قبلی بهبود می یابند.

نسخه اندروید روش تالیف رویکرد بهینه سازی
5 تا 6 (سطح API 21 تا 23) AOT کامل کل برنامه در حین نصب بهینه می‌شود، در نتیجه زمان انتظار طولانی برای استفاده از برنامه، افزایش استفاده از رم و فضای دیسک، و زمان‌های طولانی‌تر برای بارگیری کد از دیسک، به طور بالقوه افزایش زمان راه‌اندازی سرد می‌شود.
7 تا 8.1 (سطح API 24 تا 27) AOT جزئی (نمایه پایه) نمایه های خط پایه توسط androidx.profileinstaller در اولین اجرا نصب می شوند که ماژول برنامه این وابستگی را تعریف می کند. ART می‌تواند با افزودن قوانین نمایه اضافی در حین استفاده از برنامه، و کامپایل آنها در زمانی که دستگاه بی‌حرکت است، این را بیشتر بهبود بخشد. این کار فضای دیسک و زمان بارگیری کد از دیسک را بهینه می کند و در نتیجه زمان انتظار برای برنامه را کاهش می دهد.
9 (سطح API 28) و بالاتر AOT جزئی (پایه + نمایه ابری) Play هنگام نصب برنامه از نمایه‌های خط پایه برای بهینه‌سازی نمایه‌های APK و Cloud—در صورت موجود بودن، استفاده می‌کند. پس از نصب، نمایه‌های ART در Play آپلود می‌شوند، جمع‌آوری می‌شوند و پس از نصب یا به‌روزرسانی برنامه، به‌عنوان نمایه‌های ابری در اختیار سایر کاربران قرار می‌گیرند.

مسائل شناخته شده

موارد زیر مسائل و راه‌حل‌های احتمالی یا مسائلی هستند که پیشرفت‌های مداومی برای راه‌حل‌ها برای آنها وجود دارد:

  • ممکن است به دلیل تنظیمات مجوز در برخی دستگاه‌ها، از جمله دستگاه‌های OnePlus، تولید نمایه خط پایه ناموفق باشد. برای حل این مشکل، گزینه Disable permission monitoring را در تنظیمات Developer Options خاموش کنید.

  • تولید نمایه خط پایه در دستگاه‌های Firebase Test Lab، از جمله دستگاه‌های Test Lab با مدیریت Gradle ( نسخه #285187547 ) پشتیبانی نمی‌شود.

  • برای ارائه موفقیت آمیز نمایه های خط پایه برای کتابخانه ها، حداقل از پلاگین Baseline Profile Gradle 1.2.3 یا AGP 8.3 استفاده کنید ( شماره 313992099 ).

  • اگر نمایه‌های خط پایه را با دستور ./gradlew app:generateBaselineProfile ایجاد کنید، معیارهای ماژول آزمایشی نیز اجرا می‌شوند و نتایج نادیده گرفته می‌شوند. اگر این اتفاق بیفتد، با اجرای دستور با -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile . این مشکل در AGP 8.2 رفع شده است.

  • دستور ایجاد نمایه های خط پایه برای همه انواع ساخت ./gradlew app:generateBaselineProfile - فقط پروفایل های خط پایه را برای نوع ساخت نسخه تولید می کند. این مشکل در AGP 8.1 رفع شده است.

  • ممکن است کانال‌های توزیع برنامه غیر Google Play از استفاده از نمایه‌های خط پایه در هنگام نصب پشتیبانی نکنند. کاربران برنامه‌هایی که از طریق این کانال‌ها نصب می‌شوند تا زمانی که dexopt پس‌زمینه اجرا نشود، مزایایی را مشاهده نمی‌کنند - که احتمالاً یک شبه است.

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

  • بهینه‌سازی باتری در برخی دستگاه‌ها، مانند دستگاه‌های Huawei، می‌تواند در نصب نمایه اختلال ایجاد کند. برای اطمینان از نصب مؤثر نمایه‌هایتان، بهینه‌سازی باتری را در دستگاه‌های معیار خود غیرفعال کنید.

منابع اضافی

{% کلمه به کلمه %} {% آخر کلمه %} {% کلمه به کلمه %} {% endverbatim %}،

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

با ارسال نمایه خط پایه در یک برنامه یا کتابخانه، Android Runtime (ART) می تواند مسیرهای کد مشخص شده را از طریق تلفیقی پیش از زمان (AOT) بهینه کند و برای هر کاربر جدید و هر به روز رسانی برنامه، بهبود عملکرد را ارائه دهد. این بهینه‌سازی هدایت‌شده نمایه (PGO) به برنامه‌ها اجازه می‌دهد راه‌اندازی را بهینه کنند، جابجایی تعامل را کاهش دهند و عملکرد کلی زمان اجرا را برای کاربران از اولین راه‌اندازی بهبود بخشند.

این بهبودهای عملکرد مستقیماً منجر به بهبود معیارهای تجاری مانند حفظ کاربر، تراکنش‌ها و رتبه‌بندی می‌شود. می‌توانید در داستان‌های Josh ، Lyft ، TikTok و Zomato درباره نحوه تأثیر عملکرد بر معیارهای کسب‌وکار بیشتر بخوانید.

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

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

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

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

پروفایل های راه اندازی

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

شروع کنید

برای شروع بهینه سازی عملکرد در برنامه موجود خود، به ایجاد نمایه های خط پایه مراجعه کنید.

زنجیره وابستگی نسخه‌های انتشار پایدار و توسعه‌یافته را ارائه می‌کند. برای ایجاد و نصب نمایه خط پایه، از نسخه های پشتیبانی شده زیر یا بالاتر از افزونه Android Gradle، کتابخانه Macrobenchmark و Profile Installer استفاده کنید. این وابستگی ها در زمان های مختلف مورد نیاز هستند و با هم به عنوان یک زنجیره ابزار کار می کنند تا نمایه خط پایه بهینه را فعال کنند.

  • افزونه اندروید Gradle: com.android.tools.build:8.0.0
  • کتابخانه Macrobenchmark: androidx.benchmark:benchmark-macro-junit4:1.3.4
  • نصب کننده پروفایل: androidx.profileinstaller:profileinstaller:1.4.1

توصیه می کنیم از آخرین نسخه AGP برای ایجاد و مدیریت پروفایل های پایه استفاده کنید. در اینجا عملکردهای اصلی ارائه شده با نسخه های مختلف AGP آورده شده است:

نسخه AGP ویژگی ها
8.4 نصب برنامه‌های محلی ساخت‌های غیرقابل اشکال‌زدایی با استفاده از ابزار خط فرمان Gradle wrapper یا Android Studio نصب نمایه‌های پایه، بنابراین عملکرد ساخت نسخه محلی شما بیشتر با تولید مطابقت دارد. این به‌روزرسانی بر عملکرد تولید نمایه‌های پایه تأثیری نمی‌گذارد.
8.3
  • پشتیبانی کامل از فهرست راهنمای مجموعه منبع (ماژول های کتابخانه): چندین فایل مبدأ نمایه پایه را اعلام کنید، و از دایرکتوری های آگاه از انواع مختلف، مانند src/free/generated/baselineProfiles/baseline-prof1.txt ، اکنون برای ماژول های کتابخانه و همچنین ماژول های برنامه استفاده کنید.
  • نمایه‌های پایه شامل کلاس‌های قندزدایی می‌شوند.
8.2
  • بازنویسی قوانین R8: D8 و R8 می‌توانند قوانین پایه و نمایه راه‌اندازی قابل خواندن برای انسان را تغییر دهند تا تمام قوانینی را که برای بهینه‌سازی عملکرد برنامه نیاز دارید، به‌طور کامل دربرگیرد. پوشش نمایه پایه روش ها را تا 30٪ افزایش می دهد و عملکرد برنامه را تا 15٪ افزایش می دهد.
  • نمایه های راه اندازی: این نوع جدید از نمایه خط پایه را برای اطلاع رسانی طرح بندی کد در DEX ایجاد کنید. عملکرد راه‌اندازی را تا 15% اضافی یا به میزان قابل توجهی برای برنامه‌های بزرگ افزایش می‌دهد.
8.0 حداقل نسخه پیشنهادی: از پلاگین Baseline Profile Gradle برای تولید نمایه های پایه با یک کار Gradle استفاده کنید.
  • پشتیبانی کامل از فهرست راهنمای مجموعه منبع (ماژول های برنامه): چندین فایل مبدأ نمایه پایه را اعلام کنید و از دایرکتوری های آگاه از انواع مختلف مانند src/free/generated/baselineProfiles/baseline-prof1.txt استفاده کنید.
7.4 حداقل نسخه پشتیبانی شده: برنامه ها می توانند نمایه های خط پایه را از کتابخانه ها مصرف کنند و نمایه خط پایه خود را در فایل src/main/baseline-prof.txt ارائه دهند.
  • هنگام ساختن APK از یک بسته برنامه، نمایه‌های خط پایه به درستی بسته‌بندی می‌شوند ( مساله شماره 230361284 ).
  • برای برنامه‌هایی که بیش از یک فایل .dex دارند، نمایه‌های پایه به درستی برای فایل .dex اولیه بسته‌بندی می‌شوند.

نمونه تولید پروفایل

در زیر یک کلاس مثال برای ایجاد یک نمایه پایه برای راه اندازی برنامه، و همچنین چندین رویداد پیمایش و پیمایش با استفاده از کتابخانه Macrobenchmark توصیه شده است:

@OptIn(ExperimentalBaselineProfilesApi::class)
class BaselineProfileGenerator {
    @get:Rule
    val baselineProfileRule = BaselineProfileRule()

    @Test
    fun appStartupAndUserJourneys() {
        baselineProfileRule.collect(packageName = PACKAGE_NAME) {
            // App startup journey.
            startActivityAndWait()

            device.findObject(By.text("COMPOSE LAZYLIST")).clickAndWait(Until.newWindow(), 1_000)
            device.findObject(By.res("myLazyColumn")).also {
                it.fling(Direction.DOWN)
                it.fling(Direction.UP)
            }
            device.pressBack()
        }
    }
}

شما می توانید این کد را به صورت کامل و با جزئیات بیشتر به عنوان بخشی از نمونه عملکرد ما در GitHub مشاهده کنید.

چه چیزی را شامل شود

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

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

کتابخانه‌ها می‌توانند نمایه‌های پایه خود را ارائه کنند و برای بهبود عملکرد برنامه، نسخه‌های منتشر شده را به آنها ارسال کنند. برای مثال، بخش استفاده از نمایه خط پایه را در عملکرد Jetpack Compose ببینید.

نمایه های پایه چگونه کار می کنند

هنگام توسعه برنامه یا کتابخانه خود، تعریف نمایه های خط پایه را در نظر بگیرید تا تعاملات رایج کاربر را در جایی که زمان رندر یا تأخیر مهم هستند پوشش دهید. در اینجا نحوه کار آنها آمده است:

  1. قوانین نمایه قابل خواندن توسط انسان برای برنامه شما ایجاد می شود و به شکل باینری در برنامه کامپایل می شود. می توانید آنها را در assets/dexopt/baseline.prof پیدا کنید. سپس می‌توانید AAB را طبق معمول در Google Play آپلود کنید.

  2. Google Play نمایه را پردازش کرده و مستقیماً همراه با APK برای کاربران ارسال می کند. در حین نصب، ART کامپایل AOT متدهای موجود در نمایه را انجام می دهد که در نتیجه آن روش ها سریعتر اجرا می شوند. اگر نمایه حاوی روش‌هایی باشد که در راه‌اندازی برنامه یا در حین ارائه فریم استفاده می‌شوند، کاربر ممکن است زمان راه‌اندازی سریع‌تر و کاهش jank را تجربه کند.

  3. این جریان برای تنظیم دقیق عملکرد بر اساس استفاده واقعی از برنامه در طول زمان، با تجمع نمایه‌های ابری همکاری می‌کند.

شکل 1. این نمودار گردش کار نمایه پایه را از بارگذاری تا تحویل کاربر نهایی نشان می دهد، و نحوه ارتباط آن گردش کار با پروفایل های ابری را نشان می دهد.

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

Cloud Profiles یک فرم اضافی از PGO را ارائه می‌کند - که توسط Google Play Store جمع‌آوری شده و برای جمع‌آوری زمان نصب توزیع شده است - همراه با Baseline Profiles.

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

رفتار گردآوری در نسخه های اندرویدی

نسخه های پلت فرم Android از رویکردهای مختلف گردآوری برنامه استفاده می کنند که هرکدام دارای تجارت مربوطه هستند. پروفایل های پایه با ارائه نمایه برای همه نصب ها بر روش های تدوین قبلی بهبود می یابند.

نسخه اندروید روش تالیف رویکرد بهینه سازی
5 تا 6 (سطح API 21 تا 23) کامل کل برنامه در حین نصب بهینه شده است و در نتیجه زمان انتظار طولانی برای استفاده از برنامه ، افزایش استفاده از رم و فضای دیسک و زمان طولانی تر برای بارگیری کد از دیسک ، به طور بالقوه افزایش زمان راه اندازی سرد است.
7 تا 8.1 (سطح API 24 تا 27) AOT جزئی (مشخصات پایه) پروفایل های پایه توسط androidx.profileinstaller در اولین اجرا نصب می شوند وقتی ماژول برنامه این وابستگی را تعریف می کند. هنر می تواند با افزودن قوانین مشخصات اضافی در هنگام استفاده از برنامه ، این مسئله را بهبود بخشد و در هنگام بیکار بودن دستگاه آنها را تهیه کند. این بهینه برای فضای دیسک و زمان بارگیری کد از دیسک بهینه می شود و در نتیجه زمان انتظار برنامه را کاهش می دهد.
9 (سطح API 28) و بالاتر AOT جزئی (پایه + مشخصات ابر) بازی از پروفایل های پایه در حین نصب برنامه برای بهینه سازی پروفایل های APK و ابر استفاده می کند - در صورت موجود. پس از نصب ، پروفایل های هنری برای پخش ، جمع آوری و سپس به عنوان پروفایل ابر در هنگام نصب یا به روزرسانی برنامه به عنوان پروفایل های ابری بارگذاری می شوند.

مسائل شناخته شده

موارد زیر موضوعات و راه حل های احتمالی یا مواردی است که برای آنها تحولات مداوم برای راه حل ها وجود دارد:

  • تولید مشخصات پایه ممکن است به دلیل تنظیمات مجوز در برخی از دستگاه ها از جمله دستگاه های OnePlus شکست بخورد. برای کار کردن در این زمینه ، گزینه نظارت بر Disbable را در تنظیمات گزینه های توسعه دهنده خاموش کنید.

  • تولید مشخصات پایه در دستگاه های آزمایشگاه تست Firebase ، از جمله دستگاه های آزمایشگاه تست با مدیریت درجه یک پشتیبانی نمی شود ( شماره شماره 285187547 ).

  • برای ارائه پروفایل های پایه برای کتابخانه ها با موفقیت ، از افزونه پایه پایه پایه 1.2.3 یا AGP 8.3 استفاده کنید ( شماره شماره 313992099 ).

  • اگر پروفایل های پایه را با دستور ایجاد کنید ./gradlew app:generateBaselineProfile اگر این اتفاق بیفتد ، می توانید با اجرای دستور با -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile فقط پروفایل های پایه ایجاد کنید. این مسئله در AGP 8.2 برطرف شده است.

  • دستور تولید پروفایل های پایه برای همه انواع ساخت ./gradlew app:generateBaselineProfile - فقط پروفایل های پایه را برای نوع ساخت نسخه تولید می کند. این مسئله در AGP 8.1 برطرف شده است.

  • کانال های توزیع برنامه غیر Google-Play-Store ممکن است با استفاده از پروفایل های پایه در نصب پشتیبانی نکنند. کاربران برنامه های نصب شده از طریق این کانالها تا زمانی که پس زمینه Dexopt اجرا شود ، مزایای آن را نمی بینند - که احتمالاً یک شبه است.

  • به اشتراک گذاری برنامه داخلی Play Store از پروفایل های پایه پشتیبانی نمی کند. با این حال ، آهنگ آزمایش داخلی انجام می دهد.

  • بهینه سازی باتری در برخی از دستگاه ها ، مانند دستگاه های هواوی ، می تواند در نصب پروفایل دخالت کند. برای اطمینان از نصب پروفایل شما به طور مؤثر ، هرگونه بهینه سازی باتری را در دستگاه های معیار خود غیرفعال کنید.

منابع اضافی

{% کلمه به کلمه %} {% آخر کلمه %} {% کلمه به کلمه %} {٪ EndverBatim ٪} ،

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

Android Runtime (ART) با ارسال یک نمایه پایه در یک برنامه یا کتابخانه ، می تواند مسیرهای کد مشخص شده را از طریق تدوین پیش رو (AOT) بهینه کند و پیشرفت های عملکرد را برای هر کاربر جدید و هر به روزرسانی برنامه فراهم می کند. این پروفایل بهینه سازی بهینه سازی (PGO) به برنامه ها اجازه می دهد تا استارتاپ را بهینه کنند ، تعامل را کاهش دهند و عملکرد کلی زمان اجرا را برای کاربران از اولین راه اندازی بهبود بخشند.

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

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

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

پروفایل های پایه با ارائه تعامل مشترک کاربر که زمان اجرای برنامه را از اولین راه اندازی بهبود می بخشد ، به بهینه سازی فراتر از راه اندازی برنامه کمک می کند. تدوین AOT هدایت شده به دستگاه های کاربر متکی نیست و می تواند یک بار در هر نسخه بر روی دستگاه توسعه به جای دستگاه تلفن همراه انجام شود. با حمل و نقل با مشخصات پایه ، بهینه سازی برنامه بسیار سریعتر از تکیه بر پروفایل های ابر به تنهایی در دسترس قرار می گیرد.

هنگام استفاده از نمایه پایه ، تمام کد برنامه یا پس از تفسیر ، در حافظه ترکیب می شود ، یا در هنگام بیکار بودن دستگاه برای یک فایل odex در پس زمینه نوشته می شود. پس از نصب یا به روزرسانی یک برنامه ، کاربران از اولین باری که آن را اجرا می کنند تا زمانی که مسیرهای کد جدید بهینه شوند ، تجربه زیر حد را دارند. بسیاری از برنامه ها پس از بهینه سازی عملکرد حدود 30 ٪ را اندازه گیری می کنند.

پروفایل های راه اندازی

پروفایل های راه اندازی شبیه به پروفایل های پایه هستند ، اما تفاوت این است که آنها در زمان کامپایل به جای بهینه سازی در دستگاه استفاده می شوند. از پروفایل راه اندازی برای بهینه سازی طرح پرونده DEX برای بهبود زمان راه اندازی استفاده می شود. کد مشخص شده در نمایه راه اندازی در پرونده اصلی classes.dex قرار داده شده است. این با کاهش تعداد گسل های صفحه در هنگام راه اندازی برنامه ، زمان راه اندازی را بهبود می بخشد. برای کسب اطلاعات بیشتر در مورد چگونگی پروفایل های راه اندازی و بهینه سازی طرح DEX می توانند زمان راه اندازی برنامه را بهبود بخشند ، به بهینه سازی طرح DEX و پروفایل های راه اندازی مراجعه کنید.

شروع کنید

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

زنجیره وابستگی نسخه های انتشار پایدار و توسعه را ارائه می دهد. برای تولید و نصب نمایه پایه ، از نسخه های پشتیبانی شده زیر یا بالاتر از افزونه Android Gradle ، کتابخانه Macrobenchmark و نصب پروفایل استفاده کنید. این وابستگی ها در زمان های مختلف مورد نیاز است و به عنوان یک ابزار ابزار با هم کار می کند تا مشخصات پایه بهینه را فعال کند.

  • افزونه Android Gradle: com.android.tools.build:8.0.0
  • کتابخانه Macrobenchmark: androidx.benchmark:benchmark-macro-junit4:1.3.4
  • نصب پروفایل: androidx.profileinstaller:profileinstaller:1.4.1

توصیه می کنیم از آخرین نسخه AGP برای ایجاد و مدیریت پروفایل های پایه استفاده کنید. در اینجا ویژگی های عمده ای که با نسخه های مختلف AGP همراه است:

نسخه AGP ویژگی ها
8.4 نصب برنامه های محلی از ساختهای غیر قابل استفاده با استفاده از ابزار خط فرمان بسته بندی Gradle یا Android Studio نصب پروفایل های پایه ، بنابراین عملکرد انتشار محلی شما با تولید دقیق تر مطابقت دارد. این به روزرسانی بر عملکرد تولید پروفایل های پایه تأثیر نمی گذارد.
8.3
  • پشتیبانی از فهرست تنظیمات کامل منبع (ماژول های کتابخانه): چندین پرونده منبع مشخصات پایه را اعلام کنید ، و از دایرکتوری های مختلف آگاه استفاده کنید ، مانند src/free/generated/baselineProfiles/baseline-prof1.txt ، اکنون برای ماژول های کتابخانه و همچنین ماژول های برنامه.
  • پروفایل های پایه شامل کلاس های بی دقتی است.
8.2
  • R8 بازنویسی قوانین: D8 و R8 می توانند قوانین اولیه و پروفایل راه اندازی قابل خواندن انسانی را تغییر دهند تا تمام قوانینی را که برای بهینه سازی عملکرد برنامه لازم دارید ، به طور کامل ضبط کنید. پوشش مشخصات پایه روشها را 30 ٪ پوند افزایش می دهد و عملکرد برنامه را 15 ٪ پوند افزایش می دهد.
  • پروفایل های راه اندازی: این نوع جدید از نمایه پایه را برای اطلاع رسانی به طرح کد در DEX ایجاد کنید. عملکرد راه اندازی را با 15 ٪ پوند اضافی افزایش می دهد ، یا به طور قابل توجهی بیشتر برای برنامه های بزرگ.
8.0 حداقل نسخه توصیه شده: از افزونه پایه پایه پایه برای تولید پروفایل های پایه با یک کار درجه یک استفاده کنید.
  • پشتیبانی از فهرست مجموعه منبع کامل (ماژول های برنامه): چندین پرونده منبع مشخصات پایه را اعلام کنید ، و از دایرکتوری های مختلف آگاه استفاده کنید ، مانند src/free/generated/baselineProfiles/baseline-prof1.txt .
7.4 حداقل نسخه پشتیبانی شده: برنامه ها می توانند پروفایل های پایه را از کتابخانه ها مصرف کنند و مشخصات پایه خود را در پرونده src/main/baseline-prof.txt ارائه دهند.
  • پروفایل های پایه به درستی هنگام ساخت APK از یک بسته برنامه ( شماره شماره 230361284 ) به درستی بسته بندی می شوند.
  • برای برنامه هایی با بیش از یک پرونده .dex ، پروفایل های پایه به درستی برای پرونده اصلی .dex بسته بندی می شوند.

مثال تولید پروفایل

در زیر یک کلاس مثال برای ایجاد یک پروفایل پایه برای راه اندازی برنامه و همچنین چندین رویداد پیمایش و پیمایش با استفاده از کتابخانه ماکروبچارک مارک توصیه شده وجود دارد:

@OptIn(ExperimentalBaselineProfilesApi::class)
class BaselineProfileGenerator {
    @get:Rule
    val baselineProfileRule = BaselineProfileRule()

    @Test
    fun appStartupAndUserJourneys() {
        baselineProfileRule.collect(packageName = PACKAGE_NAME) {
            // App startup journey.
            startActivityAndWait()

            device.findObject(By.text("COMPOSE LAZYLIST")).clickAndWait(Until.newWindow(), 1_000)
            device.findObject(By.res("myLazyColumn")).also {
                it.fling(Direction.DOWN)
                it.fling(Direction.UP)
            }
            device.pressBack()
        }
    }
}

شما می توانید این کد را در متن کامل و جزئیات بیشتر به عنوان بخشی از نمونه های عملکرد ما در GitHub مشاهده کنید.

چه چیزی را شامل شود

هنگام استفاده از پروفایل های پایه در یک برنامه ، می توانید کد راه اندازی برنامه و تعامل مشترک کاربر مانند ناوبری بین صفحه یا پیمایش را درج کنید. همچنین می توانید کل جریان مانند ثبت نام ، ورود به سیستم یا پرداخت را جمع کنید. هر سفرهای کاربر که شما به نظر شما مهم است می تواند با بهبود عملکرد زمان اجرا آنها از پروفایل های پایه بهره مند شود.

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

كتابخانه ها می توانند پروفایل های پایه خود را ارائه دهند و آنها را با نسخه هایی برای بهبود عملکرد برنامه ارسال كنند. به عنوان مثال ، به بخش Profile Profile Use A در JetPack Compose Performance مراجعه کنید.

پروفایل های پایه چگونه کار می کنند

در حین تهیه برنامه یا کتابخانه خود ، مشخص کردن پروفایل های پایه را برای پوشش تعامل مشترک کاربر در نظر بگیرید که زمان یا تأخیر در آن مهم است. در اینجا نحوه کار آنها آمده است:

  1. قوانین پروفایل قابل خواندن انسانی برای برنامه شما تولید می شود و در برنامه با دودویی در برنامه گردآوری می شود. می توانید آنها را در assets/dexopt/baseline.prof پیدا کنید. سپس می توانید طبق معمول AAB را در Google Play بارگذاری کنید.

  2. Google Play نمایه را پردازش می کند و آن را مستقیماً به همراه APK به کاربران ارسال می کند. در حین نصب ، ART تالیف AOT از روشهای موجود در پروفایل را انجام می دهد و در نتیجه این روشها سریعتر اجرا می شود. اگر نمایه حاوی روشهای مورد استفاده در راه اندازی برنامه یا در حین ارائه فریم باشد ، ممکن است کاربر زمان پرتاب سریعتر و کاهش Jank را تجربه کند.

  3. این جریان با تجمع پروفایل های ابری برای عملکرد دقیق بر اساس استفاده واقعی از برنامه در طول زمان همکاری می کند.

شکل 1. این نمودار گردش کار مشخصات پایه را از بارگذاری از طریق تحویل کاربر نهایی نشان می دهد ، و اینکه چگونه این گردش کار به پروفایل های ابر مربوط می شود.

پروفایل ابری

پروفایل های ابری شکل دیگری از PGO را ارائه می دهند که توسط Google Play Store جمع شده و برای نصب زمان نصب شده توزیع شده است - همراه با پروفایل های پایه.

در حالی که پروفایل های ابری توسط تعامل کاربر در دنیای واقعی با برنامه هدایت می شوند ، آنها چند ساعت تا چند روز پس از به روزرسانی توزیع می شوند تا در دسترس بودن آنها باشد. تا زمانی که پروفایل به طور کامل توزیع نشود ، عملکرد برنامه برای کاربران برنامه های جدید یا به روز شده زیر حد مطلوب است. علاوه بر این ، پروفایل های ابر فقط از دستگاه های اندرویدی که Android 9 (API سطح 28) یا بالاتر را اجرا می کنند ، پشتیبانی می کنند و فقط برای برنامه هایی که دارای یک پایگاه کاربر به اندازه کافی بزرگ هستند ، به خوبی مقیاس می کنند.

رفتار گردآوری در نسخه های اندرویدی

نسخه های پلت فرم Android از رویکردهای مختلف گردآوری برنامه استفاده می کنند که هرکدام دارای تجارت مربوطه هستند. پروفایل های پایه با ارائه نمایه برای همه نصب ها بر روش های تدوین قبلی بهبود می یابند.

نسخه اندروید روش تالیف رویکرد بهینه سازی
5 تا 6 (سطح API 21 تا 23) کامل کل برنامه در حین نصب بهینه شده است و در نتیجه زمان انتظار طولانی برای استفاده از برنامه ، افزایش استفاده از رم و فضای دیسک و زمان طولانی تر برای بارگیری کد از دیسک ، به طور بالقوه افزایش زمان راه اندازی سرد است.
7 تا 8.1 (سطح API 24 تا 27) AOT جزئی (مشخصات پایه) پروفایل های پایه توسط androidx.profileinstaller در اولین اجرا نصب می شوند وقتی ماژول برنامه این وابستگی را تعریف می کند. هنر می تواند با افزودن قوانین مشخصات اضافی در هنگام استفاده از برنامه ، این مسئله را بهبود بخشد و در هنگام بیکار بودن دستگاه آنها را تهیه کند. این بهینه برای فضای دیسک و زمان بارگیری کد از دیسک بهینه می شود و در نتیجه زمان انتظار برنامه را کاهش می دهد.
9 (سطح API 28) و بالاتر AOT جزئی (پایه + مشخصات ابر) بازی از پروفایل های پایه در حین نصب برنامه برای بهینه سازی پروفایل های APK و ابر استفاده می کند - در صورت موجود. پس از نصب ، پروفایل های هنری برای پخش ، جمع آوری و سپس به عنوان پروفایل ابر در هنگام نصب یا به روزرسانی برنامه به عنوان پروفایل های ابری بارگذاری می شوند.

مسائل شناخته شده

موارد زیر موضوعات و راه حل های احتمالی یا مواردی است که برای آنها تحولات مداوم برای راه حل ها وجود دارد:

  • تولید مشخصات پایه ممکن است به دلیل تنظیمات مجوز در برخی از دستگاه ها از جمله دستگاه های OnePlus شکست بخورد. برای کار کردن در این زمینه ، گزینه نظارت بر Disbable را در تنظیمات گزینه های توسعه دهنده خاموش کنید.

  • تولید مشخصات پایه در دستگاه های آزمایشگاه تست Firebase ، از جمله دستگاه های آزمایشگاه تست با مدیریت درجه یک پشتیبانی نمی شود ( شماره شماره 285187547 ).

  • برای ارائه پروفایل های پایه برای کتابخانه ها با موفقیت ، از افزونه پایه پایه پایه 1.2.3 یا AGP 8.3 استفاده کنید ( شماره شماره 313992099 ).

  • اگر پروفایل های پایه را با دستور ایجاد کنید ./gradlew app:generateBaselineProfile اگر این اتفاق بیفتد ، می توانید با اجرای دستور با -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile فقط پروفایل های پایه ایجاد کنید. این مسئله در AGP 8.2 برطرف شده است.

  • دستور تولید پروفایل های پایه برای همه انواع ساخت ./gradlew app:generateBaselineProfile - فقط پروفایل های پایه را برای نوع ساخت نسخه تولید می کند. این مسئله در AGP 8.1 برطرف شده است.

  • کانال های توزیع برنامه غیر Google-Play-Store ممکن است با استفاده از پروفایل های پایه در نصب پشتیبانی نکنند. کاربران برنامه های نصب شده از طریق این کانالها تا زمانی که پس زمینه Dexopt اجرا شود ، مزایای آن را نمی بینند - که احتمالاً یک شبه است.

  • به اشتراک گذاری برنامه داخلی Play Store از پروفایل های پایه پشتیبانی نمی کند. با این حال ، آهنگ آزمایش داخلی انجام می دهد.

  • بهینه سازی باتری در برخی از دستگاه ها ، مانند دستگاه های هواوی ، می تواند در نصب پروفایل دخالت کند. برای اطمینان از نصب پروفایل شما به طور مؤثر ، هرگونه بهینه سازی باتری را در دستگاه های معیار خود غیرفعال کنید.

منابع اضافی

{% کلمه به کلمه %} {% آخر کلمه %} {% کلمه به کلمه %} {% آخر کلمه %}