什么是属于单个隔离的多个V8上下文对象的共享/离散?

时间:2016-06-23 02:22:15

标签: javascript v8

我理解v8 :: Isolate的想法,我理解运行的所有内容都在与隔离相关联的v8 :: Context中运行。与不同分离株相关的上下文不能共享任何内容。

我的问题是,在一个孤立中有多个上下文是什么意思?在上下文之间共享什么?什么是他们之间的离散?什么时候可以在一个东西中制作东西并在另一个中使用它?通常在API中,如果在创建它时需要隔离或上下文,它似乎几乎是任意的。

此外,欢迎任何关于在单个隔离中使用多个上下文的案例的建议,以帮助我更好地理解它们。

我看到了这个问题:What exactly is the difference between v8::Isolate and v8::Context?但它并没有真正详细说明如何/为什么在单个隔离中使用多个上下文。

谢谢。

1 个答案:

答案 0 :(得分:2)

我从邮件列表中获取的信息是,除了函数之外,几乎所有内容都可以在同一个隔离区中的上下文中共享。

  

这取决于安全策略。默认情况下,所有内容都是共享的。

     

您可以使用开启访问权限检查   v8 :: ObjectTemplate :: SetAccessCheckCallback()来阻止访问   每个财产基础或通过改变完全不允许共享   安全令牌与v8 :: Context :: SetSecurityToken()。

     

除此之外:我相信您需要传递上下文的原因   v8 :: Object :: Set()用于消除重载函数的歧义。 C ++   不允许仅在返回类型上进行重载。

     

它也稍快一些。查找Set()的非上下文版本   当前上下文并调用上下文的Set()。

  

定义"一切"?我可以采取任何JavaScript程序并采取每个   行并在不同的上下文中运行它(在同一个分离器上)它会   工作?至少在理论上,该计划没有根本改变?

  

不完全。 V8中的基本执行单元是功能。   函数属于他们编译的上下文。