【发布时间】:2012-12-15 22:05:39
【问题描述】:
我有一个 Web 应用程序,它调用一个 Web 服务,该服务返回一些表示对象数组的 JSON。每个对象都有一些字段。下面是一些示例 JSON 来给出一个想法:
{
"data": [
{
"id": "12345",
"from": {
"name": "John Doe",
"id": "6789"
},
"start_time": "2012-12-16T02:17:20+0000",
"end_time": "2012-12-16T02:17:20+0000",
"publish_time": "2012-12-16T02:17:20+0000"
}
},
{
"id": "8888",
"from": {
"name": "Jane Smith",
"id": "011"
},
"start_time": "2012-12-16T02:17:20+0000",
"end_time": "2012-12-17T02:17:20+0000",
"publish_time": "2012-12-16T02:17:20+0000"
}
}
]
}
一旦返回,我使用 jQuery 的 parseJSON() 方法将其膨胀为对象数组(保留“数据”值)。这一切都很好,但是在我拥有我的数组之后,我有几个函数可以在每个数组插槽上运行。例如,假设有一个名为 GetDuration() 的函数将打印出 end_time 和 start_time 之间的时间间隔。无论如何,我定义了几个函数(可能是 15 个),此时,我只需遍历整个数组并使用函数的副本对每个对象进行膨胀。示例
for (var i=0;i<data.length;i++)
data[i].TimeLapse = function() { ... };
我认为这可以提高效率。现在,我认为每个数组项都有一个相同函数的单独副本,这不是必需的。我还注意到处理时间的滞后,我希望可以减少。我读过关于 javascript 闭包的文章,在这种情况下它们似乎可以帮助我,但我没有太多在闭包中编写函数的经验。我会设置闭包然后修改 JSON 以某种方式膨胀到闭包类型的对象吗?还是我会像今天一样膨胀到常规的 javascript 对象,然后以某种方式通过并更改对象类型以指向我创建的闭包?
任何想法或建议将不胜感激。
谢谢...
-本
【问题讨论】:
-
您能否发布一个更完整的示例来说明您如何使用这些功能?他们如何传递数据,返回什么?如果我们看不到您目前的工作方式,很难给出建议。更少的 JSON,更多的代码。
-
正如@AlexWayne 所说,我们真的不能给出任何建议,这真的取决于你想要做什么和完成什么。但是,如果您已经设置了功能,我会将其设置为通用功能,然后执行
data[i].TimeLapse = GetDuration(data[i].start_time,data[i].end_time);之类的操作 -
闭包只有在它们“保持与定义它们的环境的绑定”时才有帮助。我没有立即看到这会有什么帮助。正如亚历克斯韦恩所说,一个完整的(最小的)例子会有所帮助。
标签: javascript json performance closures memory-efficient