ShadowRealm 是一个正在制定的 ECMAScript 标准,它允许开发者创建一个全新的、被隔离的 JavaScript 全局环境(Global Environment)。
我们经常需要处理来自不同来源的代码,无论是第三方的广告、分析脚本、用户自定义插件,还是动态加载的模块,将这些不受信任或半信任的代码集成到我们的应用中时,总会伴随着巨大的风险。
为了解决这些问题,开发者们曾尝试过各种方法,如 iframe、Web Workers,甚至是危险的 eval。但它们各有缺点:iframe 过于笨重,通信复杂;Web Workers 是异步的,不适合需要同步执行的场景;eval 则完全没有隔离性。

什么是 ShadowRealm?
ShadowRealm 是一个正在制定的 ECMAScript 标准,它允许开发者创建一个全新的、被隔离的 JavaScript 全局环境(Global Environment)。
我们可以把它想象成一个轻量级的、纯粹为 JavaScript 准备的 iframe,但它没有 DOM、没有渲染开销,并且能够以一种可控的方式进行同步通信。
每个 ShadowRealm 实例都拥有自己独立的全局对象(globalThis)和一套完整的内建 JavaScript 对象(如 Object, Array, Promise 等)。在其中执行的代码无法访问主页面的 window 或 document,从而实现了强大的安全隔离。
核心概念与 API 用法
ShadowRealm 的 API 设计得非常简洁。主要包含以下几个部分:
(1) 创建 Realm
通过 new ShadowRealm() 构造函数可以轻松创建一个新的 Realm。
// 在主环境中
const realm = new ShadowRealm();
(2) 执行代码
使用 evaluate() 方法可以在 Realm 内部执行一段 JavaScript 代码字符串。这段代码会返回一个 Promise,解析后的值是代码的最终执行结果。

注意:evaluate 内部的代码无法访问外部作用域的任何变量。
(3) 导入函数
evaluate() 很有用,但更强大的功能是与 Realm 内部的函数进行交互。importValue() 方法允许我们从 Realm 内部导入一个函数,以便在主环境中调用它。
// `greet` 是在上面 evaluate 中定义的函数
const wrappedGreet = await realm.importValue(
// 'greet' 是 Realm 中全局可用的函数名
'greet'
);
// 调用这个“包装后”的函数
const message = await wrappedGreet('World');
console.log(message); // 输出: "Hello from the Realm, World!"
截至目前,ShadowRealm API 处于 TC39 流程的 Stage 3,意味着其设计已经稳定,只待浏览器厂商广泛实现和最终批准。
AI大模型学习福利
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
四、AI大模型商业化落地方案

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量
1138

被折叠的 条评论
为什么被折叠?



