2011-05-11 81 views
0

用下面的JSON:HTML5本地存儲字符串化的並存儲每個對象引用

var myObj = {name: 'my obj', does: 'nothing'}; 
var myObjArr = [myObj, myObj, myObj]; 

當存儲myObjArr到本地存儲中,MyObj中JSON是wrtten 3次,服用了3倍的存儲空間,即:

"[{"name":"my obj","does":"nothing"},{"name":"my obj","does":"nothing"},{"name":"my obj","does":"nothing"}]" 

很明顯,這將帶來可擴展性問題。任何人都可以推薦最佳解決方案到目前爲止,我不得不訴諸使用ID,一個關係數據庫。

var objects = {0: {name: 'my obj', does: 'nothing'}}; 
var myObjArr = [{obj: 0}, {obj: 0}, {obj: 0}]; 

更新 - 問題是當所有數據最終都存儲爲鍵/值字符串時,如何在本地存儲中表示此層次結構。訴諸關係數據庫概念似乎是過時的。

+0

我猜你的例子對象有時會改變?因爲看起來你只有一個相同的對象三次 - 它會始終是一個相同的元素數量還是會改變? – Henry 2011-05-11 03:10:50

+0

@Henry這只是一個示例,用於顯示一個對象是否包含多個對另一個對象的引用,它將爲每個引用浪費空間的每個引用進行字符串化,並且當您從後面解析JSON時會丟失多對一連接本地存儲......當然必須有一個更清潔的方式? – 2011-05-11 03:40:15

回答

1

一個更合適的技術是IndexedDB用作對象存儲,但很多瀏覽器還不是supported

編輯:你會想瀏覽將對象複製到IndexedDB時使用的structured clone algorithm的文檔 - 它看起來像引用保持每個記錄,但多個記錄不會導致每個記錄引用對象在JavaScript內存空間中共享。