Objekte zur Leistungssteigerung verwenden
Wenn Sie APIs aufrufen, die Objekte zurückgeben, ist es immer besser, das Objekt in einer lokalen Variable zu speichern, als mehrere Aufrufe der API zu tätigen. Es ist auch besser, eine einzelne API aufzurufen, um alles abzurufen, was Sie benötigen, anstatt eine grundlegende API aufzurufen, um jeweils ein Ding abzurufen. Abhängig von der Serverkonfiguration können APIs Roundtrips vom Server zu anderen Ressourcen erfordern.
Beispiel: Informationen zu Eigenschaftsaspekten erhalten
In diesem Beispiel werden die Aspektinformationen für jede Eigenschaft eines Dings abgerufen. Dazu erhalten wir die Dinginformationen als JSON und rufen dann die Informationen aus der Eigenschaftsdefinition ab. Daher führen wir zwei API-Aufrufe durch, um die JSON-Informationen zu erstellen.
Things[thingName] sucht das erforderliche Ding anhand des Namens.
GetMetadataAsJSON() durchläuft die Dingentitätshierarchie, um die JSON-Informationen für das Ding zu erstellen.
Falsch:
In diesem Beispiel wird jedes Mal nach dem Ding gesucht und die JSON-Darstellung bei jedem Eigenschaftsaufruf erstellt.
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)
}
Richtig:
In diesem Beispiel wird einmal nach dem Ding gesucht, das JSON-Objekt einmal erstellt und dann werden Werte aus Eigenschaftsdefinitionen für jede Eigenschaft abgerufen. Wenn wir mehrere Operationen für das Ding durchführen würden, könnten wir eine Dingvariable aus Things[thingName] erstellen. In diesem Fall benötigen wir nur die Eigenschaftsdefinitionen. Also speichern wir sie.
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)
}
Beispiel: Eigenschaftsnamen abrufen
In diesem Beispiel wird eine Liste von Eigenschaftsnamen erstellt, durch Abruf der Eigenschaftsdefinitionen aus einem Ding und Erstellung einer Liste mit Namen. Wir führen zwei API-Aufrufe durch.
Things[thingName] sucht das erforderliche Ding anhand des Namens.
GetPropertyDefinitions() ruft das Ding auf und durchläuft die Hierarchie, um die Liste der Eigenschaftsdefinitionen zu erstellen.
Falsch:
Dies ist ein Beispiel für eine falsche Vorgehensweise. Die APIs werden aufgerufen, um die Anzahl der Eigenschaften abzurufen. Dann werden die Definitionen aufgerufen, um jedes Mal den Namen und die Beschreibung abzurufen. Dingsuche und Eigenschaftsdefinition werden mindestens zweimal für jede Eigenschaft aufgerufen.
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);
}
Richtig:
In diesem Beispiel wird die Ding- und Eigenschaftsdefinition-API nur einmal für alle Eigenschaften aufgerufen.
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);
}
War dies hilfreich?