Javascript rangy:detach()需要调用吗?

Javascript rangy:detach()需要调用吗?,javascript,rangy,Javascript,Rangy,我正在使用和阅读文档,用于detach:“在不再使用时销毁范围。” 目前,对于我使用cloneRange创建的某些范围,在我的代码中没有调用detach的好位置。由于它是一个编辑器,我正在编写的代码可以多次调用 我应该担心内存消耗,因为我没有调用detach,还是垃圾收集最终会收集未引用的范围 基本上,这归结为一个问题:Rangy是否会使用cloneRange保留对已创建范围的引用,以防止垃圾收集正常工作 实际上有两种detach方法:本地范围上的方法(那些由document.createRan

我正在使用和阅读文档,用于
detach
:“在不再使用时销毁范围。”

目前,对于我使用
cloneRange
创建的某些范围,在我的代码中没有调用
detach
的好位置。由于它是一个编辑器,我正在编写的代码可以多次调用

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


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

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

DOM的
detach
detach
之所以存在,是因为它是由

现在,根据本文的讨论,
detach
的想法是,它应该使浏览器能够释放计算资源。只要某个范围在使用中,浏览器就必须跟踪它。根据bug报告中的讨论判断,以下内容似乎是正确的:

  • 很少有应用程序调用Range.detach

  • 在Firefox中,它是一个noop

  • 此外,这使得它成为一种趋势,因此浏览器迟早会效仿

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

    查看Rangy的代码,我没有发现任何迹象表明对Rangy创建的范围调用
    detach
    可以防止垃圾收集问题

    我想知道蒂姆·唐恩(Rangy的作者)是怎么想的,我找到了他写的一篇文章。他似乎是想摆脱
    detach()
    。如果只是为了向后兼容,Rangy删除它可能需要一段时间


    所以我不想费心打电话给它。

    我同意所有这些。一旦我再次着手研究它,我打算在Rangy中反对(但还没有删除)它。在Rangy的第一个版本中,我几乎忽略了这一点,但当时还没有排除让每个Rangy范围观察DOM并在DOM更改时更新自身的想法,这将防止在所有外部引用都消失时对其进行垃圾收集。在这种情况下,分离方法会很有用,因为在JavaScript中无法检测存在多少对对象的引用。事实上,它是无用的。