2012-04-04 37 views
1

我只是需要一些建議,如果這是明智的。我主要通過AJAX請求加載我的網站數據。爲了節省加載時間和服務器調用,我將所有加載到全局對象的數據保存起來,如果用戶再次選擇該頁面,則只是回收該數據。將所有加載的數據存儲在一個Javascript對象上

我想知道,如果它是明智的緩存整個網站到一個對象,例如:

var page = ['level 1','level 2','level 3','level 4']; 
var mysiteobj = []; 
if (page[0] == 'level 1') 
    if (!mysiteobj['level 1']) 
     $.ajax(/*load data*/).done(function(data){ mysiteobj['level 1'] = data; /*display data*/ }); 
    else /*display mysiteobj['level 1']*/ 
    if (page[1] == 'level 2') 
     if (!mysiteobj['level 1']['level 2']) 
     $.ajax(/*load data*/).done(function(data){ mysiteobj['level 1']['level 2'] = data; /*display data*/ }); 
     else /*display mysiteobj['level 1']['level 2']*/ 
...etc 

...等等。爲了澄清相當奇怪的符號,'級別1'是用戶可能查找的所有地理區域,'級別2'是用戶可能看到的地理區域中的所有部門,'級別3'將是部門中的類別在地理位置,並且說'級別4'將是地理位置中部門類別中列出的產品或條目。

現在,我的方法是,我有一個包含所有地理區域的對象,每次載入一個新的地理位置時,第二個對象將被新的部門列表覆蓋,第三個對象包含我的類別和第四個我的列表/產品。

如果這是有道理的,請指教。我猜這個簡化的問題是,在一個對象變得笨拙和陷入瀏覽器之前,你能夠創建一個對象有多大?

回答

2

爲什麼不根據需要加載數據,如果尚未加載數據。

例如,可以加載水平1.

然後,當用戶選擇2的水平,負荷,如果尚不存在,並繼續。

因此,您可以保留已經加載的內容,但只是通知他們您正在檢索數據,如果需要時間,否則人們可能會明白您正在加載它。

就我個人而言,我會告訴用戶有一個加載請求,所以他們知道發生了什麼。

預加載整個站點是浪費,IMO。

+0

當頁面或用戶閒置時,您可以「預加載」所有內容。就像瀏覽第1頁時所說的那樣,在後臺加載其他人。 – Joseph 2012-04-04 01:29:53

+1

@Joseph - 你可以,但是你打了很多電話,可能對用戶沒有任何好處,如果他們在移動設備上,併爲他們的帶寬付費,那麼這將是一個問題。另外,如果用戶僅查看第2級中的一個部分,然後再加載第2級中的所有內容,並且大多數不打算使用時都會令人討厭,這也將耗盡內存。 – 2012-04-04 01:33:18

+0

好點。我從來沒有想過移動。 – Joseph 2012-04-04 01:36:49

0

考慮到這是萬萬要不得發出Ajax請求返回的大型數據集....

我想你可以存儲這些數據爲Redis的/ Memcached的服務器,並趕上這正是你想要的JavaScript函數。把這些數據放到全局變量中並不明智,讓你的用戶爲此付出代價。

+0

這就是我的意思。它將緩存用戶已經加載到一個全局對象中的數據。我不知道這是否明智。對象大小是否有限制?另一種方法是製作單獨的對象或允許在對象上覆蓋數據(意味着它不會緩存所有內容)。 – philtune 2012-04-04 11:36:56

相關問題