Code optimisation – Filtre et délégation

  • Code optimisation – Filtre et délégation

    Posté par Shadoks_ sur 25 mars 2025 à 14h35

    Bonjour,

    Je cherche à optimiser un bout de code de mon application qui n’est pas optimale.

    Ci dessous, le code que je cherche à optimiser. Je cherche à récupérer les accès de l’utilisateur dans un premier temps (les ID des chantiers sur lesquels il est affilié). Puis dans un second temps, je filtre la table des chantiers par les ID récupéré lors de la première phase.

    Mon soucis est le suivant, la requête n’est pas délégable. Dans un sens ce n’est pas trés grave car je sais perinemment qu’il n’y aura jamais plus de 2000 lignes dans la table qui ne supporte pas la délégation. D’un autre côte, je me creuse quand même la tête pour avoir l’application la plus perfomante et agréable possible.

    Avez vous des idées d’optimisation?

    <pre class=”language-plaintext”> ClearCollect(//Récupérer les accès spécifiques à l'identité de l'utilisateur connecté
    collAcces;
    Filter(
    listeAcces;
    Utilisateur.Email = myidentity.Email
    )
    );;
    ClearCollect(//Récupérer les chantiers accessibles pour l'utilisateur connecté
    collChantier;
    Filter(
    listeChantier;
    ID in ShowColumns(
    collAcces;
    IDChantier
    )
    )
    )

    Shadoks_ a répondu Il y a 6 jours, 16 heures 2 Membres · 2 Réponses
  • 2 Réponses
  • R3dKap

    Membre
    25 mars 2025 à 23h19

    Salut @Shadoks_,

    Cela est dû à ton modèle de données où tu as plusieurs lignes pour un même utilisateur dans listeAcces afin de spécifier tous les chantiers auxquels il a accès. Du coup, t’es forcément obligé de faire un premier filtre pour récupéer la liste des chantiers auxquels il a accès, puis ensuite de filtrer les chantiers concernés dans listeChantier.

    Une autre approche pourrait consister à n’avoir qu’une seule ligne par utilisateur dans listeAcces avec une colonne lookup multi des chantiers auxquels il a accès. A ce moment-là, au lieu de faire 2 Filter() comme précédemment, tu fais un premier LookUp() (plus rapide qu’un Filter) pour trouver l’utilisateur dans listeAcces, puis tu fais ton Filter() sur listeChantiers avec l’opérateur IN sur la liste des chantiers de la colonne lookup multi.

    Tu me suis ?

    Après, si tu veux vraiment optimiser les perfs de ton app et que tu es certain qu’aucune de tes listes ne dépasse les 2000, tu charges tout en collection et tu ne bosses qu’avec des collections : y’aura un peu de temps de chargement au départ mais après ce sera ultra rapide… 🙂

  • Shadoks_

    Membre
    26 mars 2025 à 9h18

    Salut Emmanuel !
    Merci pour tes réponses 🙂
    Bon finalement, il n’y a pas grand chose à optimiser car je joue déja beaucoup avec le cache une fois que j’ai chargé toutes mes données.

    Je vais rajouter un petit composant de chargement au début de l’application pour que ce soit plus user friendly et ça devrait le faire 🙂

Connectez-vous pour répondre.