13-前端性能优化

100 阅读2分钟
  • 讲到前端性能优化就需要讲到一个url请求到网页渲染的过程了

从上面看到涉及到了网络层面,服务端层面,构建层面,浏览器渲染层面

1. 经历的过程

DNS解析 -> http请求 -> 服务器返回 -> 浏览器渲染

1.1 DNS解析

DNS解析就是浏览器查到ip地址的过程 找的话是先从本地host文件找,如果没找到则向本地DNS服务器(地址是8.8.8.8/114.114.114.114)查找。如果上面都没有找到的还则一层层向上找,直到找到13台根服务器。

1.2 http请求 和服务器渲染

找到ip地址后生成http请求并通过TCP/IP协议发送给Web服务器,web服务器相应通过TCP/IP协议将资源返回给服务器。

1.3 浏览器渲染

浏览器返回html,从上到下进行加载

  • html解析生成DOM
  • css解析生成css 规则树(css rule Tree)
  • DOM 树和css树结合生成render tree
  • 浏览器开始深度遍历进行渲染,绘制渲染树

这个过程会有回流和重绘

2. 优化的点:

2.1. DNS预解析

mozilla上的解释

DNS-prefetch是尝试在请求资源之前解析域名。仅对跨域域上的DNS查找有效

2.2 减少http请求方面

  1. 合并请求,合并js,css,图片等方式来减少请求
  2. 域名拆分:主要是为了增加浏览器的下载的并行度,让浏览器能同时发出更多的请求
    • 主域名abc.com,js,css和图片使用三个域名加载,分别是img.abc.com,css.abc.com,img.abc.com

2.3 减少资源请求的大小方面

  1. 开启gzip压缩,可以将资源在服务端进行压缩,然后发送到浏览器后进行解压
  2. 前端的代码进行打包

2.4 减少连接的次数方面

  1. 开启keep-alive,开启keep-alive能有效减少浏览器与服务器建立连接的次数

2.5 建立缓存机制

  • 资源文件的强缓存和协商缓存
  • 数据也可以做缓存localStorage,sessionStorage,cookie,localStorage,cookie
  • 离线存储(很少用)manifest
  • CDN区域分布式服务器的开发和部署(费钱,效果会很好)

2.6 代码层面上的优化

  • 减少DOM的重绘和回流
  • 在js中尽量减少闭包的使用(内存优化)
  • 在js中避免'嵌套循环'和'死循环'
  • 尽可能使用事件委托
  • 尽量减少css表达式的使用