通用方法
工程化
html
- 减少 DOM 层级;
- 响应式图片/视频;
- 使用 ssr;
- 减少入口文件体积;
- 减少入口文件执行时间;
- 使用 preload 和 as 预加载 js;
- 使用 import() 动态加载;
- 减少第三方代码;
- 使用 async 和 defer 异步/延迟加载 js;
- 放置于 html 底部;
css
- 压缩 css;
- 使用 preload 和 as 预加载 css;
- 关键 css 使用内联 css;
- 合理使用 css 选择器;
- 放置于 html 底部;
- 使用 js 动态加载;
静态文件
优化指标
FCP
FCP
优化手段
- 优化 js;
- 优化 css;
- 优化静态文件;
- 优化字体;
LCP
LCP
优化手段
TTI
TTI
优化手段
- 优化 js;
- 最小化;
- 预加载;
- 减少执行时间;
- 减少第三方代码;
- 最小化主进程工作;
TBT
TBT
- 页面堵塞用户输入的总时间:FCP 到 TTI 之间的时间;
优化手段
优化手段
CLS
CLS
造成原因
- 无尺寸的图片;
- 无尺寸的 iframe;
- 动态注入的内容;
RAIL
- Response Time:用户交互的响应时间,要求小于 100ms;
- Animation:动画在 16ms 内绘制完成;
- Idle:页面在没有用户输入和事件触发时的时间,尽量短;
- Load:页面加载时间,尽量短;
SSR
SSR
优缺点
- 优点;
- 首屏加载速度快:服务器预先生成 HTML,客户端在收到响应之前即可显示部分页面;
- 支持 SEO;
- 用户体验好:首屏加载速度快;
- 缺点;
- 服务器压力大;
- 开发成本高:额外的服务器页面模板,数据获取流程;
简要流程
- 配置服务器环境:客户端搭建 node 环境;
- 应用服务器:监听 HTTP 请求,返回 HTML 文本;
- 路由:根据不同路径返回对应 HTML;
- 客户端脚本:HTML 插入客户端脚本,用于交互和数据获取;
- SEO 优化:添加
<meta\>
标签;
性能分析
性能分析工具
浏览器开发者工具
- NetWork 面板;
- Performance 面板;
- Lighthouse 面板;
Web 性能优化工具