Дневник разработки: как держать 60fps на пятилетнем телефоне
У большинства наших игроков не флагманы. Рассказываем о бюджете производительности, которого мы держимся в каждом релизе, и о трёх вещах, которые его постоянно ломали.

Мы тестируем на среднем Android-устройстве 2020 года раньше, чем на чём-либо новее. Если игра не держит стабильный FPS там — она не выходит, независимо от того, как работает на новом железе.
Бюджет
- Холодный старт до интерактивного экрана — меньше секунды
- Стабильные 60fps в игре, ни один кадр не дольше 20 мс
- Размер установки, который скачивается по мобильной сети без раздумий
- Расход батареи близок к нулю, когда игра открыта, но не используется
Три вещи, которые постоянно всё ломали
Пересчёт вёрстки при каждом перетаскивании. Чтение позиции элемента во время перетаскивания заставляет браузер пересчитывать layout посреди кадра. Теперь мы читаем позиции один раз в начале перетаскивания и кэшируем их.
Тени на движущихся элементах. Мягкая тень на перетаскиваемой фигуре стоила нам больше, чем весь остальной кадр вместе взятый. Замена на заранее отрисованный спрайт решила проблему полностью.
Сборка мусора во время партии. Мы создавали новый массив каждый кадр для подсветки клеток. Переиспользование одного массива убрало периодические подтормаживания, о которых игроки писали как о «заикании каждые несколько секунд».
В этом нет ничего хитрого. Просто сначала измерить, а потом чинить именно то, на что указало измерение.

