1

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

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

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

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

感谢您的(积极)投入!

4

2 回答 2

2

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

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

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

someWidget.doSomething(hugeDataSet);

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

于 2011-04-18T15:33:48.717 回答
-1

您的小部件是否需要每次访问全部 5,000 条记录?还是他们只需要您数据的特定子集?

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

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

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

于 2011-04-18T15:34:02.067 回答