Uso de objetos para aumentar el rendimiento
Al llamar a las API que devuelven objetos, siempre es mejor almacenar el objeto en una variable local que realizar varias llamadas a API. También es mejor llamar a una sola API para obtener todo lo que se necesita, en lugar de llamar a una API más básica para obtener una cosa cada vez. En función de la configuración del servidor, las API pueden requerir desplazamientos de ida y vuelta entre el servidor y otros recursos.
Ejemplo: Obtención de información sobre el aspecto de la propiedad
En este ejemplo, se recupera información del aspecto para cada propiedad de una cosa. Para ello, se obtiene la información de la cosa como JSON y, a continuación, se extrae la información de la definición de propiedad. Por lo tanto, se realizan dos llamadas a API para crear la información JSON.
Things[thingName] busca la cosa requerida por el nombre.
GetMetadataAsJSON() recorre la jerarquía de entidades de cosa para generar la información JSON de la cosa.
Manera incorrecta:
En este ejemplo, se busca cada vez la cosa y se crea la representación JSON en cada llamada de propiedad.
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)
}
Manera correcta:
En este ejemplo se buscará la cosa una vez, se generará el objeto JSON una vez y, a continuación, se obtendrán valores de las definiciones de propiedad de cada propiedad. Si se realizaban varias operaciones en la cosa, se podría crear una variable de cosa a partir de Things[thingName]. En este caso, solo se necesitan las definiciones de propiedad, de modo que es lo que se guarda.
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)
}
Ejemplo: Obtención de nombres de propiedades
En este ejemplo, se crea una lista de nombres de propiedades mediante la obtención de definiciones de propiedades de una cosa y la creación de una lista de nombres. Se realizan dos llamadas a API.
Things[thingName] busca la cosa requerida por el nombre.
GetPropertyDefinitions() llama a la cosa y recorre la jerarquía para crear la lista de definiciones de propiedades.
Manera incorrecta:
Este es un ejemplo incorrecto que llama a las API para obtener el número de propiedades y, a continuación, llama a las definiciones para obtener el nombre y la descripción cada vez. La búsqueda de cosa y la definición de propiedad se llaman dos veces como mínimo para cada propiedad.
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);
}
Manera correcta:
En este ejemplo se llama a la cosa y a la API de definición de propiedad solo una vez para todas las propiedades.
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);
}
¿Fue esto útil?