我理解v8 :: Isolate的想法,我理解运行的所有内容都在与隔离相关联的v8 :: Context中运行。与不同分离株相关的上下文不能共享任何内容。
我的问题是,在一个孤立中有多个上下文是什么意思?在上下文之间共享什么?什么是他们之间的离散?什么时候可以在一个东西中制作东西并在另一个中使用它?通常在API中,如果在创建它时需要隔离或上下文,它似乎几乎是任意的。
此外,欢迎任何关于在单个隔离中使用多个上下文的案例的建议,以帮助我更好地理解它们。
我看到了这个问题:What exactly is the difference between v8::Isolate and v8::Context?但它并没有真正详细说明如何/为什么在单个隔离中使用多个上下文。
谢谢。
答案 0 :(得分:2)
我从邮件列表中获取的信息是,除了函数之外,几乎所有内容都可以在同一个隔离区中的上下文中共享。
这取决于安全策略。默认情况下,所有内容都是共享的。
您可以使用开启访问权限检查 v8 :: ObjectTemplate :: SetAccessCheckCallback()来阻止访问 每个财产基础或通过改变完全不允许共享 安全令牌与v8 :: Context :: SetSecurityToken()。
除此之外:我相信您需要传递上下文的原因 v8 :: Object :: Set()用于消除重载函数的歧义。 C ++ 不允许仅在返回类型上进行重载。
它也稍快一些。查找Set()的非上下文版本 当前上下文并调用上下文的Set()。
定义"一切"?我可以采取任何JavaScript程序并采取每个 行并在不同的上下文中运行它(在同一个分离器上)它会 工作?至少在理论上,该计划没有根本改变?
不完全。 V8中的基本执行单元是功能。 函数属于他们编译的上下文。