چگونه‌ها

راهنمای سطح‌بندی برای سفر عملکرد شما

۹ دقیقه مطالعه
Alice Yuan
مهندس روابط توسعه‌دهنده

راهنمای سطح‌بندی برای سفر عملکرد شما

به روز چهارم از هفته‌ی Performance Spotlight خوش آمدید. حالا که با برخی از ابزارهای فوق‌العاده و بهترین شیوه‌هایی که اخیراً معرفی کرده‌ایم، مانندR8 Optimizer و Profile Guided Optimization with Baseline Profiles و Startup Profiles آشنا شدید، ممکن است از خود بپرسید که سفر بهبود عملکرد خود را از کجا شروع کنید.

ما یک راهنمای گام به گام برای تعیین سطح عملکرد ارائه داده‌ایم تا بتوانید با تیم توسعه موبایل خود در هر کجا که هستید، هماهنگ شوید - چه یک برنامه با یک توسعه‌دهنده باشید که به دنبال شروع کار با عملکرد است، و چه یک تیم کامل برای بهبود عملکرد اندروید داشته باشید.

راهنمای سطح‌بندی عملکرد شامل ۵ سطح است. ما با سطح ۱ شروع می‌کنیم که ابزارهای عملکرد با حداقل تلاش برای پذیرش را معرفی می‌کند و به سطح ۵ می‌رسیم که برای برنامه‌هایی که منابع لازم برای حفظ یک چارچوب عملکرد سفارشی را دارند، ایده‌آل است.


در صورت تمایل به سطحی که بیشترین همخوانی را با شما دارد، پرش کنید:

سطح ۱: استفاده از نظارت میدانی ارائه شده توسط کنسول Play

توصیه می‌کنیم ابتدا از Android Vitals در Play Console برای مشاهده داده‌های جمع‌آوری‌شده خودکار پایش میدانی استفاده کنید تا با کمترین تلاش، بینشی در مورد برنامه خود به دست آورید.

Android Vitals ابتکار گوگل برای جمع‌آوری و نمایش خودکار این داده‌های میدانی برای شماست.

در اینجا توضیحی در مورد نحوه ارائه این داده‌ها ارائه می‌دهیم:

  1. جمع‌آوری داده‌ها: وقتی کاربری در این سیستم ثبت نام می‌کند، دستگاه اندروید او به‌طور خودکار رویدادهای کلیدی عملکرد و پایداری را از همه برنامه‌ها، از جمله برنامه‌های شما، ثبت می‌کند.
  2. داده‌های تجمیعی: گوگل پلی این داده‌ها را از کاربران برنامه شما جمع‌آوری و ناشناس می‌کند.
  3. Surface Insights: داده‌ها در داشبورد Android Vitals در کنسول Google Play شما ارائه می‌شوند.

داشبورد Android Vitals معیارهای زیادی را ردیابی می‌کند، اما تعداد کمی از آنها به عنوان Core Vitals تعیین شده‌اند. اینها مهمترین هستند زیرا می‌توانند بر دیده شدن و رتبه‌بندی برنامه شما در فروشگاه Google Play تأثیر بگذارند.

عناصر حیاتی اصلی

معیارهای اصلی کیفیت فنی گوگل پلی

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

نرخ خرابی درک شده توسط کاربر درصد کاربران فعال روزانه که حداقل یک خرابی قابل توجه را تجربه کرده‌اند
نرخ ANR درک شده توسط کاربر درصد کاربران فعال روزانه که حداقل یک ANR قابل توجه را تجربه کرده‌اند
مصرف بیش از حد باتری درصد جلسات استفاده از واچ فیس که در آنها مصرف باتری بیش از ۴.۴۴٪ در ساعت است
جدید: قفل‌های بیداری جزئی بیش از حد درصد جلسات کاربری که در آن مجموع استفاده از قفل بیداری (wake lock) بدون استثنا بیش از ۲ ساعت بوده است

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

نرخ ANR ادراک‌شده توسط کاربر

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

تصادفاتAnrs.png

شما می‌توانید به جزئیات یک ANR خاص که رخ داده است، بپردازید تا ردپای پشته و همچنین بینش‌هایی در مورد آنچه ممکن است باعث ایجاد مشکل شود، مشاهده کنید.

بینش‌ها.png

همچنین، راهنمای ANR ما را بررسی کنید تا به شما در تشخیص و رفع سناریوهای رایجی که ممکن است ANR در آنها رخ دهد، کمک کند.

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

برای اشکال‌زدایی بیشتر خرابی‌ها و مشاهده نمونه‌ای از ردگیری‌های پشته‌ای که در برنامه شما رخ می‌دهد، از داشبورد خرابی‌های Android Vitals استفاده کنید.

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

