Диагностика проблем производительности интерфейса с помощью RUM Profiling

Источник: Datadog•

Диагностика проблем производительности интерфейса с помощью RUM Profiling

Используйте Datadog RUM Profiling для выявления кода, интенсивно использующего ЦП, который приводит к медленному запуск мобильных приложений и взаимодействию с интерфейсом в iOS, Android и браузерах.

Когда мобильное приложение запускается слишком долго или перестает реагировать на действия, бывает трудно найти причину. Datadog Real User Monitoring (RUM) помогает разработчикам обнаруживать эти проблемы и понимать, какие пользователи затронуты. Но знание того, что приложение работает медленно, не подсказывает, какая именно часть его кода за это отвечает. Инженерам часто приходится воспроизводить проблему локально, собирая воедино метрики производительности и информацию о выполнении кода из разных инструментов. Это может быть особенно сложно, когда производительность варьируется в зависимости от устройств, версий операционных систем и реальных условий. Вдобавок к этому бывает непросто поделиться результатами локального профилирования с коллегами по команде.

Datadog RUM Profiling — это дополнение к RUM, которое связывает данные профилирования ЦП на уровне кода с измерениями производительности из сеансов реальных пользователей. RUM Profiling, поддерживающая браузерные приложения через Browser Profiler, теперь также поддерживает приложения для iOS и Android, позволяя разработчикам видеть, какие методы потребляют время ЦП во время критически важных с точки зрения производительности операций на устройствах реальных пользователей.

В этой статье мы покажем, как RUM Profiling помогает вам:

  • Выявлять узкие места на уровне кода в приложениях для iOS и Android

Выявлять узкие места на уровне кода в приложениях для iOS и Android

  • Сбирать данные о производительности на уровне кода из мобильных приложений в продакшене

Сбирать данные о производительности на уровне кода из мобильных приложений в продакшене

  • Устранять неполадки производительности интерфейса в браузерных и мобильных приложениях

Устранять неполадки производительности интерфейса в браузерных и мобильных приложениях

Выявлять узкие места на уровне кода в приложениях для iOS и Android

RUM Profiling прикрепляет профили ЦП к событиям RUM, в которых проявляются проблемы с производительностью мобильных устройств — от медленного запуска приложений до моментов, когда приложение перестает отвечать на запросы, а также к рабочим процессам, которые разработчики определяют как критически важные операции RUM. Разработчики могут использовать RUM Profiling для исследования кода, стоящего за отдельным медленным или зависшим событием, либо для поиска узких мест, оказывающих наибольшее влияние на производительность.

Медленный запуск приложений может создавать неудобства еще до того, как пользователи успеют начать взаимодействие с приложением. С помощью RUM разработчики могут отслеживать производительность запуска с помощью стандартных для отрасли измерений, таких как Time to Initial Display (TTID) и Time to Full Display (TTFD). Эти измерения помогают командам определить степень серьезности задержек при запуске, но сами по себе они не объясняют, что может быть причиной таких задержек.

RUM Profiling помогает объяснить причину, добавляя видимость на уровне кода за счет сопоставления профилей ЦП с событиями запуска приложений в iOS и Android. Когда разработчики выявляют медленный показатель TTID, они могут изучить соответствующие профили ЦП, чтобы увидеть, какие функции выполнялись в течение затронутого периода запуска, без необходимости воспроизводить те же условия на локальном устройстве.

Например, предположим, что инженерная команда настроила монитор Datadog для отслеживания TTID при холодном запуск приложений. После развертывания новой версии команда получает оповещение о значительной задержке времени запуска. RUM помогает им определить затронутую версию приложения и сеансы, а RUM Profiling предоставляет связанные профили ЦП. Разработчики могут изучить стеки вызовов методов в графиках пламени (flame graphs) и на временных шкалах потоков, чтобы исследовать, какие функции потребляли время ЦП во время запуска, и выявить потенциальные источники регрессии. Они могут сделать все это прямо в RUM, не переключаясь на отдельный инструмент отладки, и при необходимости скарчивать профили для дальнейшего анализа.

