使用 JSON 物件
JSON 物件及其他所有物件的行為都與資料負載物件類似;它們都是副本。
例如:
下列程式碼將會導致非預期的行為。它會看起來像是已設定,但實際情況是,如果其為持續性內容,則不會保持變更。這與您在 ThingWorx 8.4 中看到的行為相同。值的記憶體內部版本已變更,但其不會正確持續。
me.jsonProp['key'] = 'newValue';
欲正確使用 JSON 物件,您可以將 JSON 字串指派給內容值:
me.jsonProp= {'key':'newValue'};
或者,您也可以建立內容的副本、進行更新,然後再將其指派回原始內容:
var json = me.jsonProp;
json['key'] = 'newValue';
me.jsonProp = json;
所有內容值都儲存在快取圖層中。在 JavaScript 中使用的物件只是物件的包裝函式,它會處理某些寫回快取功能以協助達成舊有支援。直接物件更新僅支援一個層級或包裝函式。請務必瞭解,每個工作指派都會將完整物件寫回快取,因此當您需要進行多項變更時,始終應建立副本。
以下範例不起作用。json 物件是原始物件的包裝函式,但 unit 是子物件,不是包裝函式。因此指派 .unit 不會將值寫回快取的物件:
input.recurrent.unit = "MB"
您可以使用下列其中一種因應措施:
處理文件的子零件,並將其指派回:
json = input.recurrent
json.unit = "MB";
input.recurrent = json <--- this does a cache update
如果您必須更新 JSON 中的多個值,請始終複製完整物件、進行處理,然後再將其指派回以獲得最佳效能。
json = JSON.parse(input);
json.recurrent.unit ="MB";
input = json <--- this does a cache update
您應該限制快取寫入以獲得最佳效能。它們在單一伺服器模式下的寫入速度非常快,但在高可用性叢集模式下會分配快取,使每次寫入都會對效能產生影響。
input.value = 5 <--- this does a cache update
input.text = "junk" <--- this does a cache update
這是否有幫助?