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
З цією опцією лінкування стає набагато повільнішим і потребує більше оперативної пам'яті, тому її слід використовувати лише для релізних збірок. Для успішного лінкування з увімкненим LTO потрібно мати щонайменше 8 ГБ оперативної пам'яті. Оскільки операційна система та програми займатимуть певну частину оперативної пам'яті, на практиці вам потрібно мати 12 ГБ оперативної пам'яті, встановленої у вашій системі (бажано 16 ГБ), щоб скомпілювати Godot з увімкненим LTO.
Оптимізація за розміром замість швидкості
Економія місця: Висока
Складність: Легко
Виконується в офіційних збірках: Так, але лише для веб-версій
Можна скомпілювати Godot, використовуючи оптимізацію розміру (замість швидкості). Щоб увімкнути це, встановіть прапорець optimize на size:
scons target=template_release optimize=size
Деякі платформи, такі як WebAssembly, уже використовують цей режим за замовчуванням.
У Godot 4.5 було запроваджено опцію size_extra, яка може ще більше зменшити розмір.
scons target=template_release optimize=size_extra
Виявлення використаних функцій з поточного проєкту та вимкнення невикористаних функцій
Економія місця: Від середньої до високої залежно від проекту
Складність: Від легкого до середнього рівня залежно від проекту
Виконується в офіційних збірках: Ні
Godot має інструмент Використання редактора конфігурації компіляції двигуна, який може виявляти функції, що використовуються в поточному проекті, і створювати профіль збірки. Після збереження цей профіль збірки можна передати SCons під час компіляції власних шаблонів експорту:
scons target=template_release build_profile=/path/to/profile.gdbuild
Зверніть увагу, що для деяких проектів виявлення функцій може бути занадто агресивним і вимкнути функції, які насправді потрібні під час виконання. Це може статися, якщо певні функції використовуються таким чином, що їх використання не може бути виявлено статично (наприклад, скрипт, який створюється процедурно і виконується під час виконання).
Більш специфічні функції можна вимкнути, виконавши наведені нижче інструкції, але пам’ятайте, що багато з них автоматично виявляються детектором конфігурації компіляції двигуна.
Вимкнення розширеного текстового сервера
Економія місця: Висока
Складність: Легко
Виконується в офіційних збірках: Ні
За замовчуванням 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%.
Вимкнення розширених об’єктів GUI
Економія місця: Помірна
Складність: Легко
Виконується в офіційних збірках: Ні
Більшість невеликих ігор не потребують складних графічних елементів керування, таких як Tree, ItemList, TextEdit або GraphEdit. Їх можна вимкнути за допомогою прапора збірки:
scons target=template_release disable_advanced_gui=yes
Це все, що буде відключено:
class_OptionButton
class_PopupMenu (зробить усі спливаючі меню недоступними в коді для класів, які їх використовують, наприклад LineEdit, навіть якщо ці класи все ще доступні)
class_RichTextEffect
class_RichTextLabel
class_SpinBox
class_SplitContainer
class_SubViewportContainer
class_SyntaxHighlighter
class_TextEdit
class_Tree
class_TreeItem
class_VSplitContainer
Вимкнення фізичних двигунів
Економія місця: Від низької до помірної
Складність: Легко
Виконується в офіційних збірках: Ні
Якщо ваш 3D-проект використовує Jolt Physics, ви можете вимкнути GodotPhysics3D під час компіляції, оскільки він ніколи не використовуватиметься:
scons target=template_release module_godot_physics_3d_enabled=no
І навпаки, якщо ваш 3D-проект використовує GodotPhysics3D, ви можете вимкнути Jolt Physics під час компіляції:
scons target=template_release module_jolt_enabled=no
Якщо ваш проект використовує 3D-рендеринг, але не фізику (або 2D-рендеринг, але не фізику), ви також можете повністю вимкнути 2D або 3D-фізику. Більшість 3D-проектів можуть скористатися цим, оскільки вони не використовують 2D-фізику:
scons target=template_release disable_physics_2d=yes
scons target=template_release disable_physics_3d=yes
Вимикання небажаних модулів
Економія місця: Від дуже низького до помірного залежно від модулів
Складність: від середньої до важкої залежно від модулів
Виконується в офіційних збірках: Ні
Багато функцій Godot пропонуються як модулі. Ви можете переглянути список модулів за допомогою такої команди:
scons --help
З’явиться список модулів, які можна вимкнути, разом із усіма параметрами збірки. Якщо ви працюєте над простою двовимірною грою, ви можете вимкнути багато з них:
scons target=template_release module_astcenc_enabled=no module_basis_universal_enabled=no module_bcdec_enabled=no module_bmp_enabled=no module_camera_enabled=no module_csg_enabled=no module_dds_enabled=no module_enet_enabled=no module_etcpak_enabled=no module_fbx_enabled=no module_gltf_enabled=no module_gridmap_enabled=no module_hdr_enabled=no module_interactive_music_enabled=no module_jsonrpc_enabled=no module_ktx_enabled=no module_mbedtls_enabled=no module_meshoptimizer_enabled=no module_mp3_enabled=no module_mobile_vr_enabled=no module_msdfgen_enabled=no module_multiplayer_enabled=no module_noise_enabled=no module_navigation_2d_enabled=no module_navigation_3d_enabled=no module_ogg_enabled=no module_openxr_enabled=no module_raycast_enabled=no module_regex_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
Якщо це виявиться непридатним для вашого випадку використання, вам слід переглянути список модулів і подивитися, які з них вам дійсно все ще потрібні для вашої гри (наприклад, ви можете зберегти модулі, пов'язані з мережею, підтримку регулярних виразів, mp3/ogg/vorbis для відтворення музики або theora для відтворення відео).
Крім того, ви можете надати список вимкнених модулів, створивши custom.py у корені вихідного коду з таким вмістом:
module_astcenc_enabled = "no"
module_basis_universal_enabled = "no"
module_bcdec_enabled = "no"
module_bmp_enabled = "no"
module_camera_enabled = "no"
module_csg_enabled = "no"
module_dds_enabled = "no"
module_enet_enabled = "no"
module_etcpak_enabled = "no"
module_fbx_enabled = "no"
module_gltf_enabled = "no"
module_gridmap_enabled = "no"
module_hdr_enabled = "no"
module_interactive_music_enabled = "no"
module_jsonrpc_enabled = "no"
module_ktx_enabled = "no"
module_mbedtls_enabled = "no"
module_meshoptimizer_enabled = "no"
module_mp3_enabled = "no"
module_mobile_vr_enabled = "no"
module_msdfgen_enabled = "no"
module_multiplayer_enabled = "no"
module_noise_enabled = "no"
module_navigation_2d_enabled = "no"
module_navigation_3d_enabled = "no"
module_ogg_enabled = "no"
module_openxr_enabled = "no"
module_raycast_enabled = "no"
module_regex_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, оскільки він має більший потенціал для зменшення розміру файлу.
Інструкції див. Обслуговування файлів.