Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Оптимізація збірки за розміром
Підґрунтя
Іноді бажано оптимізувати збірку за розміром, а не за швидкістю. Це означає, що не потрібно компілювати невикористовувані функції з двигуна, а також використовувати спеціальні прапори компілятора, щоб допомогти зменшити розмір збірки. Типові ситуації включають створення збірок для мобільних і веб-платформ.
Метою цього посібника є огляд різних методів створення меншого двійкового файлу. Перш ніж продовжити, рекомендуємо прочитати попередні посібники зі збирання Godot для кожної платформи.
Наведені нижче параметри перераховані від найважливіших (найбільша економія розміру) до найменш важливих (найменша економія розміру).
Видалення двійкових файлів
Економія місця: Дуже висока
Складність: Легко
Виконується в офіційних збірках: Так
Якщо ви створюєте двійкові файли Windows (MinGW), Linux або macOS із вихідного коду, не забудьте видалити символи налагодження з двійкових файлів, встановивши пакет strip
зі свого дистрибутива, а потім запустіть:
strip path/to/godot.binary
У Windows strip.exe
включено до більшості налаштувань MinGW toolchain.
Це зменшить розмір скомпільованих двійкових файлів у 5–10 разів. Недоліком є те, що відстеження збоїв більше не надаватиме точну інформацію (корисно для усунення причин збою). Профайлери C++ також більше не зможуть відображати назви функцій (це не впливає на вбудований профайлер GDScript).
Примітка
Наведена вище команда не працюватиме з двійковими файлами Windows, скомпільованими за допомогою MSVC, і такими платформами, як Android і Web. Натомість передайте debug_symbols=no
в командний рядок SCons під час компіляції.
Компіляція з оптимізацією часу посилання
Економія місця: Висока
Складність: Легко
Виконується в офіційних збірках: Так
Увімкнення оптимізації часу підключення створює більш ефективні двійкові файли як з точки зору продуктивності, так і розміру файлу. Він працює, усуваючи повторювані функції шаблону та невикористаний код. Зараз його можна використовувати з компіляторами GCC і MSVC:
scons target=template_release lto=full
З цим параметром зв’язування стає набагато повільнішим і споживає більше оперативної пам’яті, тому його слід використовувати лише для збірок випусків:
Під час компіляції гілки
master
вам потрібно мати принаймні 8 ГБ оперативної пам’яті для успішного зв’язування з увімкненим LTO.Під час компіляції гілки
3.x
вам потрібно мати принаймні 6 ГБ оперативної пам’яті для успішного зв’язування з увімкненим LTO.
Оптимізація за розміром замість швидкості
Економія місця: Висока
Складність: Легко
Виконується в офіційних збірках: Так, але лише для веб-версій
Godot 3.1 і вище дозволяє компілювати за допомогою оптимізації розміру (замість швидкості). Щоб увімкнути це, встановіть прапорець optimize
на size
:
scons target=template_release optimize=size
Деякі платформи, такі як WebAssembly, уже використовують цей режим за замовчуванням.
Вимкнення розширеного текстового сервера
Економія місця: Висока
Складність: Легко
Виконується в офіційних збірках: Ні
За замовчуванням Godot використовує розширений текстовий сервер із підтримкою таких функцій:
Набір справа наліво та складні сценарії, необхідні для написання таких мов, як арабська та іврит.
Шрифтові лігатури та функції OpenType (наприклад, малі великі літери, дроби та рискований нуль).
Godot надає резервний текстовий сервер, який не скомпільовано за замовчуванням. Цей текстовий сервер можна використовувати як легку альтернативу стандартному розширеному текстовому серверу:
scons target=template_release module_text_server_adv_enabled=no module_text_server_fb_enabled=yes
Якщо ви маєте намір підтримувати у своєму проекті лише латиницю, грецьку та кириличну мови, резервного текстового сервера має бути достатньо.
Цей резервний текстовий сервер також може обробляти великі обсяги тексту швидше, ніж розширений текстовий сервер. Завдяки цьому резервний текстовий сервер добре підходить для мобільних/веб-проектів.
Примітка
Не забувайте завжди передавати module_text_server_fb_enabled=yes
, коли використовуєте module_text_server_adv_enabled=no
. В іншому випадку скомпільований двійковий файл не міститиме жодного текстового сервера, що означає, що під час виконання проекту текст взагалі не відображатиметься.
Вимкнення 3D
Економія місця: Помірна
Складність: Легко
Виконується в офіційних збірках: Ні
Для 2D-ігор наявність повного 3D-движка зазвичай не має сенсу. Через це існує прапор збірки, щоб вимкнути його:
scons target=template_release disable_3d=yes
Інструменти мають бути вимкнені, щоб використовувати цей прапорець, оскільки редактор не призначений для роботи без підтримки 3D. Без цього двійковий розмір можна зменшити приблизно на 15%.
Примітка
Вимкнення підтримки 3D також вимикає всю навігацію. Це включає 2D-навігацію, оскільки вона використовує внутрішню 3D-навігаційну систему.
Вимкнення розширених об’єктів GUI
Економія місця: Помірна
Складність: Легко
Виконується в офіційних збірках: Ні
Більшість невеликих ігор не потребують складних графічних елементів керування, таких як Tree, ItemList, TextEdit або GraphEdit. Їх можна вимкнути за допомогою прапора збірки:
scons target=template_release disable_advanced_gui=yes
Це все, що буде відключено:
Вимикання небажаних модулів
Економія місця: Від дуже низького до помірного залежно від модулів
Складність: від середньої до важкої залежно від модулів
Виконується в офіційних збірках: Ні
Багато функцій Годо пропонуються як модулі. Ви можете переглянути список модулів за допомогою такої команди:
scons --help
З’явиться список модулів, які можна вимкнути, разом із усіма параметрами збірки. Якщо ви працюєте над простою двовимірною грою, ви можете вимкнути багато з них:
scons target=template_release module_basis_universal_enabled=no module_bmp_enabled=no module_camera_enabled=no module_csg_enabled=no module_dds_enabled=no module_enet_enabled=no module_gridmap_enabled=no module_hdr_enabled=no module_jsonrpc_enabled=no module_ktx_enabled=no module_mbedtls_enabled=no module_meshoptimizer_enabled=no module_minimp3_enabled=no module_mobile_vr_enabled=no module_msdfgen_enabled=no module_multiplayer_enabled=no module_noise_enabled=no module_navigation_enabled=no module_ogg_enabled=no module_openxr_enabled=no module_raycast_enabled=no module_regex_enabled=no module_squish_enabled=no module_svg_enabled=no module_tga_enabled=no module_theora_enabled=no module_tinyexr_enabled=no module_upnp_enabled=no module_vhacd_enabled=no module_vorbis_enabled=no module_webrtc_enabled=no module_websocket_enabled=no module_webxr_enabled=no module_zip_enabled=no
Якщо виявиться, що це не працює для вашого випадку використання, вам слід переглянути список модулів і дізнатися, які з них вам ще потрібні для вашої гри (наприклад, ви можете зберегти модулі, пов’язані з мережею, підтримку регулярних виразів, minimp3
/ ogg
/vorbis
для відтворення музики або theora
для відтворення відео).
Крім того, ви можете надати список вимкнених модулів, створивши custom.py
у корені вихідного коду з таким вмістом:
module_basis_universal_enabled = "no"
module_bmp_enabled = "no"
module_camera_enabled = "no"
module_csg_enabled = "no"
module_dds_enabled = "no"
module_enet_enabled = "no"
module_gridmap_enabled = "no"
module_hdr_enabled = "no"
module_jsonrpc_enabled = "no"
module_ktx_enabled = "no"
module_mbedtls_enabled = "no"
module_meshoptimizer_enabled = "no"
module_minimp3_enabled = "no"
module_mobile_vr_enabled = "no"
module_msdfgen_enabled= "no"
module_multiplayer_enabled = "no"
module_noise_enabled = "no"
module_navigation_enabled = "no"
module_ogg_enabled = "no"
module_openxr_enabled = "no"
module_raycast_enabled = "no"
module_regex_enabled = "no"
module_squish_enabled = "no"
module_svg_enabled = "no"
module_tga_enabled = "no"
module_theora_enabled = "no"
module_tinyexr_enabled = "no"
module_upnp_enabled = "no"
module_vhacd_enabled = "no"
module_vorbis_enabled = "no"
module_webrtc_enabled = "no"
module_websocket_enabled = "no"
module_webxr_enabled = "no"
module_zip_enabled = "no"
Дивись також
Оптимізація розповсюдження вашого проекту
Робочий стіл
Примітка
Цей розділ стосується лише розповсюдження файлів на настільній платформі, яка не виконує власне стиснення чи пакування. Таким чином, ця порада актуальна, коли ви розповсюджуєте ZIP-архіви на itch.io або GitHub Releases.
Такі платформи, як Steam, уже застосовують власну схему стиснення, тому вам не потрібно створювати ZIP-архів для розповсюдження файлів.
Крім того, ви можете оптимізувати розповсюдження самого проекту. Це можна зробити навіть без перекомпіляції шаблону експорту.
7-Zip можна використовувати для створення ZIP-архівів, які є більш ефективними, ніж звичайні, і водночас залишаються сумісними з усіма архівами ZIP (включаючи власний вбудований екстрактор Windows). Зменшення розміру ZIP у великому проекті може досягати десятків мегабайт порівняно зі звичайним компресором ZIP, хоча середня економія становить 1–5 МБ. Створення цього ZIP-архіву триватиме довше, ніж зазвичай, але розпаковуватиметься так само швидко, як і будь-який інший ZIP-архів.
При використанні 7-Zip GUI це робиться шляхом створення ZIP-архіву з режимом стиснення Ultra. Під час використання командного рядка це робиться за допомогою такої команди:
7z a -mx9 my_project.zip folder_containing_executable_and_pck
Інтернет
Увімкнення стиснення gzip або Brotli для всіх типів файлів із веб-експорту (особливо .wasm
і .pck
) може значно зменшити розмір завантаження, що призведе до швидшого часу завантаження, особливо при повільних з’єднаннях.
Створення попередньо стиснених файлів gzip або Brotli з високим рівнем стиснення може бути ще ефективнішим, якщо веб-сервер налаштовано на обслуговування цих файлів, коли вони існують. За підтримки Brotli слід віддавати перевагу перед gzip, оскільки він має більший потенціал для зменшення розміру файлу.
Інструкції див. Обслуговування файлів.