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报告中的讨论判断,以下内容似乎是正确的:
detach
Rangy在其范围中放置的detach
方法调用DOM的方法并执行一些内部簿记
查看Rangy的代码,我没有发现任何迹象表明对Rangy创建的范围调用detach
可以防止垃圾收集问题
我想知道蒂姆·唐恩(Rangy的作者)是怎么想的,我找到了他写的一篇文章。他似乎是想摆脱detach()
。如果只是为了向后兼容,Rangy删除它可能需要一段时间
所以我不想费心打电话给它。我同意所有这些。一旦我再次着手研究它,我打算在Rangy中反对(但还没有删除)它。在Rangy的第一个版本中,我几乎忽略了这一点,但当时还没有排除让每个Rangy范围观察DOM并在DOM更改时更新自身的想法,这将防止在所有外部引用都消失时对其进行垃圾收集。在这种情况下,分离方法会很有用,因为在JavaScript中无法检测存在多少对对象的引用。事实上,它是无用的。