ソリューション開発の最良事例 > HA アプリケーションの最良事例 > オブジェクトを使用したパフォーマンスの改善
オブジェクトを使用したパフォーマンスの改善
オブジェクトを返す API を呼び出す場合には必ず、API を複数回呼び出すよりも、そのオブジェクトを保存しておいた方が効率的です。また、より基本的な API を呼び出して一度に 1 つずつ Thing を取得するよりも、単一の API を呼び出して必要なすべてのものを取得することをお勧めします。サーバーのコンフィギュレーションによっては、API でサーバーからほかのリソースへのラウンドトリップが必要になる場合があります。
例: プロパティのアスペクト情報の取得
この例では、Thing の各プロパティのアスペクト情報を取得します。これを行うには、Thing 情報を JSON として取得し、プロパティ定義からこの情報を取り出します。このため、2 つの API 呼び出しを行って JSON 情報を構築します。
Things[thingName] は必要な Thing を名前でサーチします。
GetMetadataAsJSON() は Thing エンティティの階層を探索してその Thing の JSON 情報を構築します。
間違った方法:
この例では、Thing を毎回をサーチし、各プロパティ呼び出しで JSON 表現を構築しています。
var propertyNames = ["p1", "p2"]
for (var i = 0; i < propertyNames.length; i++)
logger.warn("Property [" + propertyNames[i] + "] cacheTime: " + Things[me.name].GetMetadataAsJSON().propertyDefinitions[propertyNames[i]].aspects.cacheTime)
}
正しい方法:
この例では、Thing を 1 回サーチし、JSON オブジェクトを 1 回構築してから、各プロパティのプロパティ定義から値を取得しています。Thing に対して複数の操作を実行した場合、Things[thingName] から Thing 変数を構築できます。この場合は、プロパティ定義だけが必要になるので、これを保存します。
var propertyNames = ["p1", "p2"]
var propertyDefinitions = Things[me.name].GetMetadataAsJSON().propertyDefinitions
for (var i = 0; i < propertyNames.length; i++)
logger.warn("Property [" + propertyNames[i] + "] cacheTime: " + propertyDefinitions[propertyNames[i]].aspects.cacheTime)
}
例: プロパティ名の取得
この例では、Thing からプロパティ定義を取得して名前のリストを構築することによって、プロパティ名のリストを構築しています。2 つの API 呼び出しを行います。
Things[thingName] は必要な Thing を名前でサーチします。
GetPropertyDefinitions() が Thing に対して呼び出され、階層を探索してプロパティ定義のリストを構築しています。
間違った方法:
これは、プロパティの数を取得する API を呼び出してから、定義に対して複数の呼び出しを行って毎回名前と説明を取得するという悪い例です。各プロパティについて、Thing サーチとプロパティ定義が少なくとも 2 回は呼び出されます。
for (var i = 0; i < Things["MyThing"].GetPropertyDefinitions().length; i++) {
var newEntry = new Object();
newEntry.name = Things["MyThing"].GetPropertyDefinitions().rows[i].name;
newEntry.description = Things["MyThing"].GetPropertyDefinitions().rows[i].description;
result.AddRow(newEntry);
}
正しい方法:
この例では、すべてのプロパティについて、Thing とプロパティ定義の API が 1 回だけ呼び出されています。
var propDefs = Things["MyThing"].GetPropertyDefinitions();
for (var i = 0; i < propDefs.length; i++) {
var newEntry = new Object();
newEntry.name = propDefs.rows[i].name;
newEntry.description = propDefs.rows[i].description;
result.AddRow(newEntry);
}
これは役に立ちましたか?