Utilizzo degli oggetti JSON
Gli oggetti JSON e tutti gli altri oggetti si comportano come gli oggetti infotable, ovvero sono tutti cloni.
Ad esempio:
Il codice che segue causa un comportamento imprevisto. L'impostazione risulta eseguita, ma in realtà non persiste con la modifica se si tratta di una proprietà permanente. Si tratta dello stesso comportamento che si avrebbe in ThingWorx 8.4. La versione in memoria del valore viene modificata, ma la modifica non viene mantenuta.
me.jsonProp['key'] = 'newValue';
Per utilizzare correttamente gli oggetti JSON, è possibile assegnare una stringa JSON al valore della proprietà:
me.jsonProp= {'key':'newValue'};
In alternativa, è possibile creare una copia della proprietà, effettuare gli aggiornamenti e quindi assegnarli nuovamente alla proprietà originale.
var json = me.jsonProp;
json['key'] = 'newValue';
me.jsonProp = json;
Tutti i valori delle proprietà vengono memorizzati in un livello della cache. L'oggetto utilizzato in JavaScript è solo un wrapper per l'oggetto, che gestisce alcune scritture che vengono eseguite di nuovo nella cache per facilitare il supporto legacy. Per gli aggiornamenti diretti degli oggetti è supportato un solo livello o wrapper. È importante comprendere che ogni assegnazione scriverà di nuovo l'intero oggetto nella cache, pertanto è sempre opportuno creare una copia quando si devono apportare più modifiche.
L'esempio seguente non funziona. L'oggetto json è un wrapper dell'oggetto originale, ma unit è un oggetto secondario e non è un wrapper. Pertanto, l'assegnazione di .unit non restituirà il valore all'oggetto memorizzato nella cache:
input.recurrent.unit = "MB"
È possibile utilizzare una delle soluzioni alternative elencate di seguito:
Lavorare su una sottoparte del documento e assegnarla di nuovo all'oggetto:
json = input.recurrent
json.unit = "MB";
input.recurrent = json <--- this does a cache update
Se è necessario aggiornare più valori in JSON, creare sempre una copia dell'intero oggetto, utilizzarla e quindi assegnarla di nuovo per ottenere prestazioni ottimali.
json = JSON.parse(input);
json.recurrent.unit ="MB";
input = json <--- this does a cache update
Per ottimizzare le prestazioni, è necessario limitare le scritture della cache. Le scritture possono essere eseguite abbastanza rapidamente in modalità server singolo, ma in modalità cluster a disponibilità elevata la cache viene distribuita, pertanto ogni scrittura ha un impatto sulle prestazioni.
input.value = 5 <--- this does a cache update
input.text = "junk" <--- this does a cache update
È stato utile?