JS开销和如何缩短解析时间【为什么我的JS运行慢】

406 阅读2分钟

「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战」。

1. JS开销在哪里

image.png

2. 相同大小的资源的时间开销

  • js 的时间开销要远大于 其他资源
  • js 除了需要下载外,编译解析执行也要花费时间
  • js 会阻塞整个页面,导致慢

image.png

如上图 都是170KB的资源,

类型开销总计
js编译/解析 大约2s, 执行 大约1.5s3.5s
图片解码0.064秒,绘制 总耗时 0.028s0.092s

3. 对 网站进行简单的数据分析

electronics-vr-gaming-dcode.myallvalue.com/ 为例 在Main(1) 主线程 找到 解析脚本(2)的任务 的 Summary找到我们主要解析的JS image.png

然后我们看它具体做了哪些事情,耗时多久

image.png

我们是不是可以对一些第三方的库进行优化下,比如lodash、moment 等

4. 解决方案

  • code splitting 代码拆分
    • 需要的时候在进行加载,不加载无用的代码
  • 按需加载 tree shaking 代码减重
    • 打的包里不包含不需要的东西

4.1 JavaScript 优化:

加载:减少传输的体积,进行压缩

4.2 解析编译:

  • Code splitting 代码拆分,按需加载
  • Tree shaking 代码减重

4.3 减少主线程工作量:

  1. 避免长任务

  2. 避免超过 1kb 的行间脚本

    • (浏览器无法对行间脚本进行有效的优化,减少行间脚本的使用)
  3. 使用 rAF 和 rIC 进行时间调度

4.4 Progressive Bootstrapping 渐进式启动

可见不可交互 vs 最小可交互资源

  • 减少首屏的资源量

5. Loading is a Journey is it happening?

虽然未来网速会越来越快,但是总会有网络不好的情况存在 Loading is a Journey is it happening?

  • First Contentful Paint 尽快告诉用户访问成功
  • is it useful?First Meaningful Paint 这个网站是否是有用的
  • is it usable?time to interactive 什么时候可以交互

image.png