为什么要构架DOM树?
因为浏览器无法直接理解和使用HTML,所以要转成DOM树,浏览器才能使用。
HTML解析器:接收到HTML字节流时,首先要经过渲染引擎的HTML解析器,将HTML字节流转换成DOM树结构。
一、将接收的字节流根据文件的指定编码,转换成HTML元素
渲染引擎刚开始接收到的时一堆字节流,如下:
3C 62 6F ...
需要将上面字节流转成这样:
<html>
<body>
<div>
koala
<p>
程序员成长指北
</P>
</div>
</body>
</html>
二、分词器将转化后的数据转换成Token
分词器会将上面转换后的数据转成Token,Token的类别有:Tag Token和文本Token。
三、根据Token生成DOM树
HTML解析会维护一个Token栈。
- HTML解析器在刚开始时,会默认创建一个根节点为document的空DOM结构,并将startTag document的token压入栈中。
- 当遇到文本Token时,会向DOM结构中添加一个文本节点,但不会放入栈中。
- 当遇到一个startTag token,会创建一个响应的dom节点,插入DOM结构中,并且将startTag token压入栈中。
- 当遇到一个endTag token时,HTML解析器会查看栈顶的token,是不是其对应的startTag token,如果是,则弹出,表示该元素已经解析完了。
直到最后document的endTag token出栈,整个文件就算解析完了。