2016-06-23 16 views
6

我明白一個v8 :: Isolate的概念,並且我明白所有運行的東西都運行在一個與隔離體相關的v8 :: Context中。與不同分離物相關的上下文不能共享任何內容。跨多個屬於單個隔離的V8上下文對象的共享/離散是什麼?

我的問題是,在一個隔離中有多個上下文是什麼意思?上下文之間共享什麼?它們之間是什麼離散的?你什麼時候可以製作一些東西並在另一箇中使用?通常在API中,如果某些東西在創建時需要隔離或上下文,那麼它往往是任意的。

此外,歡迎任何有關在單個隔離中使用多個上下文的建議,以幫助我開始更好地理解它們。

我看到這個問題:What exactly is the difference between v8::Isolate and v8::Context?但它並沒有詳細說明如何/爲什麼在單個隔離中使用多個上下文。

謝謝。

回答

1

我從郵件列表中獲得的信息是幾乎所有東西都可以在同一個隔離區中的功能之外的環境中共享。

這取決於安全策略。默認情況下,一切都是共享的。

您可以打開訪問檢查與 V8 :: ObjectTemplate :: SetAccessCheckCallback(),以阻止在 每個屬性基礎上獲得或不允許通過改變V8 ::背景下 安全令牌一起分享:: SetSecurityToken( )。另外:我相信你需要傳遞上下文到 v8 :: Object :: Set()的原因是爲了消除重載函數的歧義。 C++ 不允許僅在返回類型上重載。

它也稍快。 Set()的非上下文版本查找當前上下文 並調用置換的Set()。

定義 「一切」?我可以採取任何JavaScript程序,並採取每個 線和運行它在不同的上下文(在相同的隔離),它會 工作?至少在理論上,這個計劃沒有根本的改變?

不太。 V8中的基本執行單元是函數。 函數屬於它們編譯的上下文。