Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Chaque développeur souhaite que son programme s’exécute plus rapidement. Dans cet article, nous allons vous montrer comment ajouter une ligne de code permettant à votre application basée sur MSAL Python d’obtenir un jeton environ 1,5 à 2 fois plus rapidement !
Préparation
Tout d’abord, nous allons choisir un exemple de script existant pour illustrer cette expérience. Nous choisissons l’exemple de mot de passe de nom d’utilisateur, car il ne nécessiterait aucune interaction utilisateur, afin que notre mesure de temps ne soit pas affectée par l’interaction lente humaine.
Configurez une config.json pour votre exemple par instruction.
Pour mesurer le temps d’exécution, vous devrez ajouter cet extrait de code facultatif tout au début de votre exemple :
import time; t = time.time()puis vous ajoutez cette ligne à la fin de votre exemple :
print("It took", time.time() - t, "second(s)")Dans l’idéal, il est préférable de mettre en commentaire ces lignes correspondant à l’appel réel à l’API Microsoft Graph, car cet appel ne fait pas partie de l’acquisition de jetons. Enfin, vous pouvez également supprimer les marques de commentaire de ces deux lignes pour permettre la journalisation pour vous de voir ce qui se passe sous le capot.
Avant
Exécutez-le plusieurs fois. Vous aurez l’impression d’afficher une sortie similaire à ceci :
$ python username_password_sample.py config.json
It took 0.9160797595977783 second(s)
$ python username_password_sample.py config.json
It took 0.7800290584564209 second(s)
$ python username_password_sample.py config.json
It took 0.8385567665100098 second(s)
Il a donc fallu environ 0,8 secondes+ pour acquérir un jeton.
Magie réelle
Maintenant, nous allons avoir un peu de plaisir.
Installez un module tiers « requests-cache » en exécutant ceci une fois : pip install requests-cache, puis ajoutez cette ligne au début de votre exemple :
import requests_cache; requests_cache.install_cache()
Après
Exécutez-le plusieurs fois. Vous aurez l’impression d’afficher une sortie similaire à ceci :
$ python username_password_sample.py config.json
It took 0.41900205612182617 second(s)
$ python username_password_sample.py config.json
It took 0.480008602142334 second(s)
$ python username_password_sample.py config.json
It took 0.44204020500183105 second(s)
Il a donc fallu environ 0,4 secondes+ pour acquérir un jeton.
Que se passe-t-il?
Avant d’obtenir un jeton, MSAL aurait besoin d’interroger plusieurs points de terminaison de découverte afin de récupérer certaines métadonnées. Ces métadonnées sont rarement modifiées, de sorte qu’elles peuvent être mises en cache et réutilisées. Toutes ces pratiques sont standard qui se produisent dans la couche HTTP, c'est pourquoi MSAL Python n'a pas besoin d'implémenter ce comportement par lui-même, et une bibliothèque de cache HTTP générique ferait ce travail pour nous.
Dans notre cas, MSAL Python utilise déjà une bibliothèque HTTP populaire nommée requests, et il existe aussi une autre bibliothèque générique requests-cache, conçue pour appliquer un monkey patch à requests et fournir automatiquement des mécanismes de mise en cache HTTP.
Mieux encore, son comportement par défaut consiste à le conserver sur le disque, de sorte que notre exemple de ligne de commande bénéficie toujours d’un tel cache HTTP, dispite s’exécutant en tant que nouveau processus à chaque fois.
En fait, cette astuce n’aide pas seulement MSAL Python, elle améliore tout le trafic HTTP compatible avec le cache de votre application.
Conclusion
Voilà, un énorme gain de performances de 1,5 à 2 fois avec une seule ligne de code. Et il est universellement applicable à toutes vos applications utilisant HTTP.
Joyeux piratage !