SCours SwiftUI
Fiche 15.03

Fiche 15.03 — Instruments Time Profiler

Objectif

Comprendre à quoi sert Instruments Time Profiler et savoir l’utiliser pour repérer une lenteur ou un freeze UI.

Tu n’as pas besoin d’être expert performance, mais tu dois savoir diagnostiquer un problème simple.

1. Pourquoi utiliser Instruments ?

Quand une app rame, print ne suffit pas toujours.

Time Profiler montre quelles fonctions consomment le plus de temps CPU.

Cas typiques :

  • écran qui freeze ;
  • scroll saccadé ;
  • traitement lourd dans le body SwiftUI ;
  • parsing JSON trop gros ;
  • image redimensionnée sur le main thread ;
  • boucle coûteuse.

2. Lancer Time Profiler

Dans Xcode :

Texte
Product → Profile → Instruments → Time Profiler → Record

Ensuite tu reproduis le problème dans l’app.

3. Ce qu’il faut regarder

Dans Time Profiler, cherche :

  • les fonctions qui prennent beaucoup de temps ;
  • les appels répétés trop souvent ;
  • les traitements sur le main thread ;
  • les fonctions de ton projet, pas seulement celles d’Apple.

La bonne question :

Texte
Quelle fonction de mon code est appelée trop longtemps ou trop souvent ?

4. Exemple de mauvais code SwiftUI

Swift
struct ProductsView: View { let products: [Product] var body: some View { List(filteredProducts()) { product in Text(product.name) } } private func filteredProducts() -> [Product] { products.filter { $0.name.lowercased().contains("a") } } }

Si la liste est grande, cette fonction peut être rappelée souvent.

Version plus propre :

Swift
struct ProductsView: View { let filteredProducts: [Product] var body: some View { List(filteredProducts) { product in Text(product.name) } } }

Le calcul peut être fait dans un ViewModel.

5. Main thread

L’interface doit rester fluide. Les traitements lourds ne doivent pas bloquer le main thread.

Mauvais exemple :

Swift
Button("Traiter") { let result = heavyCalculation() // bloque potentiellement l’UI self.result = result }

Meilleure approche :

Swift
Button("Traiter") { Task { let result = await heavyCalculationAsync() self.result = result } }

6. Ce qu’on peut dire en entretien

J’utilise Instruments Time Profiler pour comprendre les lenteurs, repérer les fonctions coûteuses, vérifier si le main thread est bloqué et déplacer les traitements lourds hors de la vue ou dans une tâche async.

Résumé

  • Time Profiler sert à trouver les fonctions coûteuses.
  • Il est utile pour les freezes, scrolls saccadés et lenteurs.
  • Évite les traitements lourds dans body.
  • Le main thread doit rester disponible pour l’UI.