はじめに
前回、Office 365 ユーザーコネクターの活用方法について紹介しました。
今回は、Office 365 ユーザーコネクターを利用する際におけるパフォーマンス観点での注意点とその対策について紹介します。
アプリ例
今回は、以下のように、勤務状況を共有するアプリを例に説明します。
こちらのアプリでは、組織内の複数のユーザーの情報を表示しているため、
アプリの作り次第では、表示させたいユーザー数分、Office365ユーザーコネクターで情報取得を行う必要があります。
パフォーマンス観点での注意点
実際にはこのような実装ではありませんが、各ユーザーの表示名を以下のような感じで取ってくるようにしたいと思います。
Office365ユーザー.UserProfileV2(ThisItem.cr841_userupn).displayName
通信の中身を以下のモニターを使って見てみたいと思います。
まず、上記ページをロードした際の通信です。
ユーザーごとに情報を取得していることがわかります。応答のサイズや期間 (ミリ秒) が結構大きいことがわかります。
応答の詳細を見てみると、すべてのプロパティを取得していることが分かります。
今回、欲しいのは、"displayName" だけなのでちょっと余分な通信ですね。
対処策
確実に "displayName" だけ取得する場合、以下のような書き方になります。
Office365ユーザー.UserProfileV2(
ThisItem.cr841_userupn,
{'$select': "Displayname"}
).displayName
再度モニターツールでみてみます。
応答のサイズや期間(ミリ秒)が小さくなったことが確認できます。
また、複数の属性を取得する場合は、以下のような書き方になります。
Office365ユーザー.UserProfileV2(
ThisItem.cr841_userupn,
{'$select': "Displayname,Mail"}
).displayName
まとめ
今回は、Office 365 ユーザーコネクターを利用する際のパフォーマンス観点での注意点およびその対策として特定の属性のみ取得する方法を紹介しました。
個人的に、Office 365 ユーザーコネクターを利用する際は (特に、モバイル向けアプリや、ギャラリー内で利用する際)、出来るだけ最低限必要な情報を取得して通信量を軽くしてあげることをお勧めします。
また、上記のようなアプリの場合、Office 365 ユーザーコネクターで毎回情報を取得せず、アプリ内の DB に情報を保存しておいてそちらから情報を取得する、または、一旦コレクションに格納し、リフレッシュしない限りはそちらを参照するような方法を検討しても良いかと思います。