如何理解术语"非阻塞"规范中的脚本标记?

时间:2017-02-07 14:43:04

标签: javascript google-chrome chromium specifications w3c

spec

  

第三个是一个标志,表明该元素是否会"非阻塞"。最初,脚本元素必须设置此标志。 HTML解析器和它们插入的脚本元素上的XML解析器没有设置它。另外,每当一个脚本元素的"非阻塞"标志设置添加了异步内容属性,元素的"非阻塞"标志必须是未设置的。

抱歉,我无法理解这意味着什么。有一些问题:

1

  

第三个是一个标志,表明该元素是否会"非阻塞"。最初,脚本元素必须设置此标志

"首先"表示HTMLScriptElement class中有一个名为non-blocking且默认为true的属性,或者在HTML解析器分析之前创建或实例化脚本元素时它意味着它是true

2

  

HTML解析器和它们插入的脚本元素上的XML解析器没有设置。

"插入"表示脚本元素是使用document.write还是insert操作插入文档的?

3

  

另外,每当一个脚本元素的"非阻塞"标志设置添加了异步内容属性,元素的"非阻塞"标志必须是未设置的。

async的{​​{1}}链接,但有一个单词&#34; content&#34;,它究竟意味着什么?从服务器或本地获取的属性或内容?< / p>

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

4.最重要的是,&#34;非阻塞&#34;就像我们通常谈论的那样意味着没有阻止IO,获取资源,更新布局,重新绘制等等?或者还有其他意义?规范说&#34;最初,脚本元素必须设置此标志&#34;但是我们认为script是&#34;阻止&#34;(确切地说是在执行时),所以当我第一次阅读这篇文章时我很怀疑。现在可以有人澄清我的怀疑吗?

5.最后,是否有任何实现(我的意思是src代码可以方便地调试)规范?我认为基于chrome更好,对不起,我不是说别人不好,只是因为我只安装chrome。

1 个答案:

答案 0 :(得分:1)

  1. 我没有遵循这个区别。这些实现选择了哪些功能差异?

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

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

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

  5. Chrome(闪烁)和Firefox(壁虎)都是开源的,但我个人并没有尝试过任何细节检查任何代码库,所以不能告诉它们有多困难。无论如何,这可能是个人偏好。