摘要: 本文作者:hfliu文章来源:携程UED解析结束后的动作在这一阶段浏览器会把文档标记为交互模式,并开始解析deferred模式的script。"deferred"意味着脚本应该在文档解析完成后执行。脚本处理完成后将进入"complete"状态,"load"事件发生。HTML5规范中包含了完整的算法:http://www.w3.org/TR/html5/syntax.html#html-parser浏览器的容错你永远不会看到HTML页面语法错误。浏览器会修正错误并继续。看看下面的例子:<html><mytag>m 阅读全文
posted @ 2013-01-16 14:49 碎念的风 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 本文作者:hfliu文章来源:携程UED解析算法如我们前面看到的,HTML无法使用自上而下或自下而上的解析器来解析。理由如下:语言的宽容特点浏览器需要对无效HTML提供容错性的事实。解析过程的反复。通常解析过程中源码不会变化。但在HTML中,script标签包含"document.write"时可以添加内容,即解析过程实际上还会改变源码。浏览器创建了自己的解析器来解析HTML文档。HTML5规范里对解析算法有具体的说明,解析由两部分组成:分词与构建树。分词属于词法分析部分,它把输入解析成符号序列。在HTML中符号就是开始标签,结束标签,属性名称和属生值。分词器识别这些符号并 阅读全文
posted @ 2013-01-16 14:47 碎念的风 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 本文作者:hfliu文章来源:携程UED解析示例在图5中我们构建了一个数学表达式解析树。让我们来试着定义一个简单的数学语言并看看解析是如何进行的。词汇:我们的语言可以包含整数,加号和减号。句法:句法块由表达式,术语及操作符组成。我们的语言可以包含任意数量表达式。表达式定义为术语紧跟着操作符,再跟另外一个术语。操作符是加号或减号。术语可以是整数或表达式。让我们分析输入"2 + 3 – 1″。第一个符合规则的子字符串是"2″,根据规则#5它是一个术语。第二个匹配是"2 + 3″,符合第二条规则——一个术语紧跟一个操作符再跟另外一个术语。下一个匹配出现在输入结束时。&q 阅读全文
posted @ 2013-01-16 14:47 碎念的风 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 本文作者:hfliu文章来源:携程UED渲染引擎渲染引擎的职责是……渲染,也就是把请求的内容显示到浏览器屏幕上。默认情况下渲染引擎可以显示HTML,XML文档以及图片。 通过插件(浏览器扩展)它可以显示其它类型文档。比如使用PDF viewer插件显示PDF文件。我们会在一个专门的章节讨论插件与扩展。在这一节我们将专注渲染引擎的主要用途——显示用CSS格式化的HTML与图片。各种渲染引擎我们提到的Firefox, Safari两种浏览器构建于两种渲染引擎之上:Firefox使用Gecko —— Mozilla自家的渲染引擎;Safari 和 Chrome 都使用 Webkit。Webkit 是 阅读全文
posted @ 2013-01-16 14:40 碎念的风 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 本文作者:hfliu文章来源:携程UED译注:前两天看到一篇不错的英文文章,叫做How browsers work,该文概要的介绍了浏览器从头到尾的工作机制,包括HTML等的解析,DOM树的生成,节点与CSS的渲染等等,对于想学习浏览器源码的同学来说,实在是很棒的一篇科普文章。尽管对于每部分,该文的描述并不足够深入,但综合来讲,即使没兴趣学浏览器源码,也还是有一些值的学习的思想在里面的,可以权当开拓下视野,有益无害。于是,我想分节挑重点翻译一下与大家分享。以下为译文:我们要讨论的浏览器当今主流浏览器有五类: Internet Explorer, Firefox, Safari, Chrome 阅读全文
posted @ 2013-01-16 11:12 碎念的风 阅读(168) 评论(0) 推荐(0) 编辑