Что быстрее по производительности: ConstraintLayout в Jetpack Compose или 10 вложенных Row
Что проверяют
Не перенесёте ли вы механически правило из системы View в Compose. Вопрос сформулирован как ловушка: ожидаемый заученный ответ про вред вложенности здесь неверен, и интервьюеру интересно, знаете ли вы, откуда это правило вообще взялось.
Как отвечать
Сначала показать, что понимаете исходное правило. В системе View глубокая вложенность действительно дорога: LinearLayout с весами и RelativeLayout измеряют детей дважды, и на каждом уровне вложенности стоимость умножается. Ради этого и появился ConstraintLayout, он даёт плоскую иерархию вместо вложенной.
В Compose это правило не работает. Каждый узел измеряет каждого ребёнка ровно один раз, повторное измерение того же ребёнка бросает исключение, поэтому глубина стоит линейно, а не по степени. Десять вложенных Row это десять обычных узлов раскладки, каждый просто ставит детей подряд. ConstraintLayout в Compose на каждое измерение прогоняет решатель системы ограничений, и на простой разметке он не быстрее вложенных Row, а обычно медленнее. Берут его за читаемость сложных взаимных связей, не за скорость.
Честный финал: на десяти узлах разница в любом случае лежит в шуме, а реальные тормоза в Compose приходят из лишних рекомпозиций, нестабильных параметров и чтения состояния слишком высоко по дереву.
Где спотыкаются
Отвечают по системе View и уверенно говорят, что плоская иерархия быстрее. Формально термин ConstraintLayout в вопросе есть, и кандидат даже не замечает, что речь про совсем другой компонент с тем же именем.
Второе: считают, что Compose перерисовывает всё дерево при любом изменении, и из этого выводят пользу уплощения. Рекомпозиция ограничена областью, которая читает изменившееся состояние, и бороться надо за размер этой области, а не за глубину.
Третье: делают выводы из замеров в отладочной сборке. Compose в debug заметно медленнее, чем в release с включённым R8, и оптимизировать разметку по таким числам значит чинить то, чего в продакшене нет. Мерить надо Macrobenchmark и счётчиком рекомпозиций.