[TOC]

首先都听说过一道经典的面试题:从在浏览器中输入url到页面呈现,这中间都发生了什么?

  1. HTTP请求阶段
  2. HTTP响应阶段
  3. 浏览器渲染阶段

相关概念

GPU

显卡处理器称为图形处理器(即 GPU),它是显卡的“心脏”,与CPU类似,只不过GPU是专门为执行复杂的数学和几何计算而设计的,这些计算是图形渲染所必需的。一些最快速的GPU集成的晶体管数甚至超过了普通CPU。

进程(Process)和线程(Thread)

每打开一个应用程序就相当于开启了一个进程,在一个进程中可以同时做好多事情,每一件事情又可以称为一个线程。简单来说,进程就是一个应用程序,线程是干活的。

// 声明文档类型为html
// DOCTYPE就是document type
<!DOCTYPE html>
1
2
3

需要注意:js是单线程的,浏览器是多线程的

GPU(显卡)-用来绘制页面

浏览器渲染机制和原理

  1. 解析HTML生成DOM树,解析CSS生成CSSOM树
  2. 将DOM树和CSSOM树结合,生成渲染树(render Tree)
  3. Layout(回流):根据生成的渲染树,计算它们在设备视口(viewport)中的确切位置和大小,这个计算阶段就是回流
  4. Painting(重绘):根据渲染树以及回流得到的几何信息,得到节点的绝对像素
  5. Display:将像素发送给GPU,展示在页面上。

需要注意:浏览器第一次渲染,回流肯定在重绘之前。回流一定会导致重绘,重绘不一定导致回流。

性能优化

  1. 减少http请求次数和大小
    1. 资源合并压缩(雪碧图)
    2. 图片懒加载
    3. 音视频走流文件(m3u8)
  2. DNS缓存
  3. 304缓存
  4. 尽量的避免重绘和回流