首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

走进浏览器内部—剖析浏览器是如何工作的(上)

最近工作需要一直在和浏览器打交道。每天都为如何解决那些浏览器间的兼容性而困扰。时间长了自然而然对浏览器也产生了感情。准备学习学习,自己写个浏览器。为此开始学习了 Rust,一门用于写底层,但看上去又像高级语言的语言。希望 Rust 能有美好的明天,我也跟着受益。

想了想,要写浏览器,首先应该了解一下浏览器内部机制。今天先放下代码,带大家一起走进浏览器,看看浏览器是如何将网页呈现给您的。

绑定:使用系统级别的 API,将内存中位图绘制到指定窗口(标签对应的网页视图)上。

渲染:解析 html 和 css 生成渲染树,将合并后,将渲染树绘制到屏幕上呈现给用户。

平台:兼容(适配)到不同的操作系统

javascript VM :以后单讲,准备写个demo

首先将 HTML 和 CSS 解析为一定的数据结构(渲染对象),然后再将渲染对象按一定规则(就是将 style 树 合并到 dom 树上)形成渲染树,接下来对生成渲染树各个节点进行布局(也就是按 dom 节点的位置信息进行排版),最后读取渲染树,绘制成图片放到屏幕上。

HTML 的解析

首先浏览器是以超强纠错形式来解析 html,即便 html 有错误,浏览器也相对智能地将 html 进行解析,所以说对 html 的解析不是一般简单解析工作,html 解析要相对复杂。在解析过程是可以被 js 或其他原因所中断的。例如网络不畅通,link 和 style 标签加载,相对高级的浏览器为提高效率,提供一定进程进行预解析,也可以加载图这样耗时的工作可以另一个进程中完成

Parser 和 Tokenizer 其实只是把无意义的字符流变得有某种意义而已。Parse 这个词其实可以用在很多的地方,比如说只要你能在一个字符流中标识出所有的字符 a,你就在做 Tokenize 和 Parse。你可以看得出,Parse 和 Tokenize 有多难实际是针对编程的人的目的来说的。

一般解析完了这种形式

html

|-----head

-----body

|--- p. wat

| #text

---- div

---- span

---- #text

HTMLHtmlElement

|-----HTMLHeadElement

-----HTMLBodyElement

|--- HTMLParagraphElement

| ----Text

---- HTMLDivElement

---- HTMLSpanElement

---- Text

下面例子只为说明浏览器解析 html 时的纠错能力,html 中错误显而易见,我就不一一指出了。

javascript 是可以介入 html 解析过程中,如下图。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180329G1PJ0M00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券