浏览器渲染原理
浏览器内核可以分成两部分:渲染引擎(Layout Engine 或者 Rendering Engine)和 JS 引擎。早期渲染引擎和 JS 引擎并没有十分明确的区分,但随着 JS 引擎越来越独立,内核也成了渲染引擎的代称。渲染引擎又包括了 HTML 解释器、CSS 解释器、布局、网络、存储、图形、音视频、图片解码器等等零部件。
目前市面上常见的浏览器内核可以分为这四种:Trident(IE)、Gecko(火狐)、Blink(Chrome、Opera)、Webkit(Safari)。
每个页面的渲染都经过了下面几个阶段:
- 解析 HTML生成DOM树
- 解析 CSS 生成 CSSOM 树,并与 DOM 合并生成 render 树
- 计算所有元素的位置大小
- 绘制图层:把每一个页面图层转换为像素,并对所有的媒体文件进行解码
- 整合图层:浏览器合并各图层,将数据由 CPU 输出给 GPU 最终绘制在屏幕上
什么叫渲染树?
HTML构建的HTML树(DOM)和CSS构建的CSS树(CSSOM)CSSOM合并成的树叫做渲染树(Render Tree)。
如何更新样式
- 一般我们用JS来更新样式
- 比如div.style.background:'red'
- 比如div.style.display:'none'
- 比如div.classlist.add:('red')
- 比如div.remove:()直接删掉节点
-
三种更新方式
第一种relayout、repaint、recompose全走一遍:div.remove:()会触发当前消失,其他元素relayout。
第二种跳过relayout:改变背景颜色直接repaint和recompose。
第三种跳过relayout和repaint:改变transform,只需要recompose。
CSS动画的两种做法(transition 和 animation)
- transition(过渡)
作用:补充中间帧
语法:
- transition:属性名 时长 过渡方式 延迟
transition:left 200ms linear
2.可以用逗号分离两个不同属性
transition:left 200ms ;top 400ms
3. 可以用all代表所有属性all
transition:all200ms
4.过渡方式:linear|ease|ease-in|ease-out|ease-in-out|...
- 注意
- 并不是所有属性都能过渡,display:none=>block没法过渡。
- 过渡必须有起始,如果有中间点,使用两次transform。
- animation
作用:声明关键帧,添加动画
标准写法:
-
from to
-
百分数
缩写语法:
animation:时长|过渡方式|延迟|次数|方向|填充模式|是否暂停|动画名;
- 时长:1或者1000ms
- 过渡方式:跟transition一样
- 次数:数字或则infinite
- 方向:reverse、alternate、
- 填充模式:none、forwards、backwards、both
- 是否暂停:paused、running