TA就是,HTML诠释器
从WebKit内核的HTML诠释器的角度来看HTML。相识HTML文档是怎样从字撙节,一步步到DOM树的。明白这个历程,许多前端开辟时一孔之见的题目都可以很好地明白了。
总览诠释历程
起首HTML诠释器接受到的是字撙节(Bytes),经由解码以后是字符流(Characters),然后经由过程词法剖析器切成词语(Tokens),以后经由语法剖析器构建成节点(Node),末了这些节点被组建成一棵DOM树(Document Object Model Tree)。
险些一切的言语都有相似的一个“编译”历程,我们可以不关心每一个流程中详细代码的细节,但每一个历程发生了什么照样要相识的。
从字撙节(Bytes)到字符流(Characters)
运用林林总总的编辑器编写HTML文档时,运用的编码花样是不一样的,如UTF-8,GBK等。这些编辑器的保留实际上就是把字符流运用编码花样保留成字撙节文件的历程。而这些运用的编码花样之所以要在HTML文档内部说明,就是为了浏览器的HTML诠释器可以正确地举行解码。
解码这一步骤就发生在,从字撙节(Bytes)到字符流(Characters)这一历程当中。
假如诠释器在HTML网页中找到了设置的编码花样,WebKit会运用响应的解码器将字撙节转换成特定花样的字符串。假如没有,则会运用默许的(UTF-8)来解码。
所以,您晓得怎样处置惩罚网页乱码题目了吧,在收集爬虫中,常常触及网页乱码题目哦。
从字符流(Characters)到词语(Tokens)
这个历程平常叫词法剖析,在WebKit中运用一个状态机来完成,总之就是输入字符串,输出一个个词语。在自然言语处置惩罚中,也有相似的历程,叫分词。
WebKit定义了6中词语种别,DOCTYPE,StartTag,EndTag,Comment,Character,EndOfFile。
分词以后,WebKit还会做一些平安处置惩罚。
从词语(Tokens)到节点(Node)
Webkit接下来会对平安的词语,更具词语的6种别,离别挪用相似processXXX如许的差别的函数,来将词语处置惩罚成节点。
从节点(Node)到DOM树(Document Object Model Tree)
类比其他言语,会依据词法剖析的效果构建语法树,而HTML则构建的是DOM树。
由于HTML文档的Tag标签是有最先和完毕标记的,相似括号婚配,不难想象可以应用数据结构栈来完成DOM树的构建。有兴致可以去相识下,怎样编程完成盘算恣意的1+3*(5-3)这类表达式……
别的,当我们遗忘誊写一个Tag的完毕标记时,在构建DOM树的历程当中,会应用栈的特征帮我们自动补上。
到此,完成了从字撙节到DOM树的历程,^_^。
固然这里假定只要HTML。
参考书本:《WebKit手艺内情》