Utilizzo degli oggetti per aumentare le prestazioni
Quando si chiamano API che restituiscono oggetti, è sempre meglio memorizzare l'oggetto in una variabile locale anziché effettuare più chiamate all'API. È inoltre consigliabile chiamare una singola API per ottenere le informazioni necessarie, anziché chiamare un'API più semplice per ottenere un solo oggetto alla volta. A seconda della configurazione del server, per alcune API potrebbe essere necessario eseguire dei round trip ad altre risorse esterne al server.
Esempio: ottenere informazioni sull'aspetto delle proprietà
In questo esempio vengono recuperate le informazioni relative all'aspetto per ciascuna proprietà di un oggetto. A tale scopo, è possibile ottenere le informazioni sull'oggetto come JSON e quindi estrarle dalla definizione della proprietà. Di conseguenza, vengono eseguite due chiamate API per creare le informazioni JSON.
Things[thingName] cerca l'oggetto desiderato in base al nome.
GetMetadataAsJSON() esplora la gerarchia di entità di oggetto per creare le informazioni JSON per l'oggetto.
Procedura errata:
In questo esempio si esegue ogni volta la ricerca dell'oggetto e si crea la rappresentazione JSON a ogni chiamata di proprietà.
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)
}
Procedura corretta:
In questo esempio la ricerca dell'oggetto viene eseguita una sola volta, viene creato l'oggetto JSON e quindi si ottengono i valori dalle definizioni per ciascuna proprietà. Se si eseguissero più operazioni sull'oggetto, si potrebbe creare una variabile di oggetto da Things[thingName]. In questo caso sono necessarie solo le definizioni delle proprietà, pertanto verranno salvate solo quelle.
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)
}
Esempio: ottenere i nomi delle proprietà
In questo esempio viene creato un elenco di nomi di proprietà ottenendo le definizioni di proprietà da un oggetto e creando un elenco di nomi. Vengono effettuate due chiamate API.
Things[thingName] cerca l'oggetto desiderato in base al nome.
GetPropertyDefinitions() chiama l'oggetto ed esplora la gerarchia per creare l'elenco delle definizioni di proprietà.
Procedura errata:
Questo è un esempio errato che chiama le API per ottenere il numero di proprietà e quindi esegue chiamate nelle definizioni per ottenere ogni volta nome e descrizione. La ricerca dell'oggetto e la definizione della proprietà vengono chiamate almeno due volte per ogni proprietà.
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);
}
Procedura corretta:
In questo esempio la chiamata all'oggetto e all'API di definizione delle proprietà viene eseguita una sola volta per tutte le proprietà.
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);
}
È stato utile?