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

Это то, что мы реализовали в iOS-приложении Blibli Seller Center, чтобы улучшить работу пользователей, исправив проблемы с низкой производительностью! Так как же нам внедрить трекер, чтобы выявить проблемы с производительностью?

Настройка проекта Firebase и SwiftUI

Прежде чем мы углубимся в код, давайте пройдемся по начальным шагам настройки:

  1. Создайте проект Firebase: перейдите в консоль Firebase (https://console.firebase.google.com) и создайте новый проект. Следуйте предоставленным инструкциям, чтобы настроить проект и включить мониторинг производительности.
  2. Добавьте Firebase в наш проект SwiftUI: мы можем использовать CocoaPods или Swift Package Manager для импорта фреймворка Firebase в наш проект.

Реализация трекера производительности в SwiftUI

Теперь, когда мы настроили Firebase, давайте посмотрим, как мы можем реализовать Performance Tracker в проекте SwiftUI.

Перед этим давайте создадим новый файл с именем PerformanceTracker.swift, который будет содержать функции отслеживания производительности.

В наш только что созданный файл импортируем необходимый фреймворк Firebase:

import FirebasePerformance

И в классе мы можем добавить следующие функции (эти функции используются для запуска и остановки пользовательских трейсов):

final class PerformanceTracker {
    private var traces: [String: Trace] = [:]
    
    init() { }
    
    // To Start Tracking
    func startTrackPerformance(traceName: String) {
        guard let trace = Performance.startTrace(name: traceName) else {
            print("Failed to startTrackPerformance of \(traceName)")
            return
        }
        print("startTrackPerformance of \(traceName)")
        
        // Save the current running trace in a dictionary
        traces[traceName] = trace
    }
    
    // To Stop Tracking
    func stopTrackPerformance(traceName: String) {
        guard let trace = traces[traceName] else {
            print("Failed to stopTrackPerformance of \(traceName)")
            return
        }
        print("stopTrackPerformance of \(traceName)")
        
        // Stop the running trace
        trace.stop()
    }
}

Внедрив FirebasePerformance, он также будет автоматически измерять время запуска нашего приложения.

Что такое пользовательская трассировка? И как это работает?

В Firebase Performance пользовательская трассировка — это функция, которая позволяет нам измерять производительность определенных сегментов кода или операций в нашем приложении. Это позволяет нам отслеживать и анализировать время выполнения и другие показатели производительности настраиваемых областей в нашей кодовой базе.

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

Трассировки записываются в Firebase путем запуска и остановки трассировок. Конечно, если она запущена, ее тоже нужно остановить, иначе она не запишется, что бы мы ни делали.

Запуск и остановка трассировки производительности: внутри нашего представления SwiftUI (или любой функции) мы можем запускать и останавливать трассировку производительности для измерения конкретных операций. Например, мы можем измерить время, необходимое странице для завершения загрузки данных из API. Вот пример запуска и остановки трассировки производительности в HomeView:

struct HomeView: View {
    private let performanceTracker: PerformanceTracker

    init() {
      performanceTracker = PerformanceTracker()
    }

    var body: some View {
        VStack {
          // Our SwiftUI view code, we can also track here if needed
        }
        .onAppear {
          loadDataFromAPI() // Get Data from API
        }
    }
    
    private func loadDataFromAPI() {
        let traceName: String = "Home Page"
        // Start the trace to measure performance of loading data from API
        performanceTracker.startTrackPerformance(traceName: traceName)

        // Code to load data from API
        ...
        
        // After the data is loaded and being shown to View, stop tracking
        performanceTracker.stopTrackPerformance(traceName: traceName)
    }
}

В приведенном выше коде мы запускаем трассировку производительности под названием «Домашняя страница» (чтобы мы могли идентифицировать трассировку по имени в консоли Firebase) перед загрузкой данных из конечной точки API. После завершения операции мы останавливаем трассировку производительности, чтобы ее можно было записать в Firebase Console.

Анализ данных о производительности в Firebase Console

После внедрения Performance Tracker мы можем анализировать собранные данные о производительности в консоли Firebase. Консоль предоставляет ценную информацию и отчеты по различным показателям производительности, таким как сетевые запросы, отрисовка экрана и время запуска приложения. Мы можем проверить производительность нашей «Домашней страницы», открыв эту страницу, и проверить результат на вкладке «Пользовательские трассировки». Чтобы просмотреть подробные сведения об аналитике для каждого имени трассировки, щелкните одну из трассировок.

Консоль доступна здесь.

Добавление пользовательских атрибутов

Нужны дополнительные сведения при анализе записи трассировки производительности? Мы также можем добавить пользовательские атрибуты по пути!

Например, в PerformanceTracker мы хотели бы добавить идентификатор сеанса пользователя или что-то, что мы сделали сами!

final class PerformanceTracker {
  ...
  func startTrackPerformance(traceName: String) {
    ...
    // After starting the trace, setup the attributes
    setupCustomAttributes(traceName: traceName)
  }

  ...
}

private extension PerformanceTracker {
  func setupCustomAttributes(traceName: String) {
    guard let trace = traces[traceName] else { return }

    trace.setValue("1234", "session_id")
    trace.setValue("5678", "user_pseudo_id")
  }
}

После этого мы можем проверить пользовательские атрибуты, нажав кнопку фильтра на каждой трассировке в Firebase Console после ее записи!

Оптимизация производительности приложения

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

  1. Оптимизация сети. Анализ показателей производительности сети для выявления медленных сетевых запросов или соединений с высокой задержкой. Рассмотрите возможность реализации механизмов кэширования, оптимизации ответов API или использования таких методов, как предварительная выборка, для повышения производительности сети.
  2. Встроенная оптимизация производительности. Анализируйте производительность функций или собственных страниц, чтобы определить медленную загрузку, вызванную неоптимизированными алгоритмами. Рассмотрите возможность оптимизации логики или изменения иерархии представлений.
  3. Время запуска приложения. Проанализируйте показатель времени запуска приложения, чтобы определить потенциальные узкие места. Оптимизируйте процессы инициализации и ресурсоемкие задачи, чтобы сократить время запуска и обеспечить более быструю работу.

Заключение

Я показал вам, что реализация средства отслеживания производительности в приложении SwiftUI с использованием Firebase может помочь нам выявить проблемы с производительностью и дает нам информацию для значительного повышения производительности приложения и обеспечения превосходного взаимодействия с пользователем. Приведенный выше пример кода служит отправной точкой для интеграции Performance Tracker в наш проект SwiftUI.

Спасибо, что прочитали эту статью. Не стесняйтесь оставить комментарий ниже!