مصرف بیش از حد باتری

برای کاهش دفعات استفاده از واچ فیس در Wear OS که باعث مصرف بیش از حد باتری می‌شود، راهنمای Wear در مورد چگونگی بهبود و صرفه‌جویی در مصرف باتری را بررسی کنید.

[جدید] قفل‌های بیداری جزئی بیش از حد

ما اخیراً اعلام کردیم که برنامه‌هایی که از آستانه‌ی قفل بیداری جزئی بیش از حد تجاوز می‌کنند، ممکن است از اول مارس ۲۰۲۶ با اقدامات بیشتری مواجه شوند.

برای دستگاه‌های تلفن همراه، معیار Android Vitals برای قفل‌های بیداری بدون معافیت که در حین خاموش بودن صفحه نمایش و در حالی که برنامه در پس‌زمینه یا در حال اجرای یک سرویس پیش‌زمینه است، اعمال می‌شود. Android Vitals استفاده جزئی از قفل بیداری را بیش از حد در نظر می‌گیرد اگر قفل‌های بیداری حداقل به مدت دو ساعت در یک دوره 24 ساعته نگه داشته شوند و بیش از 5٪ از جلسات برنامه شما را، به طور متوسط ​​​​در 28 روز، تحت تأثیر قرار دهند.

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

به مستندات Android Vitals ما مراجعه کنید و سفر خود را برای بهره‌برداری بهتر از Android Vitals ادامه دهید.

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

در مرحله بعد، با استفاده از امتیاز عملکرد برنامه، موارد عملی با قدرت نفوذ بالا را برای ارتقاء عملکرد برنامه خود پیدا کنید.

امتیاز عملکرد برنامه اندروید یک چارچوب استاندارد برای اندازه‌گیری عملکرد فنی برنامه شماست. این امتیاز بین 0 تا 100 به شما می‌دهد، که در آن عدد پایین‌تر نشان‌دهنده فضای بیشتر برای بهبود است.

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

مرحله ۱: انجام ارزیابی استاتیک

ارزیابی استاتیک، پیکربندی و پذیرش ابزار پروژه شما را ارزیابی می‌کند. اینها اغلب سریع‌ترین راه‌ها برای بهبود عملکرد هستند.

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

  1. نسخه افزونه Gradle اندروید (AGP) را ارزیابی کنید.
  2. به تدریج از R8 Minification استفاده کنید یا در حالت ایده‌آل، از R8 در حالت کامل برای کوچک‌سازی و بهینه‌سازی کد برنامه استفاده کنید.
  3. پروفایل‌های پایه را اتخاذ کنید که سرعت اجرای کد را از اولین اجرا بهبود می‌بخشد و بهبود عملکرد را برای هر نصب برنامه جدید و هر به‌روزرسانی برنامه ارائه می‌دهد.
  4. برای بهبود طرح‌بندی Dex، از پروفایل‌های راه‌اندازی استفاده کنید. پروفایل‌های راه‌اندازی توسط سیستم ساخت برای بهینه‌سازی بیشتر کلاس‌ها و متدهای موجود در آنها استفاده می‌شوند و این کار را با بهبود طرح‌بندی کد در فایل‌های DEX مربوط به APK شما انجام می‌دهند.
  5. به جدیدترین نسخه Jetpack Compose ارتقا دهید

مرحله ۲: انجام ارزیابی پویا

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

به بخش امتیاز پویا در صفحه امتیازدهی بروید و موارد زیر را انجام دهید:

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

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

سطح ۳: استفاده از چارچوب‌های تست عملکرد محلی

وقتی شروع به ارزیابی عملکرد پویا کردید، ممکن است اندازه‌گیری دستی عملکرد برایتان بسیار خسته‌کننده باشد. خودکارسازی تست عملکرد خود را با استفاده از چارچوب‌های تست عملکرد مانند Macrobenchmarks و UiAutomator در نظر بگیرید.

ماکروبنچ‌مارک 💚 رابط کاربری خودکار

Macrobenchmark و UiAutomator را به عنوان دو ابزاری که با هم کار می‌کنند در نظر بگیرید: Macrobenchmark ابزار اندازه‌گیری است. مانند یک کرونومتر و یک شمارنده نرخ فریم است که خارج از برنامه شما اجرا می‌شود. این ابزار مسئول شروع برنامه شما، ثبت معیارها (مانند زمان شروع یا فریم‌های از دست رفته) و توقف برنامه است. UiAutomator کاربر ربات است. این کتابخانه به شما امکان می‌دهد کدی بنویسید تا با صفحه نمایش دستگاه تعامل داشته باشید. می‌تواند یک آیکون پیدا کند، روی یک دکمه ضربه بزند، در یک لیست پیمایش کند و موارد دیگر.

