【问题标题】:How does DOM API affect HTML parsing?DOM API 如何影响 HTML 解析?
【发布时间】:2016-09-10 08:59:09
【问题描述】:

在阅读 DOM 树是如何创建 HTML5 spec: 8.2.1 Overview of the parsing model 的过程中,我想到了一个问题,但我找不到答案。

根据规范,使用document.write 是不好的,除了其他问题外,它会暂停解析并将新字符提供到标记器输入中。

问题是当一个人使用 DOM API 时会是什么样子,例如。 appendChild。什么时候执行?

据我了解,这将添加已创建的Node,因此不需要解析和标记化。但是,新节点是立即附加还是在构建“第一/原始”DOM 树之后附加?

【问题讨论】:

    标签: html dom web-performance


    【解决方案1】:

    它会立即发生在 DOM 中,无论它当时处于什么状态。 DOM 文档始终形成一致的树,因此始终可以安全地添加。

    在这方面附加元素一直是无害的,但是在解析过程中从 DOM 文档中删除元素曾经是使旧版 IE 崩溃的好方法。事实上,这个问题在某种程度上一直持续到 IE 在 IE10 中实现 HTML5 解析算法。

    【讨论】:

    • 谢谢,能否提供源链接?
    • 不,但它很容易测试。例如,将此脚本放在源代码<script>console.log(document.getElementsByTagName("*").length); document.head.appendChild(document.createElement("meta")); console.log(document.getElementsByTagName("*").length);</script> 的中间,您会看到 DOM 文档中的元素数量增加了 1,随后解析的标记进一步增加了元素数量。
    • 公平点。只是想知道如果脚本是异步的怎么办。但是,由于 HTML 解析在 JS 执行期间暂停,因此可以预期更改将立即反映。
    • 确实如此。脚本是异步的还是延迟的,并不重要。也就是说,当脚本执行并调用 appendChild 时,DOM 将立即更新。 async 和 defer 属性的变化是脚本作为一个整体执行的时间。
    猜你喜欢
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 2013-02-15
    • 1970-01-01
    • 2014-11-22
    • 2016-10-25
    相关资源
    最近更新 更多