Как уложить сборку игры в 10 МБ
· 3 мин чтения
Большинство курируемых порталов веб-игр ограничивают загрузку где-то между 5 и 20 МБ, а некоторые отклоняют всё, что выше порога, не глядя. Причина не в хранилище. Портал отдаёт игру на телефон по мобильному интернету, а медленная первая загрузка — это игрок, который ушёл ещё до старта. Ограничение по размеру — это косвенная проверка того, «откроется ли оно вообще».
Наши девять собственных игр весят от 63 КБ до 2,49 МБ. Вот где на самом деле сидит вес — в порядке важности.
1. Несжатая графика
Почти всегда вся проблема именно здесь. Папка PNG, выгруженных прямо из программы для рисования, — самая крупная статья в сборке игры, и с отрывом на порядок.
Когда наш скрипт синхронизации перекодирует исходную графику в WebP, папка с артом одной из игр усохла примерно с 25 МБ PNG до 1,4 МБ. Пиксели те же, и визуально разницы не видно. WebP сейчас поддерживается везде, где это важно, а для игровой графики — плоские цвета, жёсткие края, мало градиентов — потери почти нулевые.
Если делать что-то одно — делайте это.
2. Движок, которым вы пользуетесь на десятую часть
Универсальный движок тащит с собой физический солвер, систему частиц, рантайм spine-анимации, загрузчик тайлмапов и ещё десяток подсистем — независимо от того, трогает их ваша игра или нет. Tree-shaking помогает меньше, чем хотелось бы, потому что многое внутри связано между собой.
Наши три игры на Phaser весят 1,33, 2,09 и 2,49 МБ. Шесть игр без движка — от 63 КБ до 390 КБ. Почти вся эта разница — движок. Это может быть оправданный размен (см. пост о разработке без движка), но платить его нужно осознанно.
3. Звук
Несжатые WAV-петли тяжёлые. Переводите музыку в формат с низким битрейтом и держите звуковые эффекты короткими. Минутной эмбиент-петле нечего весить больше, чем вся остальная игра.
4. Всё остальное
Код почти никогда не бывает проблемой. Логика целой игры после минификации занимает десятки килобайт. Если вы минифицируете JavaScript, чтобы влезть в лимит, вы оптимизируете не тот файл.
Текстурные атласы и единственный настоящий размен
Если упаковать сорок мелких картинок в один лист, сорок HTTP-запросов превращаются в один, а движок загружает в GPU одну текстуру вместо десятков. Цена — шаг сборки и немного инструментов. Если спрайтов больше горстки, оно того стоит; если меньше — это лишняя церемония.
Чего не делать
Не вырезайте фичи ради цифры. Ограничение по размеру — это ограничение на доставку, а не на объём игры. Если игра весит 12 МБ, а лимит — 10, ответ лежит в пунктах 1–3 выше, и это никогда не «выкинуть третий мир». Игроки не просили игру поменьше; портал попросил игру побыстрее, а это разные задачи с разными решениями.
Сначала измерьте
Соберите игру, откройте выходную папку, отсортируйте по размеру. Виновник всегда очевиден, стоит только посмотреть, и почти никогда не там, где вы думали. Именно поэтому мы публикуем размеры каждой игры на странице лицензирования: цифра, которую можно проверить, лучше цифры, которую кто-то вбил руками.
