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

create new object? or reuse existing one?

本文关键字:或者 新对象 对象 创建      更新时间:2023-09-26

当您需要删除数据并放入新数据时,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)。

提前感谢:)

好吧,尽可能直接地回答问题:

释放内存实际上不是Dojo的职责;这取决于Dojo所基于的JavaScript。

要释放JavaScript中的内存,只需删除对数据的任何引用,JavaScript就会自行清除垃圾。。。因此,释放您制作的对象的正确方法很简单:

grid = null;

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

至于擦除和重写数据的"良好实践"。。。我一般都是不可知论者。

你可以删除旧的,然后创建一个新的。。。或者简单地覆盖这个。。。即使在一个相对较大的应用程序中,我也不相信您会看到任何一种方式都会带来很大的性能提升。

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

在这种情况下,丑陋的优化将无法真正提高性能,并且会耗费开发和故障排除方面的时间和精力。

老实说,我通常会先选择可读性最强的解决方案,然后再进行优化(只有在必要时)。

我经常发现,简化和清理代码可以神奇地消除性能瓶颈,这一切都靠它自己。