Отслеживание критически важных рабочих процессов с помощью операций RUM

Запуск приложения — это важный вариант использования, но разработчикам также необходимо исследовать производительность во время критически важных для бизнеса взаимодействий. Например, процесс оформления заказа может временами зависать у определенных пользователей, даже если общая производительность приложения выглядит нормальной. Критически важные операции RUM позволяют разработчикам явно отмечать ключевые моменты в своем приложении для профилирования, такие как аутентификация, добавление товара в корзину или завершение оформления заказа. Включение профилирования для операции сообщает Datadog, что этот момент имеет значение. Затем Datadog собирает данные профилирования ЦП во время этого действия и прикрепляет их к событию RUM данной операции, даже если в течение этого времени не фиксируется стандартное событие RUM. Это дает разработчикам контекст на уровне кода для важных рабочих процессов, а не только для тех событий, которые Datadog профилирует автоматически.

Понимание масштаба проблем производительности с помощью агрегированных представлений профилирования

Один профиль ЦП может помочь разработчикам исследовать отдельную проблему производительности, но он не обязательно раскрывает масштаб этой проблемы. Например, функция, которая потребляет избыточное время ЦП во время одного запуска приложения, также может способствовать замедлению запуска во многих сеансах. Выявление этих повторяющихся закономерностей помогает инженерам расставить приоритеты в отношении улучшений, которые принесут пользу большему числу пользователей.

RUM Profiling предоставляет агрегированные представления профилирования, которые помогают разработчикам выявлять методы, неоднократно вносящие вклад в потребление ЦП в нескольких сеансах реальных пользователей. Это помогает им отличать изолированные проблемы производительности от повторяющихся узких мест, которые могут потребовать более масштабной работы по оптимизации.

Для мобильных приложений агрегированные профили охватывают поддерживаемые сценарии профилирования, включая запуск приложения, TTID, TTFD и критически важные операции RUM. Например, если у нескольких пользователей наблюдается медленный запуск приложений, агрегированные данные профилирования могут помочь определить методы, которые неоднократно потребляют время ЦП во время запуска. Затем разработчики могут изучить отдельные профили для получения дополнительного контекста и определить, какие пути кода следует исследовать.

Разработчики также могут сравнивать агрегированные данные профилирования по группам сеансов для исследования регрессий производительности. Например, они могут сравнить медленный запуск приложений (на уровне p90 и выше) с типичным запуском (на уровне p75 и ниже), чтобы выявить методы, которые потребляют больше времени ЦП в более медленных сеансах, или сравнить данные профилирования по версиям приложений для исследования изменений в выполнении кода после развертывания.

После оптимизации метода, интенсивно использующего ЦП, разработчики могут использовать стандартные метрики, предоставляемые через RUM without Limits, включая TTID, TTFD и критически важные операции RUM, чтобы оценить, улучшилась ли производительность приложения для реальных пользователей.

Сбор данных о производительности на уровне кода из мобильных приложений в продакшене

Традиционные инструменты профилирования могут создавать дополнительную нагрузку на ЦП и аккумулятор, потенциально влияя на ту самую производительность, которую они призваны измерять. Из-за этого разработчики часто проводят профилирование в контролируемых тестовых средах. Но в таких средах может быть трудно или невозможно воспроизвести проблемы, возникающие только на определенных устройствах или в реальных условиях.

RUM Profiling обходит эту проблему, выполняя профилирование только выборки запусков приложений и сеансов в продакшене на устройствах реальных пользователей. Она позволяет разработчикам управлять сбором профилей на iOS и Android с помощью коэффициентов выборки, которые можно настраивать с помощью RUM Remote Configuration. Если время запуска приложений или показатели Android ANR увеличиваются, например, команда может повысить частоту выборки профилей для сбора большего их числа, а затем снизить ее после сбора достаточного объема данных.

