一、JavaScript 的开销和如何缩短解析时间
JavaScript 的开销在哪里呢?
- 加载
- 解析&编译
- 执行
JS和其他静态资源有较大差别,除了加载以外,它还需要解析、编译并执行,按照 reddit.com 的统计结果,JS 的处理过程所花费的时间大概能占到整个页面加载时间中的 10-30%。
JavaScript 代码优化
- 加载方面,除了一般性质的加载优化方法以外(比如说:压缩),JavaScript特有的方法主要是以下两点:
- Code splitting 代码拆分,按需加载
- Tree shaking 代码减重
- 解析执行方面,主要是减少主线程的工作量
- 避免长任务(W3C 性能组规定:执行时长大于 50ms 的任务,定义为长任务)
- 避免超过1kb的行间脚本
- 使用rAF和rIC进行时间调度
函数解析优化
- lazy parsing 懒解析 vs eager parsing 饥饿解析
饥饿解析可以提高函数的调用效率。 - 利用 Optimize.js 优化初次加载时间
对象优化
- 以相同顺序初始化对象成员,避免隐藏类的调整
- 实例化后避免添加新属性
- 尽量使用Array代替array-like对象
- 避免读取超过数组的长度,否则会查找能够原型链
- 避免元素类型的转换
二、HTML 优化
- 减小 iframes 使用
- 压缩空白符
- 避免节点深层级嵌套
- 避免Table布局
- 删除注释
- CSS&JS 尽量外链
- 删除元素默认属性
三、CSS 优化
- 利用 Chrome Dev Tools 测量 CSS 性能
在 Performance 中查看 main 下的 样式计算时间。 - 降低CSS对渲染的阻塞
- 利用 GPU 进行完成动画
- 使用 contain 属性
- 使用 font-display 属性