在当前的前端开发中,越来越多的重型应用依赖高复杂度的JavaScript,然而很多时候,在不经意间提升了JS的开销。
那么就需要有一定的规则来提高应用更快的运行。
$$ 更少的代码 = 更小的解析开销 + 更少的传输与解压 $$

网络

如果JavaScript的文本越大,那么通过线路发送更多字节的JavaScript需要的时间越长,下载和执行成本也就会更高。用户所体验到的就是越慢。

那么如何减少网络传输带来的开销呢

  • 通过代码的拆分,只传输页面需要使用到的代码。
  • 代码的压缩,通过(Brotli~q11,Zopfli 或者gzip)最大化的代码压缩,较少传送的代码量,进而加速加载速度
  • 删除不使用的代码,通过Devtools可以发现那些代码并没有使用
  • 通过缓存,减少资源的重复加载。根据JS的生命周期减少不会改变的JS文本,也可以使用最新的Service Worker进行弹性的缓存

解析/编译

当JavaScript文件下载完成后,JavaScript的最严重的开销就是JS引擎对代码的解析编译。如果JS的解析花费的时间越长的话,这样用户的交互响应对应的被延迟。尤其对于移动端来说,移动设备的CPU与GPU更慢,而且存储也更有限。
因此尽量去除不重要的JavaScript代码是很有必要的,这回减少传输时间,相应的也会加快CPU的解析编译速度,也会减少内存溢出的潜在风险。

执行

除了JavaScript的解析编译会花费大量时间外,JS的执行也会在主线程中执行,阻塞其他的各类交互响应,因此
JS的执行时间越长,也就会延长用户正常交互的等待时间

减少JavaScript传输开销模式

基于路由的分块或者PRPL,更加详细的介绍 => PRPL

其他类型的开销

  • 内存。如果GC频繁触发会导致页面出现卡顿。当浏览器进行内存的回收,就要导致JS暂停执行。注意避免内存泄漏与频繁的GC可以有更好的交互效果。
  • 大量计算。因为JS的单线程,如果主线程在做大量的计算处理,相应的就会导致页面的不可交互。因此将大工作量分块(requestAnimationFrame、requestIdleCallback),这样就可以减少不可交互的出现。