نحوه نوشتن تست

وقتی یک تست می‌نویسید، کد UiAutomator خود را درون یک بلوک Macrobenchmark قرار می‌دهید.

  1. تعریف آزمون: استفاده از @MacrobenchmarkRule
  2. شروع اندازه‌گیری: فراخوانی benchmarkRule.measureRepeated .
  3. رابط کاربری را هدایت کنید: درون آن بلوک، از کد UiAutomator برای راه‌اندازی برنامه خود، یافتن عناصر رابط کاربری و تعامل با آنها استفاده کنید.

در اینجا یک قطعه کد نمونه از نحوه‌ی تست یک لیست نوشتن برای اسکرول کردن jank آورده شده است.

  benchmarkRule.measureRepeated(

    // ...

    metrics = listOf(

        FrameTimingMetric(),

    ),

    startupMode = StartupMode.COLD,

    iterations = 10,

) {

    // 1. Launch the app's main activity

    startApp()

    // 2. Find the list using its resource ID and scroll down

    onElement { viewIdResourceName == "$packageName.my_list" }

        .fling(Direction.DOWN)

}

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

  timeToInitialDisplayMs  min  1894.4,   median 2847.4,   max  3355.6


frameOverrunMs          P50 -3.2,  P90  6.2, P95  10.4, P99  119.5

موارد استفاده رایج

Macrobenchmark چندین معیار اصلی را به صورت آماده ارائه می‌دهد. StartupTimingMetric به شما امکان می‌دهد تا زمان شروع به کار برنامه را به طور دقیق اندازه‌گیری کنید. FrameTimingMetric به شما امکان می‌دهد تا عملکرد رندرینگ یک برنامه را در طول آزمایش درک کنید.

ما یک راهنمای کامل و مفصل برای استفاده از Macrobenchmarks و UiAutomator به همراه نمونه‌های کد برای ادامه یادگیری شما داریم.

سطح ۴: از ابزارهای تحلیل ردیابی مانند Perfetto استفاده کنید

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

برای دستورالعمل‌های ویدیویی در مورد اشکال‌زدایی عملکرد با استفاده از ردیابی‌های سیستم، Android Studio Profiler و Perfetto، لیست پخش یوتیوب Performance Debugging ما را بررسی کنید.

نحوه استفاده از Perfeto برای اشکال‌زدایی عملکرد

گردش کار کلی برای اشکال‌زدایی عملکرد با استفاده از ابزارهای تحلیل ردیابی، ثبت، بارگذاری و تحلیل ردیابی است.

مرحله ۱: ثبت ردپا

شما می‌توانید با استفاده از چندین روش، ردیابی سیستم را ثبت کنید:

مرحله ۲: بارگذاری مسیر

پس از تهیه فایل ردیابی، باید آن را در ابزار تحلیل بارگذاری کنید.

  1. کروم را باز کنید و به ui.perfetto.dev بروید.
  2. فایل .perfetto-trace (یا .pftrace ) خود را مستقیماً به پنجره مرورگر بکشید و رها کنید.
  3. رابط کاربری فایل را پردازش کرده و جدول زمانی را نمایش می‌دهد.

مرحله ۳: تحلیل ردپا

شما می‌توانید از Perfetto UI یا Android Studio Profiler برای بررسی مشکلات عملکرد استفاده کنید. این قسمت از مجموعه مهارت‌های MAD در مورد عملکرد را ببینید، جایی که مهندس عملکرد ما، کارمن جکسون، در مورد ردیاب Perfetto صحبت می‌کند.

سناریوهایی برای بررسی ردپاهای سیستم با استفاده از Perfetto

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

اشکال‌زدایی Jank (فریم‌های افتاده)

اگر برنامه شما هنگام پیمایش دچار مشکل می‌شود، Perfetto می‌تواند دقیقاً به شما نشان دهد که چرا یک فریم خاص مهلت خود را از دست داده است.

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

اگر مشکل از سیستم باشد، ممکن است نخ اصلی خود را آماده اجرا ببینید، اما زمان‌بند هسته CPU اولویت را به یک سرویس سیستمی دیگر داده و برنامه شما را در حالت انتظار قرار داده است (اختلال CPU). این نشان دهنده سناریوهایی است که ممکن است نیاز به بهینه‌سازی استفاده از APIهای پلتفرم داشته باشید.

