红皮书原文无论如何包含代码,只要不存在defer和async属性,浏览器都会按照<script">元素在页面中出现的先后顺序对它们依次进行解析。换句话说,在第一个<script>元素包含的代码解析完成后,第二个<script>包含的代码才会被解析,然后才是第三个、第四个……这里的解析是指运行,还是啥。而且,不论是内嵌还是外部引用,都会进入阻塞执行的状态?换句话说,在解析出第一个<script>元素中的脚本内容时(不管它是内嵌还是外部js文件),在执行这些js代码时,浏览器无法再解析或执行其他的页面内容和JS代码?这是我的理解,不知是否正确。其实这个问题涉及到一些术语的理解问题。什么下载、加载、解析、运行、渲染,这些词在不同的资料中常常混用,所以经常让人不能理解。
1 回答
慕无忌1623718
TA贡献1744条经验 获得超4个赞
1:script element
2:浏览器在解析html时,自顶而下的往下一步步解析HTML并生产DOM,在解析过程中,遇到内敛js则暂停解析,等js解析引擎解析完成后再往下解析,遇到具有src属性的时候则一句1所描述的方式去处理。
书中所描述的解析
其实包括了执行
的概念;
js引擎其实可以粗略的分为解析器
和执行器
,解析器
是对语法词法进行分解,构造出 抽象语法树[AST]
,执行器则是根据AST来执行相对应的操作。(只是通俗易懂的这么解释,实际情况应该差不多)。
什么下载、加载、解析、运行、渲染:
下载:从远程服务器上获取编码字符,(比如:将a.js从源服务器上下载到本地)
加载:将字符载入容器,(比如:将a.js载入到js引擎)
解析:将输入的内容解析成想对容器可读的内容;(比如:a.js 被解析成了一个 AST)
执行:将输入AST根据设定执行并产出输出结果。
渲染:将输入的变成图像呈现在显示器中。
实际的设计非常复杂,一般是浏览器开发人员比较关注这些内容。
涉及知识点包括(但不限于): http,tcp,数据结构,编译原理,操作系统。
添加回答
举报
0/150
提交
取消