Power Apps
La fonction Concurrent() que personne n'utilise
Concurrent() lance plusieurs appels de données en parallèle au lieu de séquentiellement. Le OnStart de votre application pourrait se charger 3x plus vite.
Le problème
La plupart des Power Apps chargent les données séquentiellement dans App.OnStart. Chaque appel ClearCollect ou Set attend que le précédent se termine avant de démarrer. Si vous chargez des données depuis trois sources qui prennent chacune 1 seconde, votre application met 3 secondes à démarrer.
Mauvaise approche : Chargement séquentiel
// App.OnStart -- runs one after another
ClearCollect(colCustomers, Customers); // 1.2s
ClearCollect(colProducts, Products); // 0.8s
ClearCollect(colOrders, ActiveOrders); // 1.5s
Set(varUserProfile, Office365Users.MyProfile()); // 0.5s
// Total: ~4.0s
Chaque ligne bloque jusqu'à ce que les données soient retournées. L'utilisateur fixe un écran de chargement pendant 4 secondes.
Bonne approche : Chargement avec Concurrent()
// App.OnStart -- all four calls fire at once
Concurrent(
ClearCollect(colCustomers, Customers),
ClearCollect(colProducts, Products),
ClearCollect(colOrders, ActiveOrders),
Set(varUserProfile, Office365Users.MyProfile())
);
// Total: ~1.5s (limited by the slowest call)
Les quatre appels de données s'exécutent simultanément. Le temps de chargement total est égal à la durée de l'appel le plus lent, pas à la somme de tous les appels.
Règles
- Pas de dépendances entre les appels. Si
colOrdersa besoin d'une valeur decolCustomers, ils ne peuvent pas être dans le même blocConcurrent(). - Pas d'ordre garanti. Les appels peuvent se terminer dans n'importe quel ordre.
- Les erreurs sont indépendantes. Si un appel échoue, les autres se terminent quand même. Vérifiez les résultats individuellement après le bloc
Concurrent().
Pattern pratique
Divisez votre OnStart en groupes indépendants et dépendants :
// Step 1: Independent calls in parallel
Concurrent(
ClearCollect(colConfig, ConfigTable),
Set(varUser, Office365Users.MyProfile())
);
// Step 2: Dependent calls that need Step 1 results
ClearCollect(
colMyTasks,
Filter(Tasks, AssignedTo = varUser.Mail)
);
Point clé
Auditez votre App.OnStart. Regroupez les appels de données indépendants dans des blocs Concurrent() et gardez les appels dépendants en séquentiel. La plupart des applications voient une amélioration de 2 à 3x du temps de démarrage.