常用的前端性能优化手段
1.利用好http缓存。
http缓存分为强制缓存跟协商缓存。
①强制缓存:
A.Cache-Control,有如下几个值设置:
- no-cache: 数据内容不能被缓存, 每次请求都重新访问服务器, 若有max-age, 则缓存期间不访问服务器.
- no-store: 不仅不能缓存, 连暂存也不可以(即: 临时文件夹中不能暂存该资源).
- private(默认): 只能在浏览器中缓存, 只有在第一次请求的时候才访问服务器, 若有max-age, 则缓存期间不访问服务器.
- public: 可以被任何缓存区缓存, 如: 浏览器、服务器、代理服务器等.
- max-age: 相对过期时间, 即以秒为单位的缓存时间.
- no-cache, private: 打开新窗口时候重新访问服务器, 若设置max-age, 则缓存期间不访问服务器.
- private, 正数的max-age: 后退时候不会访问服务器.
- no-cache, 正数的max-age: 后退时会访问服务器.
B. Expires
- 以分钟为单位的绝对过期时间, 优先级比Cache-Control低
②协商缓存
A.Etag
B.Last-Modified
备注:通常我们都是在ngnix的location 中设置静态资源的缓存,只需添加add_header Cache-Control no-store,
一般不会不建议使用强制缓存,所以直接设置Cache-Control no-store,这样的话就可以利用协商缓存的etag跟Last-Modified这2个缓存便能满足缓存上的优化
2.升级http版本。
我们常用的htto版本是http1.1,但是我们可以把http升到2,http2比http1.1的优势在于:
①http1.1使用的是文本协议,http2使用的是流,并且还有流ID
②http2请求头使用流ID,所以可以实现多路复用
③http2header进行了压缩,同时客户端和服务器端同时维护一张头信息表,所有字段都记录在这张表中,这样后面每次传输只需要传输表里面的索引Id就行,通过索引ID查询表头的值。
3.开启gzip格式
- 在ngnix中开启gzip格式,目前大部分主流浏览器都支持gzip的格式,项目打包的时候,可以使用Compression的插件,将代码包进行压缩,这可以大大的降低带包文件包(压缩可降低60%的大小)
4.资源合并
- 利用构建工具,如webpack,vite等,将代码进行合并,比如将css,js分别合并到一个css,js里。
5.资源压缩
- 利用构建工具,如webpack,vite等,将代码进行压缩
6.路由按需加载
7.使用SSR渲染
- 使用服务端渲染,不仅可以加快首屏的加载,还有利于增加SEO引擎优化。缺点:增加服务端的压力
8.使用前端微服务
- 如果项目比较大,我们可以根据功能模块,将项目拆成多个微应用,常用的微前端有MicroApp,qiankun等
MicroApp:采用CustomElement(自定义标签)渲染的原理,以组件的形式引入
qiankun:采用的基于single-spa(shadowDOM)的原理实现,以路由的形式引入
9.图片懒加载
- 通常在首页如果需要加载图片的时候,我们可以设置图片为懒加载,并将图片上传到OSS,减少图片对前端服务器的带宽占用。
10.代码优化
- 尽量减少CSS的重绘重排,页面不宜过多的DOM节点,数据量大的情况下,使用分页,虚拟列表等方式渲染
11.设置脚本的async,defer
给脚本添加async,defer属性
-
async:异步加载,加载完会立刻执行脚本,阻碍DOM的渲染
-
defer:异步加载,DOM渲染完再去执行当前的脚本。如果多个defer,则等待所有defer下载完依次执行