تحلیل سرعت پایین شروع به کار اپلیکیشن

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

می‌توانید ببینید که آیا منتظر فراخوانی‌های Binder (ارتباط بین فرآیندی) هستید یا خیر. اگر onCreate شما مدت زیادی منتظر پاسخی از PackageManager سیستم بماند، Perfetto آن حالت مسدود شده را به وضوح نشان می‌دهد.

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

بررسی تخلیه باتری و استفاده از CPU

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

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

سطح ۵: چارچوب ردیابی عملکرد خودتان را بسازید

سطح آخر برای برنامه‌هایی است که تیم‌هایی با منابع لازم برای حفظ چارچوب ردیابی عملکرد دارند.

ساخت یک چارچوب ردیابی عملکرد سفارشی در اندروید شامل استفاده از چندین API سیستم برای ثبت داده‌ها در طول چرخه عمر برنامه، از شروع تا خروج و در طول سناریوهای خاص با بار زیاد است.

با استفاده از ApplicationStartInfo ، ProfilingManager و ApplicationExitInfo ، می‌توانید یک سیستم تله‌متری قوی ایجاد کنید که نحوه شروع برنامه، اطلاعات دقیقی از عملکرد آن در حین اجرا و دلیل از کار افتادن آن را گزارش دهد.

ApplicationStartInfo: ردیابی نحوه شروع برنامه

ApplicationStartInfo که از اندروید ۱۵ (API 35) در دسترس است، معیارهای دقیقی در مورد راه‌اندازی برنامه در این زمینه ارائه می‌دهد. این داده‌ها شامل این است که آیا شروع برنامه سرد، گرم یا داغ بوده است و مدت زمان مراحل مختلف راه‌اندازی چقدر بوده است.

این به شما کمک می‌کند تا با استفاده از داده‌های تولید، یک معیار پایه برای شروع کار ایجاد کنید تا بتوانید آن را بیشتر بهینه‌سازی کنید، چیزی که ممکن است تولید مجدد آن به صورت محلی دشوار باشد. می‌توانید از این معیارها برای اجرای تست‌های A/B و بهینه‌سازی جریان شروع کار استفاده کنید.

هدف، ثبت دقیق معیارهای راه‌اندازی بدون اندازه‌گیری دستی هر مرحله راه‌اندازی است.

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

ProfilingManager: فهمیدن دلیل کند بودن آن

ProfilingManager (API 35) به برنامه شما اجازه می‌دهد تا به صورت برنامه‌نویسی شده، ردیابی‌های سیستمی را روی دستگاه‌های کاربر انجام دهد. این ابزار برای شناسایی مشکلات عملکردی گذرا در دنیای واقعی که نمی‌توانید به صورت محلی آنها را ایجاد کنید، قدرتمند است.

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

شما می‌توانید یک شنونده (listener) ثبت کنید که در صورت برآورده شدن شرایط خاص فعال شود یا در صورت تشخیص مشکل عملکردی مانند لرزش، حافظه بیش از حد یا تخلیه باتری، آن را به صورت دستی فعال کنید.

مستندات ما را در مورد نحوه ثبت یک پروفایل ، بازیابی و تجزیه و تحلیل داده‌های پروفایل و استفاده از دستورات اشکال‌زدایی بررسی کنید.

ApplicationExitInfo: پیگیری دلیل از کار افتادن برنامه

ApplicationExitInfo (API 30) به شما می‌گوید که چرا فرآیند قبلی شما از کار افتاده است. این برای یافتن خرابی‌های بومی، ANRها یا از کار افتادن‌های سیستم به دلیل استفاده بیش از حد از حافظه (OOM) بسیار مهم است. همچنین می‌توانید با استفاده از API getTraceInputStream ، یک رد سنگ قبر دقیق دریافت کنید.

هدف این API درک مشکلات پایداری است که گزارش‌دهنده‌های استاندارد خرابی جاوا (مانند خطای Low Memory Kills) را فعال نمی‌کنند.

شما باید این API را فعال کنید   راه اندازی برنامه بعدی.

مراحل بعدی

بهبود عملکرد اندروید یک سفر گام به گام است. ما بسیار هیجان‌زده‌ایم که ببینیم چگونه با استفاده از این ابزارها، عملکرد خود را ارتقا می‌دهید!

فردا منتظر Ask Android باشید

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

فردا در جلسه زنده «از اندروید بپرس» به ما بپیوندید. همین حالا با استفاده از هشتگ #AskAndroid سوالات خود را بپرسید و پاسخ آنها را از متخصصان دریافت کنید.

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

    ادامه مطلب