dom - Dart:DOM树的内存管理?

标签 dom memory-management dart

我想知道我是否需要担心 - 甚至敏感 - 我的 Dart 应用程序的内存管理。

假设我有一个具有 2 个“ View ”/“屏幕”/“页面”的网络应用程序。 View #1 有:

  • 50 ButtonElement
  • 25 LabelElements
  • 40 InputElementss

View #2 有:

  • 30 ButtonElements
  • 35 LabelElements
  • 60 InputElementss

现在假设每个 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/

相关文章:

javascript - 阻止特定脚本中的特定函数在浏览器内执行

javascript - 在 html javascript 函数中调用 svg javascript 函数

java - 无法调用 StAXOMBuilder() 类中的 protected 方法

c - 在struct中使用__attribute__((aligned())),为什么sizeof的结果是这样?

dart - Flutter NestedScrollView/SliverAppBar - 不需要的底边距

flutter - Dart:访问类同级混合变量

javascript - 如何捕获页面上的所有滚动事件,而不将 onscroll 处理程序附加到每个容器

iphone - Xcode 生成的 Core Data 托管对象,是否需要添加 dealloc 方法来释放变量?

C 内存缓冲区破坏微 Controller 内存分配 - Atmel ATxmega

flutter - `Thur, Aug 23` flutter 的日期格式