Как уменьшать размер сборки без потери нужных функций
Измерения, профиль возможностей, модули, рендереры и проверка готовой игры.
Уменьшайте размер экспортного шаблона относительно работающей базовой сборки. Сначала отделите размер исполняемого файла, управляемого runtime, PCK/ассетов и скачиваемого архива: оптимизация одного не означает уменьшение остальных или расхода памяти.
Измеримый цикл
- Зафиксируйте одинаковые платформу, архитектуру, проект и release-настройки. Сохраните исходный размер каждого артефакта.
- Меняйте один параметр или один профиль. Запишите время сборки и линковки.
- Экспортируйте игру с новым шаблоном. Проверьте запуск, все уровни, подгружаемые ресурсы, UI, локализации, сохранения и используемые платформенные функции.
- Сравните размеры и поведение. При отказе верните последнюю работающую конфигурацию, а не отключайте следующую случайную подсистему.
Проценты экономии зависят от проекта и toolchain. Значения вроде «минус 15% от отключения 3D» не являются обещанием для вашей сборки.
Оптимизация кода и символы
Параметры optimize=size/size_extra выбирают ориентацию компилятора на размер. Проверьте поддержку и фактический результат для своего компилятора; меньше бинарник не гарантирует выше FPS или быстрее запуск.
LTO может изменить размер и время линковки, но lto=auto выбирается платформой. production=yes не означает, что LTO обязательно включено. Отладочные символы можно хранить отдельно, если toolchain это поддерживает: они нужны для диагностики сбоев. Уменьшение поставляемого файла не оправдывает потерю возможности разобрать crash своей версии.
Профиль возможностей
build_profile задаёт JSON-профиль сборки. disabled_classes перечисляет отключаемые классы, disabled_build_options — изменения параметров сборки. Это отличается от Python-файла profile=... с обычными опциями.
Автоматическое обнаружение используемых классов помогает начать профиль, но не доказывает полноту. Проверьте динамическую загрузку, имена классов в строках, плагины, внешние пакеты и контент, который отсутствовал при анализе. Отключение класса может убрать нужные производные возможности; профиль проверяют на целой экспортированной игре.
Что отключать с учётом проекта
| Группа | Что проверить до отключения |
|---|---|
| 3D | Уровни и ресурсы 3D, физику, навигацию и XR. disable_3d также включает соответствующие отключения |
| 2D | Entity2D, физику и навигацию 2D; это не равнозначно удалению любого интерфейса |
| Advanced GUI | Реально используемые сложные Control, диалоги, меню, форматированный текст и редакторские инструменты |
| Физика/навигация | Нужные серверы и используемый backend; наличие визуального 3D не означает использование всех физических backend |
| Форматы и модули | Импорт, runtime-декодирование, сеть, архивы, аудио, видео, расширения и их зависимости |
| Рендереры | Метод рендеринга проекта, fallback и возможности целевых устройств |
| TextServer | Шрифты, формирование текста, переносы, направление и все языки интерфейса |
disable_2d, disable_3d, disable_advanced_gui и перечисленные отдельные отключения физики/навигации предназначены для шаблонов: текущий SConstruct отклоняет их для target=editor. Не используйте урезанный игровой шаблон как замену редактору.
Отключение text_server_adv не делает text_server_fb автоматически включённым: fallback-модуль выключен по умолчанию. Сохраните подходящий TextServer и проверьте нужные языки; fallback не следует считать полной заменой возможностей advanced.
Для проекта C# сохраняйте согласованные модуль mono, управляемый SDK и runtime. Измеряйте их вклад отдельно от native EXE. Массовое modules_enabled_by_default=no может удалить нужный формат или интеграцию даже при успешной компиляции.
Распространение
Сжатие архива или HTTP-ответа уменьшает передачу данных, но не обязательно установленный размер, память или время декодирования. Для Web важна корректная конфигурация сервера и MIME/Content-Encoding; один переименованный сжатый файл не заменяет проверку браузера.
Эта статья сверена по параметрам и зависимостям текущего Source. Урезанный движок и игра здесь не собирались; измеренной экономии размера и проверки всех проектов нет. Практические критерии выше нужны до принятия своей конфигурации.
Далее: SCons и профили, экспорт.