Appearance
性能优化
参考:
前端性能优化可以从下面几个方面入手
- 减少请求数
- 字体图标、雪碧图
- 合并js、css
- 长链接
- 文件按需加载
- 优化请求速度
- 预加载
- 资源压缩,减少请求文件的体积
- CDN
- webp
- 缓存
- http缓存
- 本地数据持久化
- 首屏效果
- ssr
- 非关键资源延迟加载
- 骨架屏
- BigPipe
总结
- 减少http请求,主要思想就是减少HTML文档内链接的资源数量:
- 项目上线时将
CSS``JavaScript
等文件压缩合并打包,减少源文件的数量和体积 - 将多张小图片制作成精灵图
- 将资源转换为
base64
编码 - 使用缓存可以加快网页打开速度,有效减少http请求
- 使用懒加载,按需加载对应资源
- 项目上线时将
- 页面加载速度
- 使用多个域名来存储网络资源
- 页面渲染流程
- 选择器从右向左解析,嵌套顺序不宜过深
- 页面打开效率
- 使用CDN加载资源
- 将CSS放在页面头部,防止页面闪烁
- 将JavaScript异步或延迟加载,防止JavaScript运行阻塞页面加载
- 延迟请求首屏外的文件,即优先加载首屏内容。
- 页面运行效率
- reflow和repaint可能会严重影响性能,需要尽可能的减少reflow和repaint操作
- 不要一条一条地修改DOM的样式,如果修改的样式过多可以将样式统一在某个类中,然后直接更改元素节点的className;
- 使用临时变量保存DOM节点,而不是每次都直接对DOM节点进行操作(减少元素节点的读写),在JS性能与浏览器性能方面都能得到一些优化;
- 尽可能修改层级比较低的DOM,缩小操作的影响范围;
- 放弃使用table进行布局,一个很小的改动都会造成整个table的重新布局
- JavaScript中减少作用域链的查找,避免使用
eval
和Function
等性能缓慢的接口 - DOM操作的代价是十分昂贵的,可以使用
DocumentFragment
暂时存放那些一次插入文档的节点 - 事件节流
- reflow和repaint可能会严重影响性能,需要尽可能的减少reflow和repaint操作
一些需要注意的小细节
问:图片懒加载中,为何将实际图片资源路径放在data-src
中? 答:所有 HTML 中自定义的属性,都应该用data-开头,因为data-开头的属性浏览器渲染的时候会忽略掉,提高渲染性能。
长列表性能优化
如果需要渲染的DOM节点很多,会导致页面很卡,可以使用“窗口化”的技术来优化
bigPipe
参考
解决问题:减少白屏时间,提高首屏加载渲染速度
实现原理:
- bigpipe主要思想是将页面区域按拆分成多个模块,然后通过Web服务器和浏览器之间建立管道,进行分段输出。
- 主要使用HTTP响应头
Transfer-Encoding:chunked
,让浏览器尽早的接收到html,可以先行渲染。
用于页面上各个模块之间联系较小,可以分开展示,对于SEO需求较弱的场景下,可以使用bigpipe让用户尽可能早地看见视图,