【问题标题】:Is it beneficial to hide elements not in use? [closed]隐藏不使用的元素是否有益? [关闭]
【发布时间】:2013-09-05 19:24:42
【问题描述】:

我来自计算机科学背景,我最熟悉的语言是 Java、C# 和 C++。在这些语言中,您的记忆足迹始终在您的脑海中,我被教导要销毁未使用的对象。

我最近获得了网络开发人员的实习机会。我正在跟上各种实践的步伐,并做一些我有一段时间没有做过的网页设计,至少做得不好。在我的一个网站中,我有几张图像出现在屏幕上,然后移出视口就再也看不到了。

.hide() 有问题的元素是否有益?它会减少足够的内存占用以使其值得吗?它会完全减少足迹吗?一位同事说这不值得,因为在页面加载时会受到打击,但他并不完全确定。

【问题讨论】:

  • 隐藏元素不会将其从 DOM 中移除。
  • 正如 Pointy 所指出的,隐藏元素并不会将其从 DOM 中移除,因此没有成功,但屏幕外元素可能会影响滚动性能。
  • 那么它确实有一些的好处吗?有什么方法可以从 DOM 中删除元素?
  • Would it reduce the memory footprint enough to make it worth it? 这确实因情况而异。
  • 通过display: none 隐藏确实提高了渲染性能,因为这些元素已从布局/重排中删除。 visibility:hidden 仍然会影响布局/回流,但不会影响绘制。

标签: javascript jquery html


【解决方案1】:

如 cmets 中所述,隐藏元素仍将其保留在 DOM(文档对象模型)中。就个人而言,如果我有一些东西从屏幕上移出然后不需要,我会使用 jQuery .remove() 方法将它从 DOM 中物理删除。它可能会对性能产生影响,具体取决于图像的大小和发生这种情况的图像数量。

就像我说过的,我希望我的 DOM 干净整洁,没有任何不必要的混乱,所以我会删除它们,但这只是我自己。

编辑: 再仔细研究一下,似乎从 DOM 中删除元素并不会释放与其关联的内存 (source)。似乎它依赖于释放内存时的 DOM 实现(source)。物理重用节点似乎是最有效的方法。

【讨论】:

  • 从 DOM 中删除元素不会像释放对象那样直接释放内存,但它允许 JavaScript 引擎的 GC 在下一次传递时释放内存(除非您在引用中留下了删除的节点,在这种情况下你有泄漏)。
  • 是的,这就是我所说的,正如你所提到的,GC 可能会释放内存,但不能保证。这将取决于实施。
【解决方案2】:

@Pointy 给出了正确答案(作为评论)。不 - 它几乎没有隐藏它,因为它仍在内存中,因为元素(及其所有子元素)仍在 DOM 中。它可能会使在可滚动/可转换区域中的绘制速度更快(但可能不会),但它肯定不会仅仅通过隐藏它来减少应用程序的内存消耗。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-08
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    相关资源
    最近更新 更多