Skip to content

性能优化从零到一

性能优化需要做的事情很多 我所理解的是从网络层面,构建层面,浏览器渲染层面,服务器层面展开

页面监控的指标有哪些

FCP(First Contentful Paint):白屏时间(第一个文本绘制时间)

Speed Index:首屏时间

TTI(Time To Interactive):第一次可交互的时间

lighthouse score(performance):Chrome 浏览器审查工具性能评分

FCP(白屏时间):是指从用户进入网站(输入 url、刷新、跳转等方法)的时刻开始计算,一直到页面有内容展示出来的时间节点

这个过程包括 dns 查询、建立 tcp 连接、发送首个 HTTP 请求、返回 html 文档、html 文档 head 解析完毕

有哪些软件可以监控到

百度、google...

如何提速

说白了是如何做性能优化,这里不说废话,从四个角度切入

前端工程化角度思考(以 webpack 为例)

webpack 方面的

构建时压缩图片、使用 webp 图片、优化 SVG 图标

框架角度

Vue 我不熟,仅 React 而言,可以从这几个方面来做功夫

如果是类组件的话,使用 pureComponent、shouldComponentUpdate

如果是函数式组件的话,可以使用 useMemo、useCallback、memo

useMemo 和 useCallback 的区别

memo 应该和 useMemo 结合

优化 UI 代码体积

使用 React.lazy 做代码分割

如果遇到列表,使用 key 做关键字,并可使用虚拟列表

关于虚拟列表的解决方案,我在这篇文章都写了

具体为懒加载、IntersectionObserver、getBoundingClientRect

HTTP 方面

使用 HTTP 缓存

升级为 HTTP2

服务器使用 gzip 压缩

OSS+CDN 加速

页面构建方面

CSS 放顶部、JS 放底部

减少回流和重绘

回流和重绘

script defer、async

实战

react 项目部署后如何工作

缓存周末工作(搭配 node 服务器实战)

js、css、html 保证更新,又利用缓存

纯协商缓存方案

优点:能够保证每次前端打包后丢上服务器资源一定更新

缺点:只要文件是新放的,即使文件内容没变也不缓存

强缓存加定时

优点::一定期限内,根本不用向服务器询问,一定是拿到缓存。速度最快

缺点:如何不配合hash,无法感知到文件更新

参考资料