Лежащие в основе механизмы сбора данных различаются в зависимости от платформы. На Android Datadog использует API ProfilingManager операционной системы, с учетом ограничений частоты на уровне приложения и устройства. RUM Profiling также фиксирует профили ЦП для ошибок ANR. На Android 16 или более поздних версиях они могут включать системные трассировки, показывающие, чего ожидал главный поток, например блокировку, удерживаемую другим потоком, медленное чтение с диска или вызов другого процесса. На iOS RUM Profiling связывает профили ЦП с запусками приложений, зависаниями приложений и длительными задачами, поэтому разработчики могут изучать код, выполняющийся, когда приложение зависает или перестает отвечать на запросы.

Устранение неполадок с производительностью интерфейса в браузерных и мобильных приложениях

Многие инженерные команды поддерживают как веб-приложения, так и нативные мобильные приложения, но проблемы с производительностью в этих средах могут существенно различаться. В браузерных приложениях долго выполняющиеся задачи JavaScript могут блокировать главный поток и задерживать взаимодействие с пользователем. Нативные приложения для iOS и Android выполняют работу в нескольких потоках, поэтому разработчикам может потребоваться исследовать активность в разных потоках, чтобы выявить код, вызывающий замедление. Хотя каждая платформа использует разные механизмы профилирования и поддерживает разные сценарии сбора данных, Datadog упаковывает и представляет данные профилирования одинаково для каждой платформы. Все профили привязаны к событиям RUM, их можно запрашивать вместе с остальными данными RUM, и они объединяются в те же сводные представления профилирования.

Для браузерных приложений RUM Profiling собирает данные профилирования ЦП JavaScript и сопоставляет их с событиями RUM, включая представления, действия, длительные задачи и показатели производительности. Разработчики могут использовать Profiling Explorer для исследования ресурсоемких функций ЦП, выявления повторяющихся узких мест и сравнения данных профилирования между версиями приложений. Вы можете узнать больше в нашей публикации о Browser Profiler.

Благодаря поддержке iOS и Android инженеры, отвечающие, например, за приложение электронной коммерции, могут использовать RUM Profiling для исследования функций JavaScript, которые способствуют замедлению взаимодействия при оформлении заказа в браузере, а также для изучения профилей ЦП, связанных с медленными запусками, ANR на Android, зависаниями приложений на iOS или операциями RUM в своих мобильных приложениях.

Быстрое определение первопричин с помощью Bits AI и Datadog MCP Server

Разработчикам не нужно быть экспертами в чтении данных профилирования, чтобы принимать меры на их основе. Из любого проанализированного события RUM или со страницы сводного профилирования они могут обратиться к Bits AI за первопричиной замедления, например почему приложение зависло или что вызвало регрессию в последнем выпуске, без ручного просмотра стеков вызовов или пламя-диаграмм (flame graphs). Разработчики также могут использовать инструменты профилирования Datadog MCP Server для запроса проблемных сеансов, таких как сеансы с медленным запуском приложений, частыми ANR или зависаниями приложений, и анализа связанных профилей ЦП.

Исследование производительности интерфейса вплоть до кода с помощью RUM Profiling

RUM помогает разработчикам выявлять проблемы с производительностью, с которыми сталкиваются пользователи, а RUM Profiling предоставляет контекст на уровне кода, объясняющий, почему они возникают. Благодаря поддержке браузерных приложений, а также приложений для iOS и Android, инженерные команды могут использовать RUM Profiling для исследования узких мест на уровне кода в интерфейсных средах и использовать данные профилирования с устройств реальных пользователей для оптимизации.

RUM Profiling доступна в качестве дополнения к Datadog Real User Monitoring. Чтобы начать работу, обратитесь к документации по RUM Profiling для Android, iOS и браузера. Чтобы узнать больше об исследовании производительности JavaScript, прочитайте нашу публикацию о Browser Profiler.

Если вы новичок в Datadog, зарегистрируйтесь для получения 14-дневной бесплатной пробной версии, чтобы начать исследование производительности реальных пользователей с помощью Datadog RUM.

О чём эта статья