Trabajo con objetos JSON
Los objetos JSON y todos los demás objetos se comportan como los objetos de infotable; son todos clones.
Por ejemplo:
El siguiente código producirá un comportamiento inesperado. Parecerá que se ha definido, pero que no se conservará realmente el cambio si es una propiedad persistente. Este es el mismo comportamiento que se vería en ThingWorx 8.4. La versión en memoria del valor cambia, pero no se almacena correctamente.
me.jsonProp['key'] = 'newValue';
Para trabajar con objetos JSON correctamente, se puede asignar una cadena JSON al valor de la propiedad:
me.jsonProp= {'key':'newValue'};
También se puede realizar una copia de la propiedad, realizar actualizaciones y, a continuación, volver a asignarlas a la propiedad original:
var json = me.jsonProp;
json['key'] = 'newValue';
me.jsonProp = json;
Todos los valores de propiedad se almacenan en una capa de caché. El objeto utilizado en JavaScript es solo un empaquetador del objeto, que gestiona algunas escrituras en la caché para ayudar con el soporte heredado. Solo se soporta un nivel o empaquetador para las actualizaciones de objetos directas. Es importante comprender que cada asignación volverá a escribir todo el objeto en la caché, por lo que siempre se debe realizar una copia cuando se necesiten realizar varios cambios.
El siguiente ejemplo no funciona. El objeto json es un empaquetador del objeto original, pero unit es un subobjeto y no es un empaquetador. Por lo tanto, la asignación de .unit no volverá a escribir el valor en el objeto en caché:
input.recurrent.unit = "MB"
Se puede utilizar una de las siguientes soluciones alternativas:
Trabajar en una subsección del documento y volver a asignarla:
json = input.recurrent
json.unit = "MB";
input.recurrent = json <--- this does a cache update
Si es necesario actualizar varios valores en el JSON, realice siempre una copia de todo el objeto, trabaje en él y, a continuación, vuelva a asignarlo para obtener el mejor rendimiento.
json = JSON.parse(input);
json.recurrent.unit ="MB";
input = json <--- this does a cache update
Se deben limitar las escrituras en caché para obtener el máximo rendimiento. Se pueden grabar con bastante rapidez en el modo de servidor único, pero en el modo de clúster de alta disponibilidad, la caché está distribuida por lo que cada escritura tendrá un impacto en el rendimiento.
input.value = 5 <--- this does a cache update
input.text = "junk" <--- this does a cache update
¿Fue esto útil?