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

Javascript:将大数据集传递给多个函数,javascript,jquery,json,widget,yui3,Javascript,Jquery,Json,Widget,Yui3,我使用的是YUI3小部件,但对你们来说,jquery的家伙们只是假装我们在谈论插件。我有一个很大的json数据集,其中有5000多条记录。在我的应用程序中,我至少有5个小部件需要访问我的数据集。目前,我正在将json嵌入html中,并在呈现我的小部件之前,在页面加载时使用YUI3获取它 我想要避免的是将我的数据集的5个副本存储在内存中。我试图想出一个设计模式,让我避免这种情况。我相信,如果我将这些数据作为属性传递给我的小部件,它将通过值传递数据,而不是引用,并将其复制到内存中。。。如果我错了,请

我使用的是YUI3小部件,但对你们来说,jquery的家伙们只是假装我们在谈论插件。我有一个很大的json数据集,其中有5000多条记录。在我的应用程序中,我至少有5个小部件需要访问我的数据集。目前,我正在将json嵌入html中,并在呈现我的小部件之前,在页面加载时使用YUI3获取它

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

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

你会这么做吗?请让我知道你的想法和你将如何设置这样的事情

谢谢你(积极)的意见

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

// My Huge Data Set
// Author: bababa
//
(function(window) {
  window['hugeDataSet'] = {
    // millions of lines of stuff
  };
})(this);
someWidget.doSomething(hugeDataSet);
然后,当您使用普通的
标记或脚本加载程序导入该数据时,只会有一个数据的全局副本。您可以这样引用它:

// My Huge Data Set
// Author: bababa
//
(function(window) {
  window['hugeDataSet'] = {
    // millions of lines of stuff
  };
})(this);
someWidget.doSomething(hugeDataSet);
这不会复制数据。当然,您可以在HTML的
中内联删除数据,但如果您的HTML是由服务器端模板(如php或jsp或其他任何模板)生成的,则不会缓存数据。

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

// My Huge Data Set
// Author: bababa
//
(function(window) {
  window['hugeDataSet'] = {
    // millions of lines of stuff
  };
})(this);
someWidget.doSomething(hugeDataSet);
然后,当您使用普通的
标记或脚本加载程序导入该数据时,只会有一个数据的全局副本。您可以这样引用它:

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

这不会复制数据。当然,您可以在HTML的
中内联删除数据,但如果您的HTML是由服务器端模板(如php或jsp或其他任何模板)生成的,则不会缓存数据。

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

在我看来,您尝试使用json在这里有一个数据库的替代方案

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


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

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

在我看来,您尝试使用json在这里有一个数据库的替代方案

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


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

数据位于数据库中,我们不使用json替换它。我们正在开发一个单一的应用程序,它几乎可以处理客户端的所有事情。我们希望它真的很快,并且每次我们做一些简单的事情(比如请求一个新页面)时都不会击中服务器,这就是我们这样做的原因。用JSON转储数据库的内容并将其发送到客户端就是用JSON替换数据库。加载5K记录并用JavaScript解析它不是最快的方法(否则,你就不会问这个问题了。正如Pointy所指出的,你的数据集不会被复制多次)。考虑缓存和预取的混合,以优化速度。数据在数据库中,而我们不使用JSON来替换它。我们正在开发一个单一的应用程序,它几乎可以处理客户端的所有事情。我们希望它真的很快,并且每次我们做一些简单的事情(比如请求一个新页面)时都不会击中服务器,这就是我们这样做的原因。用JSON转储数据库的内容并将其发送到客户端就是用JSON替换数据库。加载5K记录并用JavaScript解析它不是最快的方法(否则,你就不会问这个问题了。正如Pointy所指出的,你的数据集不会被复制多次)。考虑缓存和预取的混合来优化速度。HTML不是动态的,但是数据是动态的。我目前正在用一个脚本标记将其嵌入html中,因此我目前确实可以从我的所有小部件全局访问数据集。所以,每次我将数据分配给我的一个小部件中的一个变量时,它都不会在内存中复制?我不完全确定JS是如何处理这样的事情的。另外,谢谢你的帮助。不,简单地传递一个对象的引用肯定不会复制。事实上,你必须明确地编写代码来制作副本。html不是动态的,但数据是动态的。我目前正在用一个脚本标记将其嵌入html中,因此我目前确实可以从我的所有小部件全局访问数据集。所以,每次我将数据分配给我的一个小部件中的一个变量时,它都不会在内存中复制?我不完全确定JS是如何处理这样的事情的。另外,谢谢你的帮助。不,简单地传递一个对象的引用肯定不会复制。实际上,您必须明确地编写代码才能复制。