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...
Ottimizzare una compilazione per dimensioni
Razionale
A volte, è preferibile ottimizzare una build in base alle dimensioni piuttosto che alla velocità. Ciò significa non compilare funzioni inutilizzate dal motore, nonché utilizzare flag di compilazione specifici per contribuire a ridurre le dimensioni della build. Situazioni comuni includono la creazione di build per piattaforme mobile e web.
Questo tutorial si propone di fornire una panoramica sui diversi metodi per creare un eseguibile più piccolo. Prima di continuare, si consiglia di leggere i tutorial precedenti sulla compilazione di Godot per ciascuna piattaforma.
Le opzioni sottostanti sono elencate dalla più importante (maggiore risparmio sulle dimensioni) alla meno importante (minore risparmio sulle dimensioni).
Rimozione dei file binari
Risparmio di spazio: Molto alto
Difficoltà: Facile
Effettuato in compilazioni ufficiali: Sì
Se si compilano eseguibili per Windows (MinGW), Linux o macOS da sorgente, non dimenticare di rimuovere i simboli di debug dagli eseguibili installando il pacchetto strip dalla propria distribuzione, quindi eseguendo:
strip path/to/godot.binary
Su Windows, strip.exe è incluso nella maggior parte delle configurazioni della toolchain MinGW.
Questo ridurrà le dimensioni degli eseguibili compilati di un fattore compreso tra 5 e 10. Lo svantaggio è che i backtrace dei crash non forniranno più informazioni accurate (le quali sono utili per risolvere problemi riguardo la causa di un crash). I profiler di C++ non saranno nemmeno più in grado di visualizzare i nomi delle funzioni (ciò non influisce sul profiler integrato di GDScript).
Nota
Il comando sopra riportato non funziona sugli eseguibili di Windows compilati con MSVC e piattaforme come Android e Web. In alternativa, passare debug_symbols=no sulla riga di comando di SCons durante la compilazione.
Compiling with link-time optimization
Risparmio di spazio: Alto
Difficoltà: Facile
Effettuato in compilazioni ufficiali: Sì
Abilitare l'ottimizzazione link-time produce eseguibili più efficienti, sia in termini di prestazioni sia di dimensioni dei file. Ciò funziona eliminando le funzioni template duplicate e il codice inutilizzato. Attualmente si può utilizzare con i compilatori GCC e MSVC:
scons target=template_release lto=full
La fase di collegamento diventa molto più lenta e richiede più RAM con questa opzione, quindi dovrebbe essere utilizzato solo per le build di rilascio. È necessario disporre di almeno 8 GB di RAM per un collegamento corretto con LTO abilitato. Poiché il sistema operativo e i programmi occuperanno una parte della RAM, in pratica, sono necessari 12 GB di RAM installati nel sistema (preferibilmente 16 GB) per compilare Godot con LTO abilitato.
Ottimizzare per dimensione anziché per velocità
Risparmio di spazio: Alto
Difficoltà: Facile
Effettuato in compilazioni ufficiali: Sì, ma solo per le compilazioni web
È possibile compilare Godot utilizzando un'ottimizzazione di dimensione (anziché di velocità). Per abilitarla, impostare il flag optimize su size:
scons target=template_release optimize=size
Alcune piattaforme, come WebAssembly, utilizzano già questa modalità come predefinito.
Godot 4.5 ha introdotto l'opzione size_extra, che può ridurre ulteriormente le dimensioni.
scons target=template_release optimize=size_extra
Rilevare le funzionalità utilizzate dal progetto attuale e disattivare le funzionalità non utilizzate
Risparmio di spazio: Da moderato a alto a seconda del progetto
Difficoltà: Da facile a media a seconda del progetto
Effettuato in compilazioni ufficiali: No
Godot include uno strumento Utilizzare l'editor di configurazione di compilazione del motore in grado di rilevare le funzionalità utilizzate nel progetto attuale e creare un profilo di build. Una volta salvato, questo profilo di build può essere passato a SCons al momento della compilazione dei modelli di esportazione personalizzati:
scons target=template_release build_profile=/path/to/profile.gdbuild
Si noti che per alcuni progetti, il rilevamento delle funzionalità potrebbe essere troppo aggressivo e disabilitare funzionalità effettivamente necessarie in fase di esecuzione. Ciò può accadere se alcune funzionalità sono utilizzate in modo tale che il loro utilizzo non si possa rilevare staticamente (ad esempio, uno script creato proceduralmente ed eseguito in fase di esecuzione).
È possibile disattivare funzionalità più specifiche seguendo le sezioni seguenti, ma è bene ricordare che molte di esse sono rilevate automaticamente dal rilevatore di configurazione della compilazione del motore.
Disabilitare il server di testo avanzato
Risparmio di spazio: Alto
Difficoltà: Facile
Effettuato in compilazioni ufficiali: No
Come predefinito, Godot utilizza un server di testo avanzato con supporto per le seguenti funzionalità:
Right-to-left typesetting and complex scripts, required to write languages such as Arabic and Hebrew.
Font ligatures and OpenType features (such as small capitals, fractions and slashed zero).
Godot provides a fallback text server that isn't compiled by default. This text server can be used as a lightweight alternative to the default advanced text server:
scons target=template_release module_text_server_adv_enabled=no module_text_server_fb_enabled=yes
If you only intend on supporting Latin, Greek and Cyrillic-based languages in your project, the fallback text server should suffice.
This fallback text server can also process large amounts of text more quickly than the advanced text server. This makes the fallback text server a good fit for mobile/web projects.
Nota
Ricordare di passare sempre module_text_server_fb_enabled=yes quando si usa module_text_server_adv_enabled=no. Altrimenti, il binario compilato non conterrà alcun server di testo, il che significa che non verrà visualizzato alcun testo quando il progetto viene eseguito.
Disabilitare il 3D
Risparmio di spazio: Moderato
Difficoltà: Facile
Effettuato in compilazioni ufficiali: No
Per i giochi 2D, avere a disposizione l'intero motore 3D di solito non ha senso. Per questa ragione, esiste un flag di compilazione per disabilitarlo:
scons target=template_release disable_3d=yes
Gli strumenti (Tools) si devono disabilitare per utilizzare questo flag, poiché l'editor non è progettato per funzionare senza il supporto 3D. Senza di esso, la dimensione dell'eseguibile si può ridurre di circa il 15%.
Disabilitare gli oggetti della GUI avanzati
Risparmio di spazio: Moderato
Difficoltà: Facile
Effettuato in compilazioni ufficiali: No
La maggior parte dei piccoli giochi non richiedono controlli complessi per l'interfaccia grafica, tra i quali Tree, ItemList, TextEdit o GraphEdit. Si possono disabilitare utilizzando un flag di compilazione:
scons target=template_release disable_advanced_gui=yes
Questo è tutto ciò che sarà disabilitato:
Disabilitare i motori di fisica
Risparmio di spazio: Basso a moderato
Difficoltà: Facile
Effettuato in compilazioni ufficiali: No
Se il proprio progetto 3D utilizza Jolt Physics, è possibile disabilitare GodotPhysics3D in fase di compilazione, poiché non sarà mai utilizzato:
scons target=template_release module_godot_physics_3d_enabled=no
Al contrario, se il proprio progetto 3D utilizza GodotPhysics3D, è possibile disabilitare Jolt Physics in fase di compilazione:
scons target=template_release module_jolt_enabled=no
Se il proprio progetto utilizza il rendering 3D ma non la sua fisica (o il rendering 2D ma non la sua fisica), è possibile anche disabilitare completamente la fisica 2D o 3D. La maggior parte dei progetti 3D può trarne vantaggio, poiché non utilizzano la fisica 2D:
scons target=template_release disable_physics_2d=yes
scons target=template_release disable_physics_3d=yes
Disabilitare i moduli indesiderati
Risparmio di spazio: Da molto basso a moderato a seconda dei moduli
Difficoltà: Da media a difficile a seconda dei moduli
Effettuato in compilazioni ufficiali: No
Molte funzioni di Godot sono offerte come moduli. È possibile visualizzare un elenco dei moduli con il seguente comando:
scons --help
Apparirà l'elenco dei moduli che si possono disabilitare, insieme a tutte le opzioni di compilazione. Se si sta lavorando a un semplice gioco in 2D, molti di questi si potrebbero disabilitare:
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
Se questa soluzione non dovesse funzionare per il proprio caso d'uso, si consiglia di rivedere l'elenco dei moduli e vedere quali servono ancora per il proprio gioco (ad esempio, si potrebbe voler mantenere i moduli relativi alla rete, il supporto per le espressioni regolari, mp3/ogg/vorbis per riprodurre musica o theora per riprodurre video).
In alternativa, è possibile fornire un elenco di moduli disabilitati creando custom.py alla radice del codice sorgente, con un contenuto simile al seguente:
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"
Vedi anche
Ottimizzare la distribuzione del proprio progetto
Desktop
Nota
Questa sezione è rilevante solo quando si distribuiscono file su una piattaforma desktop che non effettua una compressione o un impacchettamento da sola. Pertanto, questo consiglio è pertinente quando si distribuiscono archivi ZIP su itch.io o su GitHub Releases.
Piattaforme come Steam applicano già il proprio schema di compressione, quindi non è necessario affatto creare un archivio ZIP per distribuire i file.
As an aside, you can look into optimizing the distribution of your project itself. This can be done even without recompiling the export template.
7-Zip si può utilizzare per creare archivi ZIP più efficienti del solito, pur rimanendo compatibile con qualsiasi estrattore ZIP (incluso quello integrato di Windows). La riduzione della dimensione di un file ZIP in un grande progetto può raggiungere decine di megabyte rispetto a un tipico compressore ZIP, anche se il risparmio nella media sia tra 1 e 5 MB. La creazione di questo archivio ZIP richiederà più tempo del solito, ma l'estrazione sarà veloce quanto qualsiasi altro archivio ZIP.
Attraverso l'interfaccia utente grafica di 7-Zip, ciò si effettua creando un archivio ZIP con la modalità di compressione Ultra. Attraverso la riga di comando, ciò si effettua con il seguente comando:
7z a -mx9 my_project.zip folder_containing_executable_and_pck
Web
Abilitando la compressione gzip o Brotli per tutti i tipi di file dall'esportazione web (in particolare .wasm e .pck) è possibile ridurre notevolmente le dimensioni del download, con conseguenti tempi di caricamento più rapidi, in particolare su connessioni lente.
Creare file gzip o Brotli precompressi con un alto livello di compressione può essere ancora più efficiente, purché il server web sia configurato per gestire tali file quando esistono. Se supportato, Brotli dovrebbe essere preferito a gzip in quanto ha maggiore potenziale di ridurre le dimensioni dei file.
Consultare Distribuire i file per istruzioni.