TC39最近有个提案让开发者集体笑场——ShadowRealms,直译过来叫"暗影领域"。名字中二感拉满,但解决的问题很实在:怎么让JavaScript代码在隔离环境里跑,又不搞乱主线程。

先说背景。你肯定听过"JavaScript是单线程的"这句话,技术上没错,但实际用起来总觉得哪里不对——Web Workers明明能让JS在多线程跑啊?

打开网易新闻 查看精彩图片

关键区分在这里:JS语言本身是单线程的,但JS应用可以跨多个realm(领域)。一个浏览器标签页是一个realm,有自己的主线程;一个Web Worker是另一个realm,有自己的worker线程;跨域iframe也是独立realm。每个realm有独立的全局环境,比如浏览器里全局对象是Window,不同iframe的Window互不相等。

打开网易新闻 查看精彩图片

现在的问题是,创建新realm的手段很有限。Web Workers需要单独文件或blob URL;iframe得插DOM,还受同源策略限制。开发者想要一个轻量、隔离、可编程控制的执行环境,选择不多。

ShadowRealms提案就是补这个缺口。它允许代码动态创建新的JS realm,不需要iframe或Worker的包袱。新realm有干净的全局对象,与主realm隔离,但可以通过特定API通信。简单说:终于能把不信任的代码关进"小黑屋"跑,不用怕它乱动主环境。

打开网易新闻 查看精彩图片

这对沙箱化第三方脚本、插件系统、测试隔离都是好消息。提案还在TC39流程中推进,但"暗影领域"这个命名,估计已经提前锁定了年度最中二技术术语。