rangy:需要调用detach()吗?

时间:2014-01-30 14:50:42

标签: javascript rangy

我正在使用rangy library并阅读detach的文档:“在不再使用时会破坏范围。”

目前我没有好的方法可以在我的代码中为我detach创建的某些范围调用cloneRange。因为它是一个编辑器,我正在研究这个代码可以被称为负载次。

我是否应该担心内存消耗,因为我没有调用detach或垃圾收集最终会收集未引用的范围?

基本上归结为这个问题:Rangy是否会使用cloneRange保持对已创建范围的引用,以防止垃圾收集正常工作?

1 个答案:

答案 0 :(得分:1)

实际上有两种detach方法:原生范围上的方法(由document.createRange()创建的范围),以及Rangy在其范围对象上公开的方法。

DOM的detach

detach完全存在的原因是它由DOM Level 2强制执行。

现在,按照bug report中的讨论,detach的想法是它应该使浏览器能够释放计算资源。只要使用范围,浏览器就必须跟踪它。根据错误报告中的讨论判断,以下情况似乎是正确的:

  1. 很少有应用程序调用{​​{1}}。

  2. 在Firefox中,它是一个noop。

  3. 此外,WHATWG使其成为noop,因此浏览器很可能迟早会效仿。

    Rangy的Range.detach

    Rangy放在其范围内的detach方法调用DOM的方法并执行一些内部簿记。

    看看Rangy的代码,我看不到任何暗示在Rangy创建的范围内调用detach会阻止垃圾收集问题。

    我想知道Tim Down(Rangy的作者)是怎么想的,我找到了他的帖子here。他似乎已经摆脱了detach。可能需要一段时间才能让Rangy移除它,如果只是向后兼容的话。

    所以我不打扰它。