前端性能部分总结
前端性能优化是提升用户体验的关键环节,涉及多个方面和指标。以下是对前端性能优化的总结,包括RAIL模型、重排与重绘、白屏时间、图片加载优化以及浏览器工作原理等关键内容。
一、RAIL模型
RAIL模型是衡量前端性能的重要指标,包括Response(响应)、Animation(动画)、Idle(空闲)和Load(加载)四个方面:
- Response(响应):用户输入到响应的时间不应超过100ms,以给用户瞬间完成的感受。超过50ms的响应应提供反馈,如加载进度或倒计时,以改善用户心理预期。
- Animation(动画):为了视觉上的平滑,每帧动画最好不要超过10ms(浏览器一般60帧每秒,16ms一帧,渲染每帧约需6ms)。用户对帧率的变化非常敏感。
- Idle(空闲):应最大化空闲时间,利用空闲时间完成延后的工作,如先加载页面可见部分,再利用空闲时间加载剩余部分。使用requestIdleCallback在空闲时间内执行的任务尽量控制在50ms内,以免影响输入响应时间。
- Load(加载):打开页面的时间不能超过5秒,最好不超过2秒。长时间的加载会导致用户流失。
二、重排与重绘
重排(reflow)和重绘(repaint)是网页渲染过程中耗费性能的操作,应尽量减少:
- 重排:当改变元素位置、大小、增删元素或改变窗口大小时,会引起重排。
- 重绘:当元素外观改变但不改变布局时,会触发重绘。
减少重排和重绘的方法包括:
- 集中改变样式,通过控制类名切换来控制样式改变。
- 读写分离,批量读取和修改DOM样式。
- 将DOM进行离线操作,如使用display: none将DOM离线,修改后再显示。
- 使用absolute或fixed脱离文档流,减少对其他节点的影响。
- 优化动画,如牺牲一些平滑性来换取速度,或启用GPU硬件加速。
三、白屏时间优化
白屏时间是指点击或打开URL后屏幕空白到出现第一个画面之间的时间,过长会严重影响用户体验。减少白屏时间的方法包括:
- 优化DNS查询时间,减少多次DNS查询的开销。
- 加快TCP/IP连接建立速度,通过优化服务器响应和浏览器缓存来减少响应时间。
- 优先加载首屏资源,如HTML、CSS和关键JS文件,以及首屏图片。
- 使用defer或async关键字延迟加载非关键JS资源。
- 考虑服务器端渲染(SSR)以优化首屏加载速度。
四、大量图片加载优化
- 优先加载首屏图片:确保首屏图片优先加载,提高用户感知速度。
- 图片裁剪与压缩:对图片进行按设备尺寸裁剪和压缩,减少图片体积和网络开销。
- 使用图片懒加载:在滚动或用户交互时动态加载非首屏图片。
五、浏览器工作原理
从输入URL到页面加载完成,浏览器经历了以下过程:
- DNS查询:将域名解析为IP地址,与服务器建立通信。
- TCP/IP连接:通过三次握手建立稳定的连接。
- 服务器处理请求:服务器处理请求并返回响应,涉及浏览器缓存策略(强缓存、协商缓存)。
- 页面解析与渲染:
解析HTML文件为DOM树。
解析CSS文件为CSSOM树。
DOM树和CSSOM树合并为渲染树。
进行布局(flow)和绘制(paint)。
JS线程可能阻塞DOM树构建和CSSOM树构建,因此最好将JS资源放在页面底部,并使用defer或async关键字延迟加载。
综上所述,前端性能优化涉及多个方面和指标,需要综合考虑并采取相应的优化措施以提升用户体验。