将所有已加载的数据存储到一个Javascript对象中

时间:2012-04-04 01:23:39

标签: javascript jquery ajax object

如果这是明智的,我只需要一些建议。我主要是通过AJAX请求加载我的网站数据。为了节省加载时间和服务器调用,我将保存加载到全局对象的所有数据,并在用户再次选择页面时回收该数据。

我想知道将整个网站缓存到一个对象上是否明智,例如:

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”将是部门中的类别在geo中,并说'level 4'将是geo中部门类别中列出的产品或条目。

现在,我的方法是,我有一个包含所有地理区域的对象,每次加载新地理位置时,第二个对象都会被新的部门列表覆盖,第三个对象包含我的类别,第四个对象包含我的列表/产品

如果这有道理,请告知。我想简化的问题是,在物体变得笨拙并陷入浏览器之前,你可以制造多大的物体?

2 个答案:

答案 0 :(得分:2)

为什么不根据需要加载数据,如果没有加载的话。

例如,您可以加载1级。

然后,当用户选择级别2时,加载(如果尚未加载),然后继续。

因此,您可以保留已加载的内容,但只是告知他们您正在检索数据,如果需要时间,否则人们可能会理解您正在加载它。

就个人而言,我会向用户显示有一个加载请求,因此他们知道发生了什么。

预加载整个网站是一种浪费,IMO。

答案 1 :(得分:0)

考虑到ajax请求返回大数据集是不明智的....

我认为您可以将此数据存储到Redis / Memcached服务器中,并创建一个能够准确捕获您想要的javascript函数。将大量数据放入全局变量并让您的用户为此付费是不明智的。