2 min read

TLA isn't a footgun anymore

Explanation

TLA: top-level-await

这个提案经过两年的”激烈争辩“还是进入到了 stage3。

可以在提议链接中了解提议的初因,以及目前进度受到阻碍的细节

之所以能进入这个阶段主要是解决(或者规避)了 Rich-Harris 提出的初期反对意见 Top-level await is a footgun

Harris 最新的更新也写明了他完全支持目前提案的新方向

简单讲 TLA 的新方向解决了3个主要的问题:

  1. 具有 TLA 的模块不会阻止同级执行,也就是同级不会阻碍
  2. 只支持 ES-Module,规避了 CJS 或普通 script 会出现的问题
  3. 不会阻碍资源加载,因为 TLA 在模块的执行阶段,此时已完成加载

另外 之前没有 TLA,比较 hack 的代替方法是 (async main(){...}()) ,不会有阻塞问题,但会对静态分析造成困难

目前 TLA 还有一些问题待解决

References

  1. https://github.com/tc39/proposal-top-level-await
  2. https://v8.dev/features/top-level-await