2012-01-17 63 views
2

我有一個作爲JSON響應返回的數據數組。數據將定期更新,並且也會被頻繁訪問。哪種方法會被認爲是最佳實踐?

的數據包含的評論列表/回覆爲每首歌曲上顯示,當用戶將鼠標懸停在一個特定的元素被訪問,然後具體的意見/迴應被渲染到模板。

歌曲列表也是動態可過濾的,因此數組將不斷更新。

鑑於這一數據,以下將被認爲是最佳做法的頻繁訪問和更新: -

A.存儲整個陣列中的一個全局變量,並不斷對其進行操作/訪問它。

B.商店使用jQuery的$方法。數據和訪問它的方式數組中的DOM。

這將是最好的,爲什麼...如果選擇A,請記住,該變量需要在內存中整個用戶會話舉行。還有什麼我需要注意潛在的內存泄漏等方面?

編輯:只是提供一些更多的信息:平均而言,我希望數據在任何給定時間2-5kb之間。

+0

感謝迄今爲止的答案球員,但我想獲得一些更多的意見,然後將其標記爲答案。 – gordyr 2012-01-17 13:29:31

回答

1

我不得不說B選項這裏。儘管操作純數組的性能好處聽起來非常吸引人,但從數據類型的使用來看,您需要將數據與它們適用的單個DOM元素相關聯。

使用$.data,您將數據附加到它們所屬的元素。想象一下,你的工作流程活動hover的:

// with option A 
$('.song').mouseover(function (e) { 
    // read the relevant index value of the data from this element 
    // (probably through some attribute?) 

    // get the data from the global array 

    // show that data on hover 
}); 

// with option B 
$('.song').mouseover(function (e) { 
    // show the $(this).data() on hover 
}); 

這當然是清潔的,我不能想象你如何讓你的DOM元素記得在全局陣列中的相關數據,插上的DOM元素上保存他們自己通過一個屬性,或在某個地方有一個對象引用。

其次,全局對象是邪惡的。對一些重要的,容易爭論和辯論的火焰灣範圍。

第三,聽起來像你的歌曲元素正在對DOM本身進行排序和過濾。如果您通過$.data附加數據,那麼這些數據將與DOM元素一起排序和過濾,而無需進行任何其他跟蹤。歌曲元素必須從DOM中刪除?只要撥打.remove()就可以了 - 關聯的也會被刪除。免費功能!

最後,$.data也進行了優化,以防止循環引用和內存泄漏(糾正我,如果我誤了那一個)。

此外,2-5kb的數據聽起來不是很多。

只是我的兩分錢。

+0

很好的回答,我很信服。你是非常正確的,如果數據直接與元素綁定,那麼懸停處理程序將會更清晰。感謝所有回答的人。 – gordyr 2012-01-17 13:52:54

+0

不幸的是,看起來好像我將不得不採取全局變量的方法,因爲IE由於某種原因似乎不希望與數據配合得很好。一個真正的恥辱,因爲它在每一個精美的作品http://stackoverflow.com/questions/8896259/why-cant-i-get-nested-array-property-in-ie9 – gordyr 2012-01-17 19:22:28

+0

看着你的鏈接的問題,它看起來像你設法解決它。只有語法問題,我想? :D – 2012-01-18 03:38:57

0

IMO取決於你的JS/JQ代碼。如果是組件化的,使用.data保持每個組件的本地數據更清潔。如果不是,它可能並不重要,但將它保存在一個位置可能會使事情變得更容易。我沒有遇到使用很多.data附件的特定問題,但我可能很幸運。

您是否確定必須始終將數據保存在頁面上?與添加/刪除大塊相比,頁面存儲的任意無限增加會讓我有點緊張,評論樹可能會涉及到。

+0

不幸的是,考慮到應用程序的性質,這些選項實際上是持久性內存存儲器,頻繁更新或者使用$ .data進行大量的寫/讀操作。平均而言,我預計任何時候數據都在2-5kb之間。 – gordyr 2012-01-17 12:42:48