关于这个问题相信大家并不陌生,基本上都是大家都会有一模一样的答案,但是可曾想过为什么会总问这个问题
关于这个问题的一点猜想----性能
在一个请求的过程中,我们在那个过程可以做到性能优化。首先说说前端的性能准则:
RAIL是一个以用户为中心的性能模型,分别是Response(响应)、Animation(动画)、Idle(空闲)、Load(加载)。
Response 100ms响应用户的输入、反馈
Animation 每一帧16ms
Idle 应把任务分割成执行时间小于50ms的代码片段
Load小于1s的加载,最差不超过5s
其次,前端的性能指标也不能忽视,下面仅仅列举了个人认为重要的指标。
FCP (fisrt contentful paint)首次内容绘制
LCP(largest contenful paint)最大内容绘制
FID (first input delay)首次输入延时
TTI(Time to Interactive)首次可交互时间
CLS (cumulative layout shift)累计布局偏移
那么现在就谈一谈URL输入到返回可以做哪些性能优化
首先是dns解析层面
- 减少dns查找
- dns-prefetch
- 延长dns解析时间
- 尽可能使用A或者AAA记录代替CNAME
- 使用cdn加速域名
- 清除dns缓存
其次,http层面
- 压缩传输的数据资源(GZip压缩方式)
- 响应数据压缩处理
- 使用http缓存,预估缓存时效,控制中间代理的缓存,规划缓存的层次结构
- 拆分源码分包加载
最后,页面渲染层面
- HTML文档结构层次尽量少,最好不深于六层;
- 脚本尽量后放,放在前即可;
- 少量首屏样式内联放在标签内;
- 样式结构层次尽量简单;
- 在脚本中尽量减少DOM操作,尽量缓存访问DOM的样式信息,避免过度触发回流;
- 减少通过JavaScript代码修改元素样式,尽量使用修改class名方式操作样式或动画;
- 动画尽量使用在绝对定位或固定定位的元素上;
- 隐藏在屏幕外,或在页面滚动时,尽量停止动画;
- 尽量缓存DOM查找,查找器尽量简洁;