2012-03-02 80 views
2

我在前端工程方面相當缺乏經驗,所以我很抱歉如果這樣做太天真或太寬泛。在瀏覽器中緩存對象時,多少內存太多?

我的應用程序通過AJAX獲取4k JSON對象。爲了防止重複的HTTP請求,返回的JSON緩存在全局窗口範圍內的對象中。有沒有關於這種事情的最佳實踐?

我意識到緩存大小的合理限制將取決於瀏覽器,操作系統,硬件和其他因素。我正在尋找退化的UI響應能力。

雖然有什麼好的經驗法則?

+1

您是否考慮讓瀏覽器通過在返回的JSON上使用HTTP緩存指令而不是顯式記憶來決定緩存多少? – 2012-03-02 15:42:37

+0

這是一個偉大的觀點,弗朗西斯。我有一些問題通過Django在整頁加載中實現HTTP緩存指令(我認爲是Google Analytics)。我想我是爲了控制目的去記憶,但我想這是錯誤的。 – Ben 2012-03-02 15:56:12

+0

這不一定是錯的,只是需要考慮。 – 2012-03-02 16:18:22

回答

3

這很大程度上取決於您的任務以及您希望擁有的大部分用戶。

如果你有不錯的3D遊戲,那麼即使500MB將是確定的(但不是所有的JSON緩存)

現代瀏覽器需要從一開始的內存50-100MB。 因此,在大多數情況下,您的所有javascript對象都應該是50MB,我想50MB足夠大,適用於任何簡單(twitter)/平均(gmail)web應用程序。

此外,RAM現在每GB花費5-7美元。

請記住,4k的字符串化JSON將變成10-50kb的對象,甚至字符串形式將需要將近8k(如果您使用utf-8進行http傳輸),因爲js引擎使用UTF-16內部字符串表示。

+0

這是一個很好的答案Kirilloid。你會像弗朗西斯建議的那樣使用HTTP緩存,或像我一樣記憶對象嗎?緩存版本應該是每個用戶私有的(我知道這可以通過緩存控制指令來實現),並且它們應該相當快地過期(最多5分鐘)。 – Ben 2012-03-02 15:59:16

+0

這又取決於。我有一個應用程序的網站,它爲每個響應返回0.1-1kb的JSON。用戶很可能會在一個會話中執行相同的請求,但可能性會大大降低,而且第二天將執行相同的請求。用戶很難每個會話發送超過100個請求。我將響應作爲對象存儲在內存中。 – kirilloid 2012-03-02 16:07:07