gpt4 book ai didi

javascript - 如何理解spec中script标签的术语 "non-blocking"?

转载 作者:太空宇宙 更新时间:2023-11-04 16:03:27 27 4
gpt4 key购买 nike

spec :

The third is a flag indicating whether the element will "non-blocking". Initially, script elements must have this flag set. It is unset by the HTML parser and the XML parser on script elements they insert. In addition, whenever a script element whose "non-blocking" flag is set has an async content attribute added, the element’s "non-blocking" flag must be unset.

抱歉,我不明白这是什么意思。有一些问题:

1.

The third is a flag indicating whether the element will "non-blocking". Initially, script elements must have this flag set

“最初”表示 HTMLScriptElement 类 中有一个名为 non-blocking 的属性,默认值为 true 或者表示它是 true 当脚本元素在 HTML 解析器解析之前创建或实例化时?

2.

It is unset by the HTML parser and the XML parser on script elements they insert.

“插入”表示使用document.writeinsert将脚本元素插入到文档中。操作?

3.

In addition, whenever a script element whose "non-blocking" flag is set has an async content attribute added, the element’s "non-blocking" flag must be unset.

async 链接到 async attribute ,但是有一个“内容”这个词,那么它到底是什么意思?从服务器或本地获取的属性或内容?

如果它意味着内容,是否代表HTML解析器将在添加异步内容之前继续解析脚本元素的后续字节?(我写了一些测试,我认为这是错误的)

4.最重要的是,“非阻塞”是否意味着不阻塞 IO、获取资源、更新布局、重绘等,就像我们通常谈论的那样?还是有其他含义?规范中说“最初,脚本元素必须设置此标志”,但我们经常认为 script 是“阻塞”(恰好在执行时),所以当我第一次读到此内容时我很怀疑,所以现在。有人可以澄清吗我的疑问?

5.最后,规范有没有实现(准确的说是可以方便调试的src代码)?我觉得基于chrome比较好,抱歉,我不是说别人不好,只是因为我仅安装 Chrome。

最佳答案

  1. 我不明白其中的区别。选择哪一个实现会产生什么功能差异?

  2. 插入操作。 document.write不插入到文档中。它将字符注入(inject)到解析器处理的输入字节流中。

  3. 在 HTML5 规范中,有两种类型的“属性”。 “内容属性”和“IDL 属性”。 “内容属性”是您在标记中放置的内容:<script async>是异步内容属性。 “IDL 属性”是大多数人认为的 JavaScript 中的属性 myScriptElement.async .

  4. 这意味着不阻塞解析器线程。解析器从输入流中获取字符并创建元素、文本节点对象等。当解析器被阻塞时,它会停止消耗输入流中的字符。 (尽管它可能会在输入流中提前猜测是否会被要求获取其他资源,并推测性地获取它们)。当 </script>标签可见,如果未设置非阻塞标志,则解析器将不会消耗当前输入流中的任何其他字符,直到获取并运行脚本为止。这允许脚本包含 document.write将字符注入(inject)到输入流中,以便接下来解析它们。

  5. Chrome (blink) 和 Firefox (gecko) 都是开源的,但就我个人而言,我没有尝试过详细检查任何一个代码库,因此无法建议它们有多困难。无论如何,这可能完全是个人喜好。

关于javascript - 如何理解spec中script标签的术语 "non-blocking"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42092688/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com