最近研究css性能优化,明白了浏览器读取css选择器的顺序是从右到左。可是为何呢?这就涉及到了浏览器渲染页面的顺序,而关于浏览器的渲染,咱们首页要了解浏览器的架构
浏览器构架图
如上图所示,浏览器主要由 用户界面(User Interface), 浏览器引擎(Browser engine), 渲染引擎(Rendering engine), 网络模块(Networking),js解析器(Javascript Interpreter),用户界面后台(UI Backend)和数据持久层(Data persistence) 等几部分组成。其中各模块除了Browser engine是用来协调Render engine和UI层(也许还有别的层)的,UI Backend是用来绘制页面上的各个组件的,其它模块的用途都见名知义,因此也就很少说了。
OK,进入正题。从用户在地址栏中输入地址并按下回车,到他看到整个页面的过程大体以下:
1.用户在浏览器地址栏输入地址,按下回车;
2. 浏览器向服务器发送请求,服务器响应请求并返回数据;(这其中的DNS解析,路由解析,服务器mvc请求分发,链接数据库等一系列操做略过)
3.浏览器接收服务器传回的html代码,经过词法解析和语法解析生成dom树,生成dom树期间,解析到link标签则去下载相应的css文件,待全部外部css文件下载完成后,结合页面中的style标签和标签行内style样式,生成render树. render树包含了每一个dom节点的样式信息(位置,大小,字体,背景等)。
4.结合dom树和render树绘制页面,以下图所示:

渲染引擎基本工做流程