Если вы интересуетесь разработкой под Android, то, скорее всего, слышали о Telegram-канале «Android Broadcast» с ежедневными новостями для Android-разработчиков и одноимённом YouTube-канале. Этот пост — текстовая версия видео.
Выбор техники — всегда непростая задача, а новые процессоры Apple смогли здорово встряхнуть рынок и усложнить выбор. Какую модель MacBook выбрать, и насколько одна лучше другой, понять сложно. Искать качественные тесты — то ещё развлечение.
В этой статье я сделаю правильное сравнение скорости сборки реальных Android-проектов на различных MacBook, а также порекомендую, какой из них стоит выбрать в начале 2022 года.
Компьютеры для сравнения
Для сравнения я выбрал последние MacBook Pro на Intel, а также современные MacBook на основе M1. Также добавил свой старый iMac 27" Late 2015, чтобы наглядно увидеть прогресс от обновления.
Методология проведения тестов
Обеспечить полностью равные условия для всех компьютеров непросто, но я постарался создать идеальные условия:
Использовать JDK 11 и обновить ее до последней ревизии.
Использовать Gradle 7.3.3 для сборки проекта.
Отключить внешние дисплеи.
Подключить компьютер к питанию.
По-максимуму закрыть все программы, включая фоновые.
Закрыть Android Studio!
Включить производительный режим в настройках (если такой имеется).
Ноутбук ставить на плоскую твердую поверхность, чтобы не было проблем с забором воздуха и охлаждением.
Не трогать компьютер во время теста.
Отключить индексацию Spotlight или добавить папку с проектами для тестов в исключения.
Если вы знаете какие-то дополнительные условия, которые стоит соблюдать при проведении бенчмарка, буду рад прочитать их в комментариях к статье.
Тесты проводились с помощью утилиты Gradle Profiler в режиме benchmark, предназначенной для замера скорости сборки проектов. В результат записывалось среднее значение по десяти тестовым прогонам — после двух сборок для прогрева, которые не шли в зачёт.
Для каждого проекта был создан сценарий для запуска теста (файл performance.scenarios
), а все проекты собраны в отдельном репозитории.
Тесты
Конкретные цифры приведены в таблице ниже.
TiVi 0.6.3
TiVi — небольшой проект для отслеживания прогресса TV-шоу на основе trakt.tv.
Стек технологий: Jetpack Compose, kapt, Kotlin, Dagger, Hilt, Android Arhitecture Components, Firebase, Google Services и др.
Количество строк Kotlin-кода: 15 422
Подключенные Gradle-плагины: Android, Kotlin, Crashlytics, Hilt, Google Services, Kotlin Extentions, Spotless, Gradle Depedency Updates
Количество модулей: 25
Проект небольшой, но даже тут Intel значительно отстал от M1. M1 Pro/Max вырвался вперёд всего на одну секунду от M1. Из результатов тестов понятно одно: даже на таком маленьком проекте уже видно, что Apple Silicon значительно быстрее Intel Core 9 поколения.
ExoPlayer r.2.16.1
ExoPlayer — популярный медиаплеер, который используется на уровне Android-приложения.
Количество строк Java-кода: 224 638
Количество модулей: 35
Следующий проект демонстрирует преимущество множества производительных ядер в M1 Pro/Max. Получился существенный отрыв в результате: M1 справился за 39,4 секунд, а M1 Pro/Max с 10 ядрами — за 28 секунд. Лучший Intel справился за 43,9 секунд.
Focus 95.2.0
Focus — специальная приватная и безопасная версия Web-браузера Firefox.
Количество строк Kotlin-кода: 19 066
Количество строк XML: ~30 тыс
Количество модулей: 3
Бенчмарк Focus демонстрирует уже выявленные закономерности, но показывает, что восьмиядерная версия M1 Pro не отстаёт значительно от полной версии M1 Pro или M1 Max.
Firefox 95.2.0
Firefox — полная версия Web-браузера Firefox.
Количество строк Kotlin-кода: ~97 тыс
Количество строк XML: ~100 тыс
Количество модулей: 4
Скорость компиляции Kotlin-кода на порядок ниже, чем Java. Тем не менее, процессоры Apple показывают закономерное ускорение компиляции. Вот только разница между M1 Pro с 8 и 10 ядрами CPU всё так же незаметна. Как так?
Signal 5.28.8
Signal — популярный мессенджер, альтернатива Telegram.
Количество строк Java-кода: 248 305
Количество строк Kotlin-кода: 42 476
Количество строк XML: ~270 тыс
Количество модулей: 13
Наконец-то видно, что 8 ядер M1 Pro медленнее, чем полная версия процессора. В остальном — лишь подтверждение выводов, полученных в предыдущих проектах.
Telegram 8.2.1
Telegram Android GitHub — популярный мессенджер. Проект написан довольно специфично: нет Kotlin, весь UI в Java-коде, нет генерации кода с помощью apt или kapt, используется NDK.
Количество строк Java-кода: 700 098
Количество строк С-кода: 988 320
Количество строк XML: ~40 тыс
Количество модулей: 1
Telegram Android — самый крупный из тестируемых проектов и наглядно показывает разницу между процессорами. Бенчмарк удивил: это единственный из тестируемых проектов, в которых i7 и i9 в MacBook Pro 2019 года смогли собрать проект быстрее, чем Apple M1 в MacBook Air. Конечно же, мне стало интересно, почему так вышло, и я полез разбираться.
Причина оказалась в CMake и всего тулинга для компиляции нативного кода, которого в Telegram достаточно. На Apple M1 компиляции запускается c использование Rosetta 2 — в Android NDK на момент написания статьи его ещё не успели перевести на поддержку Apple Silicon. Хотя CMake, начиная с версии 3.19, и другие инструменты эту поддержку уже имеют. Подробности здесь.
Получается, в будущем мы получим значительный буст: как минимум Apple M1 имеет шансы обогнать i7 и, чем чёрт не шутит, даже i9. Так что ждём, когда допилят тулинг. Из теста вы также можете понять насколько хорошо M1 Pro/Max справляется с выполнением неоптимизированного для него софта, что способен обогнать i9 9 поколения.
Выводы по итогам тестов
Intel Core пока рано списывать со счёта, если в проекте много нативного кода. Во всех остальных сценариях смысла в процессорах Intel нет: они проигрывают даже самому базовому Apple M1. Со временем тулинг допилят, и преимущества процессоров Apple станет ещё очевиднее.
MacBook Air на M1 подойдет для большинства мобильных разработчиков. Только советую брать вариант с 16 ГБ оперативной памяти. С ним можно разрабатывать под Android и iOS, а также попробовать мультиплатформенную разработку (Kotlin Multiplatform, Flutter). Большое преимущество — отсутствие кулеров, что делает его тихим, но порой горячим (при очень долгой сборке).
Если вы работаете с большими проектами и хотите получить максимальные возможности либо вам нужно больше 16 ГБ оперативной памяти, тогда рекомендую обратить внимание на MacBook Pro с процессором M1 Pro в вариации на 10 ядер. 16-дюймовая версия будет быстрее и тише.
M1 Max и M1 Pro не показал существенной разницы в результатах. Max-версию стоит брать для разработки, только если нужно 64 ГБ памяти. Покупать его нужно только в корпусе 16 дюймов: в 14-дюймовой версии стоят меньшие частоты у GPU, а процессор начнёт быстрее тротлить из-за нагрева и сильнее шуметь. Не стоит забывать, что и размер батареи в 14-дюймовой версии меньше: время автономной работы даже без сложных задач будет меньше по сравнению с 16-дюймовой версией.
Сравнение с Ryzen и Intel 12 поколения
Я хочу продолжить сравнение и оценить скорость компиляции на современных процессорах от AMD и Intel, но пока возможности это сделать нет. Буду рад, если вы присоединитесь к тесту, заполнив форму. Я уже успел прогнать тесты на Ryzen 5900X, и его скорость впечатлила, но это уже тема отдельной статьи...
Больше полезного про Android — в телеграм-канале Surf Android Team. Здесь мы публикуем кейсы, лучшие практики, новости и вакансии Surf, а также проводим прямые эфиры. Присоединяйтесь!