Je cherche actuellement à optimiser le temps de compilation de mes projets. J'ai toujours su qu'il y avait quelque chose comme l'optimisation de module entier mais loin de le vérifier dans les paramètres de construction, je n'ai pas vraiment creusé plus profondément.Quelle est la différence entre SWIFT_WHOLE_MODULE_OPTIMIZATION défini par l'utilisateur et Swift Optimization Level?
Comme je le comprends:
OMM devrait se traduire par un code plus rapide exécuté mais peut augmenter légèrement le temps de compilation, en raison de la compilation des fichiers entiers du module comme un tout au lieu de compiler chaque fichier séparément en parallèle. https://swift.org/blog/whole-module-optimizations/
Il est recommandé de définir le niveau d'optimisation Swift:
- pour Debug configuration définie à
None [-Onone]
- pour de presse configuration définie à
Fast, Whole Module Optimization [-O -whole-module-optimization]
comme il est pas important d'avoir la meilleure compilation le temps pour les versions occasionnelles augmente
Mais lors de la recherche quelques conseils pour diminuer la compilation pour la configuration de débogage, j'ai trouvé défini par l'utilisateur paramètre:
SWIFT_WHOLE_MODULE_OPTIMIZATION = YES
(pour le débogage)SWIFT_WHOLE_MODULE_OPTIMIZATION = NO
(pour la libération)
Ce paramètre a diminué mon temps de compilation DEBUG presque dans la moitié, mais cela me rend également confus. Je n'ai pas trouvé de documentation sur ce paramètre et d'où il venait. (Ma compréhension du compilateur rapide est très basique, et je ne fonctionnait pas avec les paramètres définis par l'utilisateur avant)
Tout le monde recommande juste pour diminuer le temps de compilation sans aucune explication ni pourquoi, ni explication qui ne serait pas en un conflit avec Swift Optimization Level mentionné ci-dessus. Si je comprends bien, ce paramètre défini sur YES devrait augmenter le temps de compilation car il semble activer wmo. Par conséquent, je pense que ma compréhension de WMO, ou ce paramètre particulier est erroné.
Mes questions sont les suivantes:
Quelle est la différence entre
Swift Optimization Level
paramètres etSWIFT_WHOLE_MODULE_OPTIMIZATION
?Pourquoi
SWIFT_WHOLE_MODULE_OPTIMIZATION
diminue le temps de compilation?
Merci!
Merci pour la réponse! Je ne suis pas sûr de l'avoir, alors s'il vous plait, supportez-moi. Si je comprends votre réponse: En général, wmo diminue le temps de compilation, mais: - En l'activant pour chaque fichier avec 'Swift Optimization Level' il compile chaque fichier avec chaque build et donc il est considéré comme une mauvaise option pour développement, mais ça va pour la libération. - Lorsque vous l'activez avec 'SWIFT_WHOLE_MODULE_OPTIMIZATION' et que vous le désactivez pour chaque fichier, il ne compile que les fichiers modifiés et est donc plus rapide. Est-ce correct? – CatDamon
'-wmo' est une option * module *, cela signifie que lorsque vous l'activez, donne au compilateur une vision globale sur tous les fichiers et compile le projet entier en un seul. Cela réduit le temps car le compilateur sait ce qui a changé sur chaque fichier et comment cela peut affecter d'autres fichiers et optimise les décisions pour compiler tout ce dont il a besoin. Le * Swift Optimization Level * est un drapeau qui indique comment chaque fichier sera traité, indépendamment de l'option '-wmo' activée ou non. ** TL; DR **, oui, vous avez raison – jvrmed