创建新对象?或重用现有的?

时间:2013-08-23 01:56:58

标签: javascript object dojo

当您需要清除数据并放入新数据时,JavaScript中的良好做法或“正确”做法是什么?

我使用Dojo的Memory和dGrid来显示我的数据。每次用户点击“刷新”按钮时,都会检索数据。

在应用程序的生命周期内,不会多次调用刷新按钮。 我有以下网格代码

data = {some JSON data};
store = new Memory({data: data});

grid = new OnDemandGrid({
    selectionMode: 'single',
    store: store
});

并且上面的代码当前在初始化应用程序的方法中运行。

我还有一个名为'showGrid'的方法,它将决定网格的布局。

然后当应用程序收到带有新数据的消息时,商店会更新。

我担心的是,Memory没有消除数据的方法。所以我必须遍历商店并推送新数据。也许如果我不重用商店而只是创建新商店,它会更容易或更快。

那么我为什么不在'showGrid'方法中创建商店并让它在每次用户点击刷新时创建商店?速度或内存不是应用程序中的一个大问题,因为数据不是那么大。

但是我想用“正确的方法”来实现这一点,因为我学会了创建新对象,因为它可重用在我的大学时代很重要(尽管它是Java类而不是JavaScript)。

提前致谢:)

1 个答案:

答案 0 :(得分:1)

嗯,尽可能直接回答问题:

Dojo真的不能释放记忆;这取决于Dojo构建的JavaScript。

要在JavaScript中释放内存,您只需删除对数据的任何引用,JavaScript将自行清除垃圾...所以正确的方法来释放您所做的对象只是:

grid = null;

这应该清除此引用和对相同数据的任何其他引用。

关于擦除和重写数据的“良好实践”......我通常不可知。

您可以删除旧版本,然后创建一个新版本...或者只是覆盖这个...即使在相对较大的应用程序中,我也不相信您会看到很多性能损失或获得任何方式。

例外情况是,如果你有足够大的数据网格来占用大块内存,并尝试在删除旧内存之前创建一个新内存。但这是一个延伸。

在这种情况下,丑陋的优化无法将性能提升到任何真实程度,并且会使您在开发和故障排除方面花费时间和精力。

老实说,我通常首先寻求最易读的解决方案,然后在未来进行优化(仅在必要时)。

我经常发现简化和清理代码会神奇地消除性能瓶颈,而这些都是它自己的。