The Airbnb Tech Blog | Medium на русском
Подписаться
Понимание и улучшение производительности SwiftUI
Airbnb принял SwiftUI в 2022 году, что улучшило производительность инженеров, но ввело новые проблемы с производительностью. Чтобы решить эти проблемы, Airbnb создал новые инструменты для выявления и проверки критических для производительности шаблонов кода. Архитектура функций компании использует декларативные шаблоны интерфейса пользователя и односторонние системы потока данных, что упростило принятие SwiftUI. Однако функции SwiftUI, использующие эту архитектуру, не показали ожидаемой производительности, и понимание характеристик производительности SwiftUI имеет решающее значение для создания функций с высокой производительностью. Алгоритм диффинга представлений SwiftUI, который определяет, когда тело представления необходимо переоценить, часто упускается из виду и не документируется официально. Алгоритм сравнивает каждое из сохраненных свойств представления, но общие шаблоны кода могут запутать его, что приводит к ненужным оценкам тела представления. Чтобы решить эту проблему, Airbnb создал новый макрос @Equatable, который генерирует соответствия Equatable для представлений, позволяя инженерам выбирать, какие свойства следует сравнивать при диффинге. Этот подход гарантирует, что представления могут быть диффед, и предотвращает появление регрессий позже. Кроме того, Airbnb реализовал пользовательское правило SwiftLint, чтобы помочь инженерам определить, когда тело представления слишком сложное и требует переработки в более мелкие, диффабельные части. Разбивая представления на более мелкие части, SwiftUI может эффективно обновлять только те части представления, которые фактически изменились, сохраняя производительность при росте сложности функций.