String JS DOM元素’;内容字符串属性:当前引擎中的内存管理和计算
在DOM中,和类型具有许多动态属性,例如,String JS DOM元素’;内容字符串属性:当前引擎中的内存管理和计算,string,performance,dom,memory-management,browser,String,Performance,Dom,Memory Management,Browser,在DOM中,和类型具有许多动态属性,例如,Node.textContent和Element.innerHTML,它们返回节点内容的字符串表示形式 DOM规范仅说明这些方法只是“返回”DOMStrings,即strings。当然,它们并没有指定何时以及如何分配和计算这些字符串。对于文本节点,实现显然可以直接返回其纯文本字符串内容。但是Elements必须创建包含任何子元素的标记和内容的新字符串 据我所知,一个实现可能会为这些字符串分配内存,并在四个点计算它们的值: 当第一次创建元素时,立即 在元素
Node.textContent
和Element.innerHTML
,它们返回节点内容的字符串表示形式
DOM规范仅说明这些方法只是“返回”DOMStrings
,即string
s。当然,它们并没有指定何时以及如何分配和计算这些字符串。对于文本节点,实现显然可以直接返回其纯文本字符串内容。但是Element
s必须创建包含任何子元素的标记和内容的新字符串
据我所知,一个实现可能会为这些字符串分配内存,并在四个点计算它们的值:
元素时,立即李>
在元素
创建之后的某个时间延迟安排李>
在从元素
获取字符串属性时,根据需要延迟执行李>
或者,在第一次使用字符串时,根据需要(即,返回的字符串使用特殊的、外部不可区分的实现,该实现由元素
的字符串属性立即返回,但在需要时动态生成其值)
这些方法还将确定何时释放字符串的内存。前两种技术本质上是将字符串缓存在元素
对象中,它们从元素
创建对字符串的引用,并且在元素
被释放之前,字符串不会被释放。第三和第四种技术可以但不需要从元素创建这样的引用;只要释放了元素
的其他引用,字符串的内存可能早在该元素
被释放之前就被释放。此外,一个实现可能基于某种启发式使用两种、三种或所有这些可能性
现代浏览器引擎使用哪些技术?对于任何类型的DOM操作和文本检索,这个问题在计算时间和内存分配方面都有明显的性能影响。但据我所知,这些属性的性能特征未知或没有文档记录。这类事情通常是由而不是由来完成的,因此我不确定JavaScript标记是否值得使用。@MikeMcCaughan我能找到的最好的另一个标记是#browser,我很难在它和#JavaScript之间做出选择。我选择了前者,因为现在的DOM当然意味着JavaScript,#浏览器作为一个主题比#JavaScript更广泛,我想让跟踪#JavaScript的人知道这个问题。但如果你有更好的选择,我可以用它来替换javascript。