浅谈浏览器渲染

世界上第一款浏览器WorldWideWeb由Berners-Lee李爵士于1990发明。如今二十多年过去,浏览器也经历了迅猛的发展,派生出许多功能。然而其根本作用,还是以页面的形式呈现网络内容。下面本文将简单谈谈浏览器是怎样渲染页面的。

浏览器的组成

目前市面上的浏览器主要有IE,Chrome,Firefox,Safari,Opera及国内的360,UC,搜狗等等。虽功能上各有千秋,但基本组成模块大致不差,主要有如下及部分:

  • 用户界面(User Interface):包含地址栏、前进后退按钮,书签栏等等,用于与用户交互。
  • 浏览器引擎(Browser Engine):用于查询和控制渲染引擎。
  • 渲染引擎(Rendering Engine):用于解析并呈现用户请求的内容。
  • 网络(Networking):用于处理网络调用,比如发起HTTP请求。
  • UI后端(UI Backend):用于绘制浏览器的一些基本组件,其底层使用的是操作系统的用户接口。
  • JavaScript解析器 (JavaScript Interpreter):用于解析并执行JS代码。
  • 数据存储(Data Storage):用于将一些数据如cookie持久地存储在硬盘上。

页面的渲染

浏览器通过网络模块向服务器发出请求,获得返回的响应内容后,渲染引擎开始进行渲染,一般流程如下:
(1)渲染引擎会从上到下解析HTML文档,将文档中的标签转换为DOM节点,并生成DOM树。
(2)解析CSS样式,构建CSSOM树。
(3)执行JavaSrcipt代码,通过DOM API和CSSOM API来操作DOM树和CSSOM树.
(4)组合DOM树和CSSOM树,生成render树。
(5)在render树的基础上进行布局,为每个节点找到它出现在屏幕上的几何坐标。
(6)将每个节点通过UI backend绘制在屏幕上。

页面的解析与呈现

浏览器由上到下来解析HTML文档,但是对于CSS和JS在文档中的位置不同,不同的浏览器在不同场景下可能有不同的处理方式,而导致页面呈现的效果不同。

  • 白屏和FOUC
    白屏,顾名思义,就是屏幕上什么都没有。出现这种现象的原因主要是当把CSS样式放在文档底部,或者是使用@import标签引入一个CSS样式(使用@import引入的 CSS 将在页面加载完毕后被加载),对于某些浏览器在某些场景下(例如IE在新窗口打开和刷新等),会选择先渲染样式,再呈现文档内容,所以在CSS未下载完成,页面样式未渲染完成之前,页面呈现白屏。另外当JS放在文档开头,因为加载JS会禁用并发(即要先加载完成JS文件,后面的文件才会继续加载),所以也可能出现白屏现象。
    FOUC(Flash of Unstyled Content)是指当CSS样式放在文档底部或使用@import,某些浏览器在某些场景下(如IE点击链接,书签进入等),会选择先呈现文档内容,等CSS加载完成后,再渲染样式,这时页面在渲染过程中会出现闪烁现象。
    为减少以上的状况出现,通常会将CSS样式放在文档顶部,而JS放在文档底部,使得页面样式尽早加载完成,及时渲染,而不会发生JS阻塞。
  • async和defer
    async和defer是让JS异步加载与执行的两种方式。当在文档中通过<script src="script.js"></script>引入JS时,如果不用async或defer,浏览器会不等待<script>标签之后的文档载入而先下载并执行script.js。而使用ansyc即<script async src="script.js"></script>,会让加载与渲染文档元素的过程和加载与执行script.js的过程同步进行;使用defer即<script defer src="script.js"></script>,会让加载文档元素的过程和加载script.js的过程同步进行,但是script.js的执行要在所有文档元素解析完成之后,DOMContentLoaded事件触发之前。

小结

本文大致介绍了浏览器页面的渲染步骤和一些影响页面呈现效果的相关因素。我们在实际应用中可以依据这些因素有针对性地进行优化,来达到期望的效果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,728评论 1 92
  • 众所周知,浏览器是世界上用途最广泛的软件了,它们展现着网络资源,但达成这个目标的过程是复杂并且遵循着很多不同的标准...
    Ghj_小树阅读 762评论 0 0
  • 大家都知道万维网的应用层使用了HTTP协议,并且用浏览器作为入口访问网络上的资源。用户在使用浏览器访问一个网站时需...
    SylvanasSun阅读 2,139评论 1 12
  • 本文中浏览器特指Chrome浏览器 开始之前说说几个概念,以及在准备写这篇文章之前对浏览器的渲染机制的了解: DO...
    若邪Y阅读 3,509评论 1 10
  • cherryqin阅读 161评论 0 0