Javascript:将大型数据集传递给多个函数

时间:2011-04-18 15:25:26

标签: javascript jquery json widget yui3

我正在使用YUI3小部件,但对于你来说,jquery家伙只是假装我们正在谈论插件。我有一个大型的json数据集,其中包含5,000多条记录。在我的应用程序中,我至少有5个小部件需要访问我的数据集。目前我在html中嵌入json并在页面加载时使用YUI3抓取它,然后我渲染我的小部件。

我想避免的是将5份数据集存储在内存中。我试图想出一个允许我避免这种情况的设计模式。我相信如果我将这些数据作为属性传递给我的小部件,它将通过值传递它,而不是引用并基本上将其复制到内存中...让我知道我是否错了。由于数据是全局可用的,我的小部件可以直接访问它,但我认为这也会将数据复制到内存中。

我想如果我最初创建一个对象,在对象中加载我的数据并将该对象作为属性传递,它将通过引用传递它,这将允许我的所有小部件访问我的数据的同一个实例。

这是你会做的吗?请让我知道你的想法,以及如何设置这样的东西。

感谢您(正面)的投入!

2 个答案:

答案 0 :(得分:2)

如果您将“数据集”保存在自己的单独.js文件中,则定义如下:

// My Huge Data Set
// Author: bababa
//
(function(window) {
  window['hugeDataSet'] = {
    // millions of lines of stuff
  };
})(this);

然后当您使用普通<script>标记或脚本加载器导入它时,只会有一个数据的全局副本。你可以像这样引用它:

someWidget.doSomething(hugeDataSet);

并且不会复制数据。当然,您可以在HTML中的<script>中内联数据,但如果您的HTML是由服务器端模板(如php或jsp或其他)生成的话,它将不会被缓存。 / p>

答案 1 :(得分:-1)

您的小部件每次都需要访问所有5,000条记录吗?或者他们只需要您的数据的特定子集?

在我看来,你正试图在这里使用json替代数据库。

最有可能的解决方案是将您的数据放入适当的数据库,使用服务器端脚本请求所需的数据,并将这些数据json返回到您的小部件。

与数据库查询相比,解析文本非常慢。