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流程中推进,但"暗影领域"这个命名,估计已经提前锁定了年度最中二技术术语。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.