“春江水暖鸭先知,产品好坏客户知”,作为前端开发,我们更注重客户体验,产品的好坏决定着客户的体验,那么一款产品的好坏有很多因素,其中性能是决定因素,那么怎么优化才能让产品的性能达到优良,让客户体验良好,今天我就带大家去了解学习前端性能优化 。
![前端性能优化到底在优化什么?怎么优化](http://img.jiangsulong.com/220412/0HKAE5-0.jpg)
文章插图
优化的目的优化的目的在于让页面加载的更快,对用户操作响应更及时,为用户带来更好的用户体验,对于开发者来说优化能够减少页面请求数,能够节省资源 。
前端优化的方法有很多种,可以将其分为两大类,第一类是页面级别的优化如http请求数,内联脚本的位置优化等,第二类为代码级别的优化,例JAVAscript中的DOM 操作优化、css选择符优化、图片优化以及 html结构优化等等 。
优化哪些?那么我们需要优化那些点呢?
- 加载资源优化
- 渲染优化
- 浏览器缓存策略
- 图片优化
- 节流与防抖
![前端性能优化到底在优化什么?怎么优化](http://img.jiangsulong.com/220412/0HKC4S-1.jpg)
文章插图
加载资源优化说起加载,当我们输入URL时,我们要知道这中间发生了什么?
- 首先做 DNS 查询,如果这一步做了智能 DNS 解析的话,会提供访问速度最快的 IP 地址回来
- 接下来是 TCP 握手,应用层会下发数据给传输层,这里 TCP 协议会指明两端的端口号,然后下发给网络层 。网络层中的 IP 协议会确定 IP 地址,并且指示了数据传输中如何跳转路由器 。然后包会再被封装到数据链路层的数据帧结构中,最后就是物理层面的传输了
- TCP 握手结束后会进行 TLS 握手,然后就开始正式的传输数据
- 数据在进入服务端之前,可能还会先经过负责负载均衡的服务器,它的作用就是将请求合理的分发到多台服务器上,这时假设服务端会响应一个 HTML 文件
- 首先浏览器会判断状态码是什么,如果是 200 那就继续解析,如果 400 或 500 的话就会报错,如果 300 的话会进行重定向,这里会有个重定向计数器,避免过多次的重定向,超过次数也会报错
- 浏览器开始解析文件,如果是 gzip 格式的话会先解压一下,然后通过文件的编码格式知道该如何去解码文件
- 文件解码成功后会正式开始渲染流程,先会根据 HTML 构建 DOM 树,有 CSS 的话会去构建 CSSOM 树 。如果遇到 script 标签的话,会判断是否存在 async 或者 defer ,前者会并行进行下载并执行 JS,后者会先下载文件,然后等待 HTML 解析完成后顺序执行,如果以上都没有,就会阻塞住渲染流程直到 JS 执行完毕 。遇到文件下载的会去下载文件,这里如果使用 HTTP 2.0 协议的话会极大的提高多图的下载效率 。
- 初始的 HTML 被完全加载和解析后会触发 DOMContentLoaded 事件
- CSSOM 树和 DOM 树构建完成后会开始生成 Render 树,这一步就是确定页面元素的布局、样式等等诸多方面的东西
- 在生成 Render 树的过程中,浏览器就开始调用 GPU 绘制,合成图层,将内容显示在屏幕上了
- DNS 解析
- TCP 连接
- HTTP 请求/响应
【前端性能优化到底在优化什么?怎么优化】HTTP优化可分为两个方面:
- 尽量减少请求次数
- 尽量减少单次请求所花费的时间
- 合理的设置http缓存,恰当的缓存设置可以大大减少http请求 。要尽可能地让资源能够在缓存中待得更久 。
- 从设计实现层面简化页面,保持页面简洁、减少资源的使用时是最直接的 。
- 资源合并与压缩,尽可能的将外部的脚本、样式进行合并,多个合为一个 。
- CSS Sprites,通过合并 CSS图片,这是减少请求数的一个好办法
浏览器是并发请求的,很多时候我们会加入很多的外链脚本,而外链脚本在加载时却常常阻塞其他资源,例如在脚本加载完成之前,它后面的图片、样式以及其他脚本都处于阻塞状态,直到脚本加载完成后才会开始加载 。如果将脚本放在比较靠前的位置,则会影响整个页面的加载速度从而影响用户体验 。所以说尽可能的将脚本往后挪,减少对并发下载的影响 。
推荐阅读
- 性能出色,纯CSS实现的loading动画——Loaders.css
- 你值得拥有的 11 个前端开发利器
- Web前端学习入门之HTTP协议知识整理
- 新网站上线影响网站优化排名的四个因素
- 10个MySQL使用技巧及30个搜索优化方法
- Linux性能调优,从优化思路说起
- 搜索引擎优化之关键字的选择
- 一招开启win10“最强”模式,让你的电脑性能急速飙升!
- 48条高效率的PHP优化写法
- 数据库8种优化方式