Javascript 剔除可观察数组在更新后增加内存

Javascript 剔除可观察数组在更新后增加内存,javascript,knockout.js,knockout-mapping-plugin,knockout-mvc,Javascript,Knockout.js,Knockout Mapping Plugin,Knockout Mvc,我在敲除中更新可观察数组时出现内存问题。每次我运行更新脚本时,内存似乎都会像这样增加 我觉得我可能更新的方式不对。我必须每分钟从服务器上获取信息,以使列表保持最新。我是这样做的: var Update = function () { setTimeout(function () { ko.mapping.fromJS(data.Students, vm.students) Update(); }, 5000)} 但是,就像我说的,每次我抓取信息时,内存都会增加,然后

我在敲除中更新可观察数组时出现内存问题。每次我运行更新脚本时,内存似乎都会像这样增加

我觉得我可能更新的方式不对。我必须每分钟从服务器上获取信息,以使列表保持最新。我是这样做的:

 var Update = function () {
 setTimeout(function () {
     ko.mapping.fromJS(data.Students, vm.students)
     Update();
 }, 5000)}
但是,就像我说的,每次我抓取信息时,内存都会增加,然后它最终会使网站崩溃。我使用的数组大约是110-120个对象。下面是一个展示我正在做的事情的小例子。我已经读到,对于更大的数据集,远离映射插件可能是一个更好的主意,这是我应该做的吗?似乎小数据集也会发生这种情况。如有任何建议,将不胜感激

通过让Update()调用自身,您可能保留了一些作用域。你为什么不使用setInterval

var interval = setInterval(function () {
        ko.mapping.fromJS(data.Students, vm.students)
    }, 5000)}
// eventually, when you're done
clearInterval(interval)

是否也在外部调用更新?无论如何,请在每次更新调用后查看vm的保留大小。是的,绑定后立即调用更新,但这只是为了每分钟启动超时进程。我如何查看每次更新后的保留大小?在Chrome中的内存快照下,您可以按对象类型(按构造函数)查找。这将显示此类对象的保留大小和数量-这是GC不允许释放的内存,因为它是可访问的。应该可以用它来判断问题是否是由每次vm对象图增长引起的。我不知道,但让我们看看:1)增加的内存是否会导致浏览器使用过多内存,还是“最终”被限制?以小得多的间隔运行可能会显示出限制行为。2) 是否存在一些HTML来维护与VM中已被“替换”的旧可观察对象的绑定?(与此同时:内存配置文件中的哪些对象保持创建更多实例?也可以使用内存分配配置文件,它允许“时间选择”。)