我想知道我是否需要担心 - 甚至敏感 - 我的 Dart 应用程序的内存管理。
假设我有一个具有 2 个“ View ”/“屏幕”/“页面”的网络应用程序。 View #1 有:
- 50
ButtonElement
- 25
LabelElement
s - 40
InputElements
s
View #2 有:
- 30
ButtonElement
s - 35
LabelElement
s - 60
InputElements
s
现在假设每个 View 上都有按钮,允许用户在每个 View 之间来回切换,一遍又一遍: View 1 --> View 2 --> View 1 --> View 2,等等.
如果用户不断在 View 之间来回切换,我担心不断地重新创建/重新实例化 DOM 元素,并最终占用内存资源。所以我问:
- 这还值得担心吗?如果不是,为什么?
- 如果这是一个问题,可以使用哪些编程技术来缓解它?
- 当我从特定 View 切换时,我可以做些什么来清理/销毁/释放未使用的内存吗?
最佳答案
内存管理应该始终是一个问题,因为您总是希望您的应用程序速度快,而不是占用不应占用的资源。然而,浏览器会自动对任何无法访问的对象(未在 DOM 中引用)执行垃圾收集。这并不意味着您应该完全忽略这个主题,因为仍然有可能造成泄漏。 Here's a nice tutorial关于 JavaScript 中的内存泄漏。
就您而言,最快的选择是将两个 View 保留在一个 HTML 文件中,然后控制以编程方式显示哪个 View 。这样,另一个 View 就在内存中等待并准备好显示。执行此操作的一个简单方法是更改要显示/隐藏的 View 的显示样式。所以你的 View 可以包含在 div 中:
<div id="view1">
//stuff in view #1 (visible)
</div>
<div id="view2" style="display:none">
//stuff in view #2 (hidden initially)
</div>
当您想在 View 之间触发时:
querySelector('#view1').style.display = 'none';
querySelector('#view2').style.display = 'block';
与单独加载每个页面相比,这种方法需要更大的内存占用。但是,它可以避免每次加载 View 时都必须实例化每个元素,并且可以避免每次关闭 View 时运行垃圾收集器。
关于dom - Dart:DOM树的内存管理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20844673/