浏览器渲染过程

2020-03-18  本文已影响0人  昫嵐

一、进程与线程

进程 是cpu资源分配的最小单位(是能拥有资源和独立运行的最小单位)
线程 是cpu调度的最小单位(线程是建立在进程的基础上的一次程序运行单位,一个进程中可以有多个线程)

打个比方:

二、浏览器是多进程的

浏览器都包含哪些进程?

不同进程之间也可以通信
例如在浏览器的地址栏中输入url,首先就会触发进程之间的通信:

引用参考文献的图

三、浏览器的一个进程中是有多线程合作的(以浏览器内核为例)

Renderer进程中有哪些线程?

为什么JS是单线程的?大概是因为避免多个线程同时操作DOM树而导致渲染混乱......

浏览器内核中线程之间的关系

WebWorker与SharedWorker

四、页面渲染流程

附张MDN上的渲染流程图


渲染分几个步骤
  1. 解析html建立dom树
  2. 解析css构建render树(将CSS代码解析成树形的数据结构,然后结合DOM合并成render树)
  3. 布局render树(Layout/reflow),负责各元素尺寸、位置的计算
  4. 绘制render树(paint),绘制页面像素信息
  5. 浏览器会将各层的信息发送给GPU,GPU会将各层合成(composite),显示在屏幕上。
    更具体的流程图,来源见参考文献:


DOMContentLoaded和load事件的区别

css和js对页面加载的阻塞情况

为了获得最佳的页面展示效果,通常有这几种优化方式

普通图层和复合图层

开启复合图层的方法

absolute、fixed 与 float 的区别

absolute(fixed) 与硬件加速的区别

复合图层与index
一般一个元素开启硬件加速后会变成复合图层,可以独立于普通文档流中,改动后可以避免整个页面重绘,提升性能,复合图层过多,反而会使资源过度消耗,页面更卡。为了避免开启过多的复合图层,要注意index的使用,如果a是一个复合图层,而且b在a上面,那么b也会被隐式转为一个复合图层,所以尽量使复合图层位于默认图层的上方,结合index可以有效的避免这个问题。

五、如果浏览器遇上解析不了的css怎么办?

如果遇上属性错误或者值错误,或者选择器解析不了,又或者属性比较新、浏览器不能兼容这个属性,则浏览器将忽略它并继续进行下一个声明。

为了在不同的浏览器及其版本下更好地展示界面,浏览器会有优雅降级和渐进增强两种方案。

div{
  -webkit-transition: all .5s;
     -moz-transition: all .5s;
       -o-transition: all .5s;
          transition: all .5s;
}
div{
          transition: all .5s;
       -o-transition: all .5s;
     -moz-transition: all .5s;
  -webkit-transition: all .5s;
}
参考文献

https://segmentfault.com/a/1190000012925872#item-5-6
https://developer.mozilla.org/en-US/docs/Learn/CSS/First_steps/How_CSS_works

上一篇 下一篇

猜你喜欢

热点阅读