网页内容组成doctype:提供浏览器html版本信息head:htmlheadermeta:元数据信息charset:声明当前文档使用的字符编码http-equiv:客户端行为,如渲染模式,缓存等name[keywords]:搜索引擎关键词name[description]:搜索引擎描述name[viewport]:浏览器视口设置linkscript:body之前需要加载或运行的脚本body:htmlentityscript:required需要的工作从上图可以看出body解析时需要加载或运行脚本渲染。网页内容首先会被html解析器解析成DOM树。其实html是我们首先会通过URL向服务器请求回来的,请求的html是从字节流转换成字符流。我们的浏览器实际拿到的是一个字符流,然后浏览器通过词法分析,逐字扫描输入的字节流,根据构词规则识别单词和符号,分词,生成相应的token,然后将这些token添加到通过nextToken()的dom树。所以html解析就是从上到下解析文档,所以当它第一次遇到html标签的时候,会为html生成一个token,这个token会被标记为startTag的一种,header的花也会被标记asstartTag,但是会自称headerToken,也就是说对于不同类型的html标签格式,在词法分析的过程中,会解析成对应的对象,然后由浏览器,最后令牌类型将附加到dom树。在这个过程中,HTML可能会通过链接引入其他相应的资源,比如CSS资源。这时,浏览器可能会策略性地向服务器请求相关的静态资源。它解析生成css树,与dom树结合生成render树,进一步进行布局,最后绘制。loadingcss加载不会阻塞dom解析,但是会阻塞页面渲染,所以一般把css加载放在header中css会阻塞js的执行,也就是说在css资源加载之前会阻塞js的执行,但是css不会阻塞js脚本的加载js会阻塞页面dom的解析js不会阻塞资源的加载js顺序执行,阻塞后续js逻辑的执行
