Utilisation d'objets pour améliorer les performances
Lorsque vous appelez des API qui renvoient des objets, il est toujours préférable de stocker l'objet dans une variable locale plutôt que d'effectuer un appel de l'API à plusieurs reprises. Il est également préférable d'appeler une API unique pour obtenir tout ce dont vous avez besoin, plutôt que d'appeler une API plus basique pour obtenir un objet à la fois. Selon la configuration de votre serveur, les API peuvent nécessiter des allers-retours entre le serveur et d'autres ressources.
Exemple : obtention d'informations sur l'aspect des propriétés
Dans cet exemple, nous récupérons les informations d'aspect de chaque propriété d'un objet. Pour ce faire, nous obtenons les informations d'objet au format JSON, puis vous extrayez les informations de la définition de propriété. Par conséquent, nous effectuons deux appels d'API pour générer les informations JSON.
Things[thingName] recherche l'objet requis par son nom.
GetMetadataAsJSON() parcourt la hiérarchie d'entités de l'objet pour générer les informations JSON de l'objet.
Mauvaise méthode :
Dans cet exemple, nous recherchons chaque fois l'objet et générons la représentation JSON lors de chaque appel de propriété.
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)
}
Bonne méthode :
Dans cet exemple, nous recherchons l'objet une fois, créons l'objet JSON une fois, puis obtenons les valeurs des définitions de propriété pour chaque propriété. Si nous devions effectuer plusieurs opérations sur l'objet, nous pourrions générer une variable d'objet à partir de Things[thingName]. Dans ce cas, nous avons uniquement besoin des définitions de propriété. C'est donc ce que nous enregistrons.
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)
}
Exemple : obtention de noms de propriété
Dans cet exemple, nous élaborons une liste de noms de propriété en récupérant les définitions de propriété d'un objet et en créant une liste de noms. Nous effectuons deux appels d'API.
Things[thingName] recherche l'objet requis par son nom.
GetPropertyDefinitions() appelle l'objet et parcourt la hiérarchie pour créer la liste de définitions de propriété.
Mauvaise méthode :
Voici un mauvais exemple qui appelle les API pour obtenir le nombre de propriétés, puis appelle les définitions pour obtenir le nom et la description à chaque fois. La recherche d'objet et la définition de propriété sont appelées au moins deux fois pour chaque propriété.
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);
}
Bonne méthode :
Dans cet exemple, nous appelons l'API de définition de propriété et d'objet une seule fois pour toutes les propriétés.
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);
}
Est-ce que cela a